Google搜查列

 

2008年10月27日 星期一

簡單說明傅立葉轉換(Fourier Transform)

讀過通訊的人,都應該知道傅立葉轉換(Fourier Transform),這是必學的一個公式

簡單快速來說明這個公式的用途,不用太多的公式把人搞暈了,其他網站說明都一長串公式數字的

就是把在時域上的圖形訊號,透過Fourier transform公式,算出頻域上的圖形訊號

就是知道時域,想知道頻域資訊,就要透過傅立葉轉換,才知道圖長什麼樣子

要是知道頻域,想知道時域資訊,就要透過反傅立葉轉換,就可以了

下圖,就是一些最常看到的訊號,左邊是時域的圖示,右邊是經過傅立葉轉換後的,也可用反傅立葉轉換回時域

簡單一句,傅立葉轉換的物理意義是:透過Fourier Transform,把時域和頻域互相轉換,取得想要的資訊

2008年10月2日 星期四

Perl使用 mail::sendmail MIME::Base64

最近要需要把server上的一些資訊
每天定時的E-mail到指定信箱

是管理員看倒是還好
但是是長官有要看,就要用HTML的mail格式了

HTML還要插入圖片,這下就不是那麼簡單了

努力了幾天,可以找到幾個套件,合併使用,可以達到我要的目的

用來把文字編碼成Base64的套件 MIME::Base64;
郵件寄送套件 Mail::Sendmail;

注意同顏色的變數,要一樣的才會插入圖片生效
而且最好用outlook收件才會有效果

#!/usr/bin/perl

use MIME::QuotedPrint;
use HTML::Entities;
use Mail::Sendmail 0.75; # doesn't work with v. 0.74!
use Mysql;
use MIME::Base64;

# MYSQL CONFIG VARIABLES
$host = "localhost";
$database = "useracc";
$tablename = "acc";
$user = "bird";
$pw = "12345";

# PERL MYSQL 建立連線()
$connect = Mysql->connect($host, $database, $user, $pw);

# SELECT DB 選擇資料庫
$connect->selectdb($database);

$myquery = "SELECT * FROM $tablename";

# EXECUTE THE QUERY 對連線下指令
$execute = $connect->query($myquery);

#取回得到的資料放入變數 $retnumber
my $retnumber = $execute->numrows();

#SQL CLOSE
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#使用localtime()取得現在時間
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time);

#年份要加上1900才是公元
$year=$year+1900;
#月份要加上1才正確
$mon=$mon+1;

#開始要預先編輯html的內容放入變數
my $html="$year 年 $mon 月 $mday 日 $hour : $min
";
$html=$html."$tablename 現在有$retnumber 筆資料
";

#使用. 符號合併 字串

#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ FILE encode64
#放入附件前,要先把圖檔作編碼為base64
open(FILE, "/home/eth0-day.png") or die "$!";
while (read(FILE, $buf, 60*57)) {
$ee= encode_base64($buf);
$ff =$ff.$ee;
}
close FILE;
#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ FILE encode64

#=================== mail資訊
%mail = (
from => 'report@domain.com',
to => 'you@domain.com',
subject => "XXX Server $year/$mon/$mday $hour:$min Report",
);
#=================== mail資訊end

#一些標準標籤設定宣告一下
$boundary = "====" . time() . "====";
$boundary = '--'.$boundary;
$mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\"";

$file = $^X; # This is the perl executable

open (F, $file) or die "Cannot read $file: $!";
binmode F; undef $/;
$mail{body} = encode_base64();
close F;

#---------------------------------- 真正編輯mail標頭及內容
$mail{body} = << END_OF_BODY;
$boundary Content-Type: text/html;
charset="UTF-8" Content-Transfer-Encoding: quoted-printable

$html
< src=""cid:eth0-day.png>

$boundary
Content-Type: image/png;
name="eth0-day.png"
Content-Transfer-Encoding: base64
Content-ID: <656020898@300920332-0c65>
Content-Description:
Content-Location: eth0-day.png"

