第二章 系統分析
3.2 相關工具
3.2.1 Perl 介紹
Perl 是什麼東西呢? Practical Extraction Report Language 的縮寫,是 一種能掃視任意文字檔,並且能從中取出資訊製成報表的解譯語言
(Interpreter)。它的目的就是用來取代 UNIX 原有的 sed、awk 與
shellscript 的組合,用來匯集資訊、產生報表的一個工具語言(程式)。
Perl 的作者 Larry Wall,他設計 Perl 時的哲學是以實用為第一優先(所 謂的實用就是語言容易使用、有效率,而且完整),而不是設計一個看 起來很漂亮的語言(漂亮就是程式非常的小,語法幽雅,而且只由最 少的語法基本元素構成)。
一般而言,由 awk,sed,shell programming 寫的東西可以輕易用 Perl 來處理,而且速度更快。在 C program 中,特別是有關抽取文字檔 中資訊,加以轉化處理,用 Perl寫會更加方便,而且不用處處擔心 pointer 和 memory allocation 的問題。當然,Perl 執行時會有一道轉成內部表 示式的關係,真正 optimized 過的 C code 仍會比 Perl code 快。一般而 言,Perl code 會比 C code 短很多。
Perl 在 regular expression,list(array)和 associative array 有很方便 語法和不錯的執行效率。連 yacc(Berkeley yacc)也可有產生 Perlcode
選項,這對於 prototyping 十分方便。
正由於 Perl 的特性,容易處理字串參數的傳遞,自然成了某些特殊用 途的新寵,尤其是 CGI,彷彿 Perl 天生是為了 CGI 而設計的!事實上 CGI 本身定義是和使用的程式語言種類無關的,你可以用 C、Fortran、
甚至 Visual Basic、Delphi 來寫 CGI 程式。
那大家為什麼要採用 Perl 原因有三點:
1. Perl 有非常傑出文字處理能力,能輕易的產生 HTML 文件,尤其 它具有完整 Regular Expression 語法,使得在 C 語言看來必需要寫 一大串程式碼的功能,Perl 幾行就解決了。
2. Perl 是一種直譯式語言,因此可以避免在各種不同系統上,還需要 重新編譯的麻煩。
3. Perl 的檢查旗標(-T)可以保護你的 Web Server,避免被未經授權的 client 破壞。
由於 Perl 處理文字的能力很強,所以拿來處理 Flow 資訊的速度也是很 快,自然拿 Perl 來實作是最佳選擇。
3.2.2 Apache 介紹
Internet 最近幾年成為極熱門的話題之一,造成這股熱潮的主因便 是 World Wide Web(以下簡稱 WWW or Web)。世界各地的 Web Page
透過這種互動,整個 Internet 形成一個龐大的資料庫,我們可以在上面 找到各式各類我們想要的資訊。
那麼要如何建立一個網站呢?除了主機,作業系統與使用者所製作 的網頁外,我們還需要安裝一套能將網頁放到網路上讓其它人來存取 的軟體,也就是所謂的 Web Server。Web Server 比較有名的有免費的 Apache,Microsoft 的 Internet Information Server,Netscape 的 Enterprise Server 等等。由於我們使用的作業系統平台是 Linux,因此我們介紹的 是在 Unix 系統上最受歡迎的 Apache Web Server,Apache 也有 Windows 的版本。免費的 Apache Web server 具有比商業 Web server 不惶多讓的 功能與速度,同時安裝與設定也十分地容易,由於這些特性使得 Apache 成為佔有率最高的 Web Server 軟體。
3.2.3 PHP 介紹
在 1994 的時候,有一位 Rasmus Lerdorf 利用了 perl 寫了一個小程 式,想知道他放在網站上的簡歷有多少人來看過,於是他便將其包裝 成一個 Personal Home Page Tools 這就是 PHP 的前身囉。一開始的 PHP 當然不如現今的功能來的強大,只能算是一個語法解析的引擎,大概 只能用來處理一些小程式如計數器之類的。之後 Rasmus 先生又將 Personal Home Page Tools 結合了 FI(form interperter,表單直譯器)==>
的使用,到了 PHP3 的時代,PHP 已經有一個團隊來開發了它,並且 重新改寫了 PHP,替 PHP3 奠定了良好的基礎。到了 PHP4 結合了 zend,
與眾人的努力,PHP 的功能變的更強大,如今的 PHP 除了能應付網站 上的應用需求外,亦能開發視窗介面的 GUI 程式。最重要的是 PHP 是 免費的!!
PHP 是一種嵌入在 HTML 並由伺服器解釋的腳本語言。它可以用 於管理動態內容、支援資料庫,甚至構建整個電子商務站點。它支援 許多流行的資料庫,包括 MySQL、PostgreSQL、Oracle、Sybase、Informix 和 Microsoft SQL Server。
另外 PHP 也支援以下的東西 u 支援 HTTP Authentication u 支援 FastCGI
u 支援 Access Control u 支援 Access Logging u 支援 GD library
u 支援 File Upload (RFC 1867) u 支援 cookie
u 支援 Regular expression
3.2.3.1 PHP 與 GD 結合的安裝設定
本系統有使用到 GD Library,所以使用上最需要注意的就是在安裝 PHP 時要一並作設定,同時也需要安裝 linpng 及 zlib。設定方式如下:
3.2.4 MySQL 介紹
MySQL 是一個小巧靈瓏的資料庫伺服器軟體,對於小型(當然也 不一定很小)應用系統是非常理想的。除了支援標準的 ANSI SQL 語 句,它還支援多種平臺,而在 Unix 系統上該軟體支援多線程運行方式,
從而能獲得相當好的性能。
MySQL 的功能特點如下:
u 可以同時處理幾乎不限數量的用戶;
u 處理多達 50,000,000 以上的記錄;
u 命令執行速度快,也許是現今最快的;
u 簡單有效的用戶權限系統。
./configure --with-apxs2=apxs 之路徑 --with-mysql --with-gd --with-zlib-dir=zlib 路徑
3.2.5 PerlDBI DBD::mysql 介紹
3.2.5.1 DBI 介紹
DBI 的建構者及作者 Tim Bunce 說: "DBI 是給 Perl 語言用來連接資 料庫的程式設計介面(API)。DBI API 規格中定義了一系列函數、變數 以及用法,他們提供了一套連接資料庫的一致介面,不論實際上你所 要連接的資料庫是那一種。"
簡單的說,DBI 介面容許使用者透通地 (transparently) 連接多種類 形的資料庫。所以如果你連接到 Oracle、Informix、mSQL、Sybase 或 任何其它的資料庫,你都無須了解介面後運作的機制。因為 DBI 定義 的 API 在這些資料庫上都可以運作。
3.2.5.2 DBD-mysql 之安裝及使用
DBD-mysql-2.9003 這檔案可由
http://www.cpan.org/modules/by-module/DBD/ 這裡取得
解開檔案之後丟在任意暫存目錄下即可開始安裝,本系統採用手動安 裝,也就是重新從 source code Make 過。Make 所下之參數為
perl Makefile.PL --testdb=<db> --testuser=<user>
--testpassword=<password> --testhost=<hostname>
以下說明此 DBI 在程式碼裡的使用方式 宣告使用 DBI 及相關變數:
use DBI;
my $dsn = "DBI:mysql:dbname:localhost";
my $user = "dbuser";
my $password = "password";
my ($dbh, $rows);
與資料庫連線:
$dbh = DBI->connect($dsn, $user, $password);
對資料庫下指令:
$dbh->do("INSERT INTO… … … ") 與資料庫中斷連線:
$dbh->disconnect();
3.2.6 Flow-tools 介紹
本系統使用 Flow-tools 來接收 Router 所送出之 Flow 資訊,
Flow-tools 可以從
http://www.splintered.net/sw/flow-tools/取得,以下介
紹本系統所使用到的兩支程式。3.2.6.1 flow-capture
這支程式是用 daemon 的方式在系統裡常駐,在開機時執行,在 /etc/rc.d/rc.local 加入下面這段
程式本身有支援許多參數,以下解說本系統有使用到之參數 /usr/local/netlfow/bin 為 flow-capture 所在路徑
-n 為一天留存幾份,143 為每 10 分鐘產生一個檔案。
-V 使用的 NetFlow 版本例如 5 就是 Version 5
-z 壓縮率,一般來說使用 6 就差不多了,比率再高也不見得更有效率 -N 使用之檔名格式
-e 最多留存多少份資料 -w Flow 檔案儲存的地方
local ip/remote ip/port 本機(collector)的 IP,以及接收 Port 的設定
3.2.6.2 flow-print
本系統使用 flow-print 來印出流量資訊供分析程式擷取使用,日 後若是有未知異常行為需要判定也是需要由此方式印出原始資料來做 確認。以下為本系統所使用之指令
-f0 為印出簡單格式其中包含 source interface,source ip,destination interface,destination ip,protocol,source port,destination port,packets,
/usr/local/netflow/bin/flow-capture -n 143 -V 5 -z 6 -N 0 -e 600 -w /netflow reciver ip/0/9991 &
Flow-print –f0 < ft-v05.2004-05-04.190000+0800
ex:
Sif SrcIPaddress Dif DstIPaddress Pr SrcP DstP Pkts Octets 0009 10.30.143.6 0000 90.216.201.228 06 9ee 1bd 3 144 0009 172.17.57.66 0009 193.61.121.101 06 1318 6662 1 40
分析程式再依印出位元格式來擷取所要的資訊轉換成可計算的數值。
使用-f1 參數印出之結果為兩行格式,多了每筆 Flow 的起始時間 (StartTime)、終止時間(EndTime)、持續時間(Active)、每個 Packet 多少 Byte(B/Pk)、Type of Service(Ts)及 flags(fl)。
Sif SrcIPaddress DIf DstIPaddress Pr SrcP DstP Pkts Octets StartTime EndTime Active B/Pk Ts Fl 0009 10.30.143.6 0000 90.216.201.228 06 9ee 1bd 3 144 0506.09:16:38.678 0506.09:16:47.574 8.896 48 00 02
3.2.7 phPie() PHP script 介紹
PHP 要怎麼有效率的畫出大餅圖呢?這個 script 就是很好的方 式。只要將值與名稱傳送給這個 php script,這個 php script 就會幫 您畫出大餅圖,讓您可以輕鬆的達成目標。
使用方式為:
其產生出來的圖片為:
http://webpath/phPie.php?data[10.10.18.23]=72172&data[172.17.59.164]=7123 3&data[10.30.129.7]=54237&data[10.10.66.24]=54169
圖表 15 phPie 繪圖範例
3.2.8 CSS 介紹
CSS 是「Cascading Style Sheets」的縮寫,Cascading 是串接、連接 之意;Style 則是風格、款式之意;Sheets 則是一頁紙、表的意思。所 以呢,要以中文來解釋 CSS 的話呢,稱之為「串接樣式表」。簡單來說,
CSS 令我們的網頁更美麗。
使用 CSS 架構的網頁有個很大的特點,就是可以一次更改許多數 量的網頁配色而不用一個一個網頁去修改,對於網頁的整體性及日後 維護都相當的方便。也不用擔心修改中的網頁會有瀏覽上的問題。