余翀翀
(華僑大學網(wǎng)絡(luò)與教育技術(shù)中心 福建 廈門 361021)
目前,業(yè)界相關(guān)的研究基本都是通過對數(shù)據(jù)流量進行分析,找出可以真實反映網(wǎng)絡(luò)的數(shù)學模型,例如自相似模型,但仍然不能全面客觀地反映網(wǎng)絡(luò)的真實狀態(tài)。事實上,要達到對網(wǎng)絡(luò)性能的有效監(jiān)測,獲得真實的流量數(shù)據(jù),并對這些數(shù)據(jù)進行詳細的定性定量分析,才是真正有效的方法。流量測量還可以實現(xiàn)監(jiān)測擁塞鏈路,拒絕服務(wù)攻擊,滿足服務(wù)等級的QoS策略等功能。因此,研究并實現(xiàn)相應(yīng)的監(jiān)控系統(tǒng)是至關(guān)緊要的。
網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)對網(wǎng)絡(luò)內(nèi)到達本地服務(wù)器的所有數(shù)據(jù)包進行分析,掌握當前網(wǎng)絡(luò)總流量,同時可以根據(jù)不同的需要對特定端口或特定外部地址進行監(jiān)視,防止非法入侵,以保障本地網(wǎng)絡(luò)系統(tǒng)的安全和穩(wěn)定。[1]網(wǎng)絡(luò)監(jiān)控能使系統(tǒng)及時地發(fā)現(xiàn)網(wǎng)絡(luò)流量異常的現(xiàn)象,使服務(wù)器在發(fā)現(xiàn)非法入侵后能立即做出反應(yīng),來保護自己的服務(wù)器不被破壞,以求獲得安全性的同時,提高網(wǎng)絡(luò)性能。
(1)捕獲原始數(shù)據(jù)包,包括在共享網(wǎng)絡(luò)上各主機的交換數(shù)據(jù)包;
(2)在數(shù)據(jù)包發(fā)往應(yīng)用程序之前,過濾掉某些特殊的數(shù)據(jù)包;
(3)發(fā)送原始的數(shù)據(jù)包;
(4)收集網(wǎng)絡(luò)通信過程中的統(tǒng)計信息。
Winpcap用于windows系統(tǒng)下的直接的網(wǎng)絡(luò)編程。大多數(shù)網(wǎng)絡(luò)應(yīng)用程序訪問網(wǎng)絡(luò)是通過廣泛使用的套接字。這種方法很容易實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)傳輸,因為操作系統(tǒng)負責底層的細節(jié)(比如協(xié)議棧,數(shù)據(jù)流組裝等)以及提供了類似于文件讀寫的函數(shù)接口。Winpcap的主要功能在于獨立于主機協(xié)議 (如TCP-IP)而發(fā)送和接收原始數(shù)據(jù)報。Winpcap的組成主要由三個模塊組成。第一個模塊NPF(Netgroup Packet Filter),是一個虛擬設(shè)備驅(qū)動程序。它的功能是過濾數(shù)據(jù)包,并把這些數(shù)據(jù)包原封不動地傳給用戶態(tài)模塊,這個過程中包括了一些操作系統(tǒng)特有的代碼。第二個模塊packet.dll為win32平臺提供了一個公共的接口。不同版本的Windows系統(tǒng)都有自己的內(nèi)核模塊和用戶層模塊。Packet.dll用于解決這些不同。調(diào)用Packet.dll的程序可以運行在不同版本的Windows平臺上,而無需重新編譯。第三個模塊Wpcap.dll是不依賴于操作系統(tǒng)的。它提供了更加高層、抽象的函數(shù)。packet.dll直接映射了內(nèi)核的調(diào)用。Wpcap.dll提供了更加友好、功能更加強大的函數(shù)調(diào)用[2]。
根據(jù)流量分析系統(tǒng)的開發(fā)目的及設(shè)計目標,將系統(tǒng)定位于一個包含數(shù)據(jù)包捕獲分析和數(shù)據(jù)存儲、實時監(jiān)控、數(shù)據(jù)查詢與報警三個模塊。
其中,捕獲分析模塊是系統(tǒng)的后臺運行程序,通過使用Winpcap協(xié)議,對通過所監(jiān)聽的網(wǎng)絡(luò)適配器的所有數(shù)據(jù)包進行捕獲。這一部分主要采用C語言來編寫,屬于一些底層的操作,并且沒有對所捕獲的數(shù)據(jù)進行顯示,而是通過前臺用戶界面調(diào)用數(shù)據(jù)庫數(shù)據(jù)實現(xiàn)數(shù)據(jù)的實時監(jiān)控功能。數(shù)據(jù)存儲是基于前一個捕獲分析模塊所捕獲并且分析過的數(shù)據(jù)包,對得到分析結(jié)果的數(shù)據(jù)包進行分類統(tǒng)計(基于不同網(wǎng)絡(luò)協(xié)議或者不同網(wǎng)絡(luò)服務(wù)),并把統(tǒng)計的結(jié)果存入到MySQL數(shù)據(jù)庫中,以供前臺顯示程序調(diào)用[3]。該模塊主要的任務(wù)就是MySQL數(shù)據(jù)庫中建立好用于存儲捕獲分析模塊分析所得的結(jié)果的數(shù)據(jù)庫及指定的表格,建立好Visual C++對MySQL數(shù)據(jù)庫的連接,最后就是將所得的結(jié)果存入指定的數(shù)據(jù)庫中。
實時監(jiān)控模塊主要分數(shù)字監(jiān)控和圖形監(jiān)控兩個部分。其中數(shù)字監(jiān)控主要通過連接數(shù)據(jù)庫,每秒刷新一次數(shù)據(jù)庫數(shù)據(jù)然后將查詢所得的數(shù)據(jù)分類在前臺顯示實現(xiàn)實時監(jiān)控,而圖形監(jiān)控是采用柱狀圖的形式顯示用戶計算機當前的輸出流量、輸入流量、總流量,也是每秒刷新一次數(shù)據(jù)。
數(shù)據(jù)查詢與報警模塊主要實現(xiàn)對后臺捕獲程序捕獲的所有歷史數(shù)據(jù)包進行分類查詢,并且通過報警設(shè)置子模塊對滿足設(shè)置的數(shù)據(jù)進行篩選查詢,如果發(fā)現(xiàn)數(shù)據(jù)異常,將提供報警功能 (如提示用戶可能遭受UDP、ICMP等洪水攻擊)以便用戶采取相應(yīng)的措施。
投影2:設(shè)直線ax-y+3=0與圓(x-1)2+(y-2)2=4相交于A、B兩點,若弦AB的長為則a=________.
流量分析系統(tǒng)中數(shù)據(jù)包的捕獲主要是通過調(diào)用Winpcap協(xié)議來捕獲數(shù)據(jù)包的。Winpacp作為一個網(wǎng)絡(luò)底層的驅(qū)動,提供了許多的API供開發(fā)人員調(diào)用,這些API提供了許多不同的功能,通過這些API可以實現(xiàn)諸多的功能,包括從簡單的基本功能(如獲取網(wǎng)卡的列表,數(shù)據(jù)包的捕獲等)到統(tǒng)計和收集網(wǎng)絡(luò)流量等高級功能[3]。
捕獲數(shù)據(jù)包的具體具體實現(xiàn)如下:
(1)獲得網(wǎng)絡(luò)接口列表
通常,一個基于WinPcap的應(yīng)用程序所要做的第一件事,就是獲得適合的網(wǎng)絡(luò)接口的列表.Libpcap中的pcap_findalldevs()函數(shù)就是用來獲得適合的網(wǎng)絡(luò)接口的列表的,返回一個pcap_if結(jié)構(gòu)的列表。
(2)打開捕捉設(shè)備
使用函數(shù)pcap_open_live()來打開一個捕捉設(shè)備函數(shù)原型,在本系統(tǒng)中將此參數(shù)設(shè)置為1000,即系統(tǒng)捕獲數(shù)據(jù)包進行分析統(tǒng)計的時間間隔是1秒。流量監(jiān)控系統(tǒng)監(jiān)控所得的結(jié)果都是每秒鐘通過的數(shù)據(jù)包的流量。
(3)設(shè)置過濾器
過濾數(shù)據(jù)的函數(shù)是pcap_compile()和pcap_setfilter()來實現(xiàn)的pcap_compile()和pcap_setfilter()是用來編輯過濾器和設(shè)置過濾器的pcap_compile()來編譯一個過濾設(shè)備,它通過一個高層的boolean型變量和字串產(chǎn)生一系列的能夠被底層驅(qū)動所解釋的二進制編碼。boolean表示語法能夠在這個文件的過濾表示語法中找到。pcap_setfilter()用來聯(lián)系一個在內(nèi)核驅(qū)動上過濾的過濾器,這時所有網(wǎng)絡(luò)數(shù)據(jù)包都將流經(jīng)過濾器,并拷貝到應(yīng)用程序中。
(4)捕捉數(shù)據(jù)包
pcap_dispatch()或者pcap_loop()函數(shù)都可以用來捕捉數(shù)據(jù)包。這兩個函數(shù)非常相似,pcap_dispatch()將會在超時后直接返回,而pcap_loop()則一定要等到一定數(shù)量的數(shù)據(jù)包被處理了以后才會返回,也可以用pcap_next_ex()來代替pcap_loop()來捕獲數(shù)據(jù)包。
(5)保存捕獲的數(shù)據(jù)包
WINPCAP為我們提供了很多API來將流經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)包保存到一個堆文件并讀取堆的內(nèi)容。系統(tǒng)中采用pcap_live_dump將數(shù)據(jù)寫到文件。pcap_live_dump有三個參數(shù):一個文件名,和一個該文件允許的最大長度還有一個參數(shù)是該文件所允許的最大包的數(shù)量。對這些參數(shù)來說0意味著沒有最大限制。
這里,我們可以在調(diào)用pcap_live_dump()前設(shè)置一個過濾器來定義哪些數(shù)據(jù)報需要存儲,并且可以用pcap_live_dump_ended()來等檢查是否數(shù)據(jù)存儲完畢。
(6)收集網(wǎng)絡(luò)流量的統(tǒng)計信息
WinPcap的另一高級功能:收集網(wǎng)絡(luò)流量的統(tǒng)計信息。程序必須打開一個網(wǎng)卡并用pcap_setmode()將其設(shè)置為統(tǒng)計模式。在統(tǒng)計模式下編寫一個程序來監(jiān)視TCP流量只是幾行代碼的事情在設(shè)置為統(tǒng)計模式前可以設(shè)置一個過濾器來指定要捕獲的協(xié)議包。
流量分析系統(tǒng)已經(jīng)基本上達到預(yù)期的要求,能夠在個人系統(tǒng)中測試使用,可以正常地監(jiān)視網(wǎng)絡(luò)的流量狀況,對通過網(wǎng)絡(luò)適配器的數(shù)據(jù)包進行捕獲、分析、統(tǒng)計、顯示、保存結(jié)果、數(shù)據(jù)查詢。由于時間和技術(shù)上的原因還存在著一些沒有解決好的問題。例如,實時監(jiān)控中的圖形監(jiān)控,沒有將各種協(xié)議包分開監(jiān)控而是對用戶計算機的所有輸出、輸入、總流量進行監(jiān)控,比較籠統(tǒng)沒有達到預(yù)期效果,需要在今后系統(tǒng)的完善中加以解決。
[1]鄭成興.網(wǎng)絡(luò)流量預(yù)測方法和實際預(yù)測分析[D].北京:北京第二外國語學院教育技術(shù)中心,2006.
[2]翁劍鋒.網(wǎng)絡(luò)綜合監(jiān)控技術(shù)[D].上海:復(fù)旦光華,2006.
[3]黃慶炬,梅清.基于IP的網(wǎng)絡(luò)監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)[D].湖北:湖北工業(yè)大學計算機學院,2006.