$ff

$boundary--
END_OF_BODY

#---------------------------------- 真正編輯mail標頭及內容 結束


#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 使用MAIL::SENDMAIL 寄出郵件
sendmail(%mail) || print "Error: $Mail::Sendmail::error\n";

2008年8月25日 星期一

mysql + php 使用utf-8

很多人在使用mysql和php作網頁程式的撰寫

但同時想使用utf-8編碼

但這三樣東西合在一起,就會給很多人產生很多煩惱

就是寫入Datebases的資料和讀出來的資料都變成亂碼了

倒地要怎麼作,才能完完全全的把我想要的國際碼utf-8完整寫入datebases和完整讀出來呢

我在過去也是因為這個問題研究了很久,找了很多資料

現在有心得分享給大家

主要要三個條件同時成立,才能有完整寫入和讀取的效果

1.MySQL資料庫裡的Datebases、Tables和欄位在建立時,必須要是utf8_bin的文字校對屬性
2.php網頁文件的內文必須儲存成utf-8格式,及html的utf-8宣告
3.IIS或Apache 跟Mysql之間連線要使用UTF-8

以上三點是很必要的,我來一點一點說吧

1.MYSQL文字校對:

先對所需要存放資料的mysql資料庫格式作個改變
如已經建立的Datebases,就可以下指令變更資料庫格式 (以照你的環境變更藍色字體的資料庫名稱)
ALTER DATABASE `datebases_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

變更datebases 之後,就要對tables作變更了 (以照你的環境變更藍色字體的表格名稱)
ALTER TABLE `tables_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ROW_FORMAT = DYNAMIC

再之後要變更你的儲存格為utf-8了 (以照你的環境變更藍色字體的欄位名稱) 例子為變更account的欄位
ALTER TABLE `datebases_name`.`tables_name` CHANGE `account` `account` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

*注意:欄位的屬性跟可不可以下
CHARACTER SET utf8 COLLATE utf8_bin有關,比如int、smallint等,變成utf8會沒什麼意義,所以要注意欄位的特性

2.就是php的文件格式
以很多種編輯軟體來說,當你在存檔時,可以選擇UTF-8,以記事本來說,另存新檔就有UTF-8格式可選擇


其他的編輯軟體,也都要這樣改變文件格式,以我知道的FrontPage 2003、Pspad等都有支援utf-8

3.文件內文的語法
先說html吧,至少要下一行
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
這行是告知連線上來的瀏覽器,網頁內容是使用UTF-8編碼的

再來在PHP的內文加上這三行,告知PHP Apache跟mysql連線要資料時,是使用utf-8

mysql_query("SET CHARACTER_SET_CLIENT=utf8"); //第二行
mysql_query("SET CHARACTER_SET_RESULTS=utf8"); //第三行
?>

2008年7月29日 星期二

反駭客,學習追蹤IP來自那裡

你知道嗎?一般當駭客的,在入侵別人之前,要先知道對方的IP

在你深入了解IP是什麼時,而很多網站都告訴你

IP是一組沒有義意的一組數字,是在網路上的門牌,不需要特別去記他

不用像手機一樣,選一組好背的,因為已經交給DNS去處理了

你只要記得www.yahoo.com就好,不用去記209.131.36.158這一串數字

也許新手會好奇,為什麼我會知道www.yahoo.com就是209.131.36.158

這個我們可以使用ping的功能就可以得知

也許很多人都會使用ping,來測試網路通不通,但你知道基本的ping是帶有很多資訊的

我們來看看下面的圖
1.的地方是我所下的指令 ping www.yahoo.com
2.的是方是,ping的指令已經幫我去問DNS了,把www.yahoo.com的對應IP問回來,所以我知道IP

