胡先智 梁艷
摘 要:為了實時監(jiān)測網絡流量,本文實現了一個網絡數據流量圖形化分析系統。該系統采用數據庫存儲流量數據,用Visual C++.NET設計實現界面,利用winpcap軟件對網絡數據流量進行分析,能較好地滿足網絡數據流量實時監(jiān)測的需求。
關鍵詞:流量監(jiān)測;winpcap;網絡數據流量分析
1 引言
隨著互聯網絡的迅速發(fā)展,網絡數據流量特征的研究近年來引起了人們廣泛關注。網絡數據流量分析系統的定位重點在對網絡流量的流量、流向、協議的細節(jié)監(jiān)視和分析,網絡安全監(jiān)視。在容量規(guī)劃、入侵檢測和路由優(yōu)化時,網絡管理員需要知道網絡的數據流量情況和盡量多的測量信息。
2 關鍵技術
⑴數據流。數據流是指輸入數據a1,a2,..按順序到達。這些數據描述了一個信號A。A是一個一維函數A:[1...N]→R2。模型取決于ai如何描述A。本文把數據流技術和傳統的網絡管理技術相結合, 取得了較好的應用效果。
⑵流量監(jiān)測原理。網絡流量監(jiān)測有主動監(jiān)測和被動監(jiān)測兩種不同的實現方法。主動測量方法是向被測網絡中注入附加的“探測流量”并進行返回數據的采集來實現監(jiān)測的方法,該如果處理不當,也會給網絡增加額外的負荷,影響測量結果的客觀性,甚至使測量結果不準確,產生Heisenburg效應。而被動測量方法是在網絡的某點采集、記錄并且分析網絡的流量信息來實現測量的方法。被動測量可以完全消除附加的“探測流量”和Heisenbutg 效應,這是被動測量的優(yōu)點,但存在可能會涉及隱私和安全問題的不足。由于Internet上大多數數據傳輸是不加密的,鑒于被動監(jiān)測的優(yōu)點,本系統采用基于數據包捕獲的被動監(jiān)測技術。
⑶winpcap。在網絡管理與安全防護中,對網絡數據流量進行分析,是非常重要的一個任務,從防火墻到攻擊檢測系統,都會用到類似功能。開發(fā)此類軟件過程相當復雜。而winpcap (indows packet capture)是windows平臺下一個免費公共的網絡訪問系統。它提供了以下的各項功能:
1>捕獲原始數據報;2>按照自定義的規(guī)則將某些特殊的數據報過濾掉;3>在網絡上發(fā)送原始的數據報;4>收集網絡通信過程中的統計信息。
3 系統架構
無論是基于網絡安全,還是基于網絡計費系統的改進,網絡數據流量分析無疑是必要的,人們對網絡依賴很強。網絡數據流量系統的架構包括三層:數據層(瀏覽統計、數據庫管理)、訪問應用層、展現層(在線統計器、流量統計器、網絡速度監(jiān)視器)。
4 系統設計
⑴網絡監(jiān)視器。網絡監(jiān)視器是監(jiān)視網絡通信的,其主要工作有三項:winpcap捕捉包、包分析、記錄。
1)winpcap捕捉包。在網絡包捕獲系統的實現中,采用的是WINPCAP包捕獲應用系統框架。網絡監(jiān)聽模塊將網絡接口設置為混亂模式,將網絡上傳輸的數據包截取下來,供協議分析模塊使用。由于效率的需要,有時要根據設置過濾網絡上的一些數據包,如特定IP,特定MAC地址、特定協議的數據包等。網絡監(jiān)聽模塊的過濾功能的效率是該網絡監(jiān)聽的關鍵,因為對于網絡上的每一數據包都會使用該模塊過濾,判斷是否符合過濾條件。
為提高效率,數據包過濾應該在系統內核里來實現。獲得數據包之后,如果在捕獲過程結束后創(chuàng)建了兩個線程實現對捕獲數據的實時性處理。
2)包分析。包分析指將捕捉來的數據報進行分析。由于要進行流量統計需要很多必要的信息,作為統計依據,如IP地址、協議類型等。其中,數據長度可由函數調用返回的內容得到而且此時得到的是實際在網上的包長度。
3)記錄。通過包的分析后,將有用的信息記錄到文件中去。其中包括目的IP、源IP,數據長度、協議類型、以及為了統計方便需要的時間信息。
⑵流量統計器。流量統計器,是對流量監(jiān)視器的記錄結果進行統計,將網絡監(jiān)視器的記錄文件內容讀出,并根據網址分割標準及源和目的地分別統計出流向網外的國內和國外流量,并將結果按照日期分別存儲在數據中。
5 系統實現
⑴捕捉包的實現。包捕捉作為一個獨立的應用程序運行,它從網上截獲包,并以文件形式將有用信息記錄下來,為流量統計準備統計的原始依據。
⑵在線統計的實現。ping利用了原始套接口技術發(fā)送ICMP回射請求,并接收工CMP回射應答。Socket是CP/IP編程的底層API(網絡編程接口)。在實現ping后可以將其作為一個函數調用,就很容易實現在線統計。
⑶圖形界面的實現。采用Visual C++.NET實現流量圖形化界面,主要是使用GDI函數畫圖,首先要得到一個設備描述句柄或一個可用的CDC設備描述表對象,WIN32API提供了BeginPaint()和GetDC兩個函數,用于獲得指定窗口的設備描述句柄。MFC的窗口類CWnd類也提供了兩個當前窗口的CDC對象的函數BeginPin()和GETDC();也可以在窗口處理函數中直接用CDC的派生類,最終實現流量圖形化。
6 總結
為了能夠滿足網絡管理員對于網絡實時監(jiān)控的需求,本文建立一個實時的網絡流量分析工具,并且給出了一種基于數據包捕獲的被動監(jiān)測技術,為實時監(jiān)控網絡流量提供了一條新的思路。