3.的地方,是PING這個指令,分別PING了4次遠端的IP,這4 次是有回應的,分別送出後回來的時間是711,750,982,970ms的時間,TTL是51(這個等等再說是什麼東西)
4.的地方是統計,分別是送4次測試封包,回來4個封包,錯誤0個0%錯誤率
5.的也是統計,使用最少的時間和最久的時間,還有平均使用時間

那個TTL,是由本機發出一個數字,跟隨在PING封包上的,以Wondows為例 當你ping時,會把封包的TTL設為128,當封包送到一台路由器,作轉送時,就會把TTL值減1 當TTL=0時,不管那一台機器都不會再幫這個封包轉送了,因為減到底於0,這已經不合乎成本了,轉太多次路徑 當你的封包送到對方的電腦上時,對方收到的PING封包的TTL顯示120,那就代表我的電腦和目標電腦中間有7~8台路由器在作封包的轉送

同樣的,對方也會回應,所以如果走同樣的路徑回應我的話,我收到的封包TTL也會是120 如果以上面為例,看到我的電腦到www.yahoo.com回來變成51,那是不是128-51=77台路由器呢 答案是錯誤的喔,因為不同的作業系統,預設隨ping封包回傳的TTL值是不同的
如果Windows系統,TTL就預設是128開始減
如果是Linux或Unix系統,TTL就是64開始減

所以看TTL的回應值在80~128之間,那大有可能是Windows的系統
如是小於64,那就有可能是Linux或Unix囉 所以這個TTL是一個很重要的資訊 有一些系統是不回應Ping的封包的,所以也就無法得知
也有一些管理員,會特別去修改這個TTL的預設值 (不要小於64都可以,因為以防止TTL=0時被)

so這些資訊看了之後,知道回報的資訊是很多了,我們再整理一下,就可以得到下面的資料
1.由網址知道ip
2.本機和目標主機之間的路由器數量
3.猜測對方的主機系統類型


練習:
你可以PING看看你的區域內的電腦,IP分享器,網路列表機等……看看 反應時間,作業系統

===============================================================
另一進階指令:
tracert
這一指令的內部也是使用ping的原理,使用TTL=0的特性,來給你整理資訊

他會show出你到目標主機之間,所經過的路由器,而且也試著反解成網址給你
而有一些星號的,代表那一台路由器不允許回應ping的封包,所以等到Time Out後,就會顯示*號,就再測下一個了

而反解的部份,如我的圖示2,你可以試著連線到http://www.tfn.net.tw,就知道你和目標主機之間,經過了那一些的電訊公司

除了這樣,你還可以根據下面網址的資料,得知全世界,那一個國家分配到那一段的IP
http://www.blackholes.us/zones/country/

當然了,說了那麼多,會問有沒有圖型介面的軟體,在WINDOWS下當然有啦
NeoTracePro

把以上兩個網路測試最常用的指令,變成圖型介面,易懂易看外,還可以標示出目標主機在地球上那一個位置(參考用,他也是用猜的~),包括中間經過的路由器,還有三種顯示方式,圖型、ICON和列表,會覺得自己是駭客一樣

這顯示方會像tracert的功能


這樣就可以學到,當防毒軟體告知你,有那一個ip攻擊你的時候,就可以查看看,對方是那個國家,那家電訊公司的啦

好工具就如同一把好菜刀,可以作出美味的食物,也可以拿來傷害人,只在於工具在使用者的心是怎麼樣的工具

2008年6月17日 星期二

VOIP SERVER 之 Asterisk



IP 電話已經不是新話題了,用戶端的電話每個人早應該都看過了

而現今IP Phone主要分兩大協定陣營,一個是H.323 和SIP兩大協定

還有文章作兩協定的比較

而今天我要談談伺服端的軟體Asterisk

這是一個免費,在LINUX下SIP協定的SERVER端

透過Asterisk可以架起IP Phone的伺服主機,使IP 電話可以登陸(registrar)

又因為找到免費的架設Asterisk的文件,而且是O'Reilly出的,份量很重的唷


下載:
http://downloads.oreilly.com/books/9780596510480.pdf

Google Analytics