◆魯曉帆 余運超 陳 灝
?
局域網(wǎng)網(wǎng)絡流量捕獲方法的分析與研究
◆魯曉帆 余運超 陳 灝
(吉林建筑大學城建學院 吉林 130114)
本文主要分析了局域網(wǎng)網(wǎng)絡流量捕獲的幾種方法,概述了WinPcap的組成結構及其相關重要函數(shù)的功能,介紹了局域網(wǎng)數(shù)據(jù)包捕獲原理,利用WinPcap技術捕獲數(shù)據(jù)包方法及實現(xiàn)步驟。
WinPcap;網(wǎng)絡流量捕獲;局域網(wǎng)
局域網(wǎng)是在20世紀70年代末發(fā)展起來的,在計算機網(wǎng)絡中占有非常重要的地位,局域網(wǎng)有著資源便于共享、系統(tǒng)擴展靈活、數(shù)據(jù)傳輸率高、較低的時延和較小的誤碼率等優(yōu)點,它被廣泛應用于公司、校園、及企事業(yè)單位等。隨著網(wǎng)絡技術的發(fā)展和計算機的普及應用,局域網(wǎng)是網(wǎng)絡中重要的組成部分,因此對局域網(wǎng)的優(yōu)化設計、性能優(yōu)化以及故障查找是亟待解決的問題。
然而,要解決這些問題,就要對局域網(wǎng)的網(wǎng)絡流量進行分析研究,根據(jù)流量的分布需要調(diào)整負載均衡,通過分析來控制流量,提高交換機的轉發(fā)速率,及時調(diào)整網(wǎng)絡的拓撲結構和網(wǎng)絡設備的選取等等。
本文主要研究局域網(wǎng)網(wǎng)絡流量捕獲的幾種方法,概述了WinPcap的組成結構、及其相關重要函數(shù)的功能,介紹了局域網(wǎng)數(shù)據(jù)包捕獲原理,利用WinPcap技術捕獲數(shù)據(jù)包方法及實現(xiàn)步驟。
網(wǎng)絡流量就是一段時間內(nèi)在網(wǎng)絡上進行傳輸?shù)臄?shù)據(jù)包的數(shù)量,網(wǎng)絡流量就是網(wǎng)絡業(yè)務的具體表現(xiàn)形式,通過網(wǎng)絡流量的相關指標可以準確反映出當前網(wǎng)絡性能狀況。因此,有效的網(wǎng)絡流量捕獲技術顯得尤為重要,通過對捕獲到的網(wǎng)絡流量信息進行詳細的分析,可以優(yōu)化網(wǎng)絡性能,并最大限度地提高網(wǎng)絡資源利用率。
網(wǎng)絡流量捕獲技術是網(wǎng)絡流量監(jiān)測的基礎,也是優(yōu)化網(wǎng)絡性能、提高網(wǎng)絡利用率的重要手段,并滲透到網(wǎng)絡安全的各個領域。因此,日益成為人們研究的熱門領域并取得一定的成果,目前現(xiàn)有的網(wǎng)絡流量捕獲方法主要有以下四種:
1.1 基于硬件嵌入的網(wǎng)絡流量捕獲方法
在硬件領域,將報文過濾技術加載到交換機或路由器上是實現(xiàn)對網(wǎng)絡流量捕獲的一種方法。專用硬件有著高效的處理速度等諸多優(yōu)點,但是初期研發(fā)成本較高,而且不易實現(xiàn)。使用這種方法進行網(wǎng)絡流量捕獲的同時還增加了額外的流量,加大了網(wǎng)絡負擔。并且無法統(tǒng)計整個局域網(wǎng)的網(wǎng)絡流量。
1.2 基于交換機鏡像端口的網(wǎng)絡流量捕獲方法
在交換環(huán)境下可以通過在根節(jié)點使用帶有鏡像功能的交換機來實現(xiàn)數(shù)據(jù)包捕獲功能,交換機進行數(shù)據(jù)包捕獲的基本原理是設置把所有數(shù)據(jù)報都轉發(fā)到某一指定端口上[1],在該端口上可以連接運行網(wǎng)絡流量監(jiān)測程序的主機。此種方法雖然能夠實現(xiàn)網(wǎng)絡流量的捕獲,但是同樣存在增加網(wǎng)絡負擔的缺點。捕獲到的流量并不是真實的情況,其中有正常的網(wǎng)絡流量外,還包括從其他交換機轉發(fā)到鏡像端口的那部分額外的網(wǎng)絡流量。
1.3 基于SNMP監(jiān)控的網(wǎng)絡流量捕獲方法
SNMP(Simple Network Management Protocol:簡單網(wǎng)絡管理協(xié)議)是一種基于TCP/IP參考模型的應用層互聯(lián)網(wǎng)網(wǎng)管協(xié)議。此協(xié)議能對互聯(lián)網(wǎng)中各種不同類型的設備進行監(jiān)控和管理,并且對網(wǎng)絡中存在的問題進行定位。還可以監(jiān)控局域網(wǎng)網(wǎng)絡流量,其主要優(yōu)勢在于:在獲取信息的方面,可以直接從網(wǎng)絡對象中獲得流量,SNMP主要基于輪詢的方式。其次,在傳送層支持方面,SNMP基于無連接的UDP。此外,基于SNMP的方案可以保證網(wǎng)絡流量測量系統(tǒng)的通用性和可重用性。管理人員可根據(jù)實際流量情況進行合理地設定采集時間間隔,定時捕獲相關信息。
1.4 基于WinPcap、Libpcap函數(shù)庫的網(wǎng)絡流量捕獲方法
Libpcap(Packet Capture Library)函數(shù)庫可以有效的捕獲到經(jīng)過指定網(wǎng)絡接口(只要經(jīng)過該接口,目標地址不一定為本機)的數(shù)據(jù)包。由Berkeley大學Lawrence Berkeley National Laboratory研究院的Van Jacobson,Craig Leres和Steven McCanne編寫,該函數(shù)庫支持Linux,Solaris和BSD系統(tǒng)平臺[2],是一種與系統(tǒng)無關、采用分組捕獲機制捕獲網(wǎng)絡數(shù)據(jù)包的數(shù)據(jù)包捕獲函數(shù)庫。使用Libpcap編寫的程序可自由地跨平臺使用。而WinPcap是Libpcap的Windows版本,集成于Windows95,98,ME,NT,2000和XP操作系統(tǒng)的設備驅動程序,可以從網(wǎng)卡捕獲原始數(shù)據(jù),同時能夠過濾、發(fā)送并且存儲數(shù)據(jù)包。是當前使用最廣泛的數(shù)據(jù)包捕獲工具之一。
Winpcap(windows packet capture)是由意大利人Fulvio Risso和Loris Degioanni提出并實現(xiàn)的[3]。它是一個Windows平臺下捕包和網(wǎng)絡分析的體系架構,WinPcap是一套免費的基于Windows的網(wǎng)絡接口API,WinPcap是集成于Windows操作系統(tǒng)的設備驅動程序,它可以從網(wǎng)卡捕獲或者發(fā)送底層原始數(shù)據(jù),同時能夠過濾并且存儲數(shù)據(jù)包。它工作于驅動(Driver)層,能以很高的效率進行底層網(wǎng)絡操作。WinPcap的體系結構如圖1所示,它包括三個部分[4]:
第一個模塊NPF(Netgroup Packet Filter)是一個虛擬設備驅動程序文件。它直接與網(wǎng)卡驅動程序進行交互,獲取在網(wǎng)絡上傳輸?shù)脑紨?shù)據(jù)包。
第二個模塊packet.dll為win32平臺提供了一個公共的接口。Pactet.dll可以執(zhí)行如獲取適配器名稱、動態(tài)驅動器加載以及獲得主機掩碼及以太網(wǎng)沖突次數(shù)等低級操作。不同版本的Windows系統(tǒng)都有自己的內(nèi)核模塊和用戶層模塊,Packet.dll可以解決這些不同。調(diào)用Packet.dll的程序可以運行在不同版本的Windows平臺上,而無需重新編譯。
第三個模塊Wpcap.dll提供了一組功能強大的函數(shù),利用這些函數(shù),可以不去關心適配器和操作系統(tǒng)的類型。Wpcap. dll含有諸如產(chǎn)生過濾器、定義用戶級緩沖以及包注入等高級功能。其中packet.dll直接映射了內(nèi)核的調(diào)用;Wpcap.dll提供了更加友好、更加強大的函數(shù)調(diào)用。
WinPcap的功能主要包括以下四個方面:
(1)捕獲網(wǎng)絡數(shù)據(jù)包。這是Winpcap函數(shù)庫的主要功能。它負責捕獲在網(wǎng)絡中傳輸?shù)乃袛?shù)據(jù)包,而不考慮數(shù)據(jù)包的源地址以及目的地址。
(2)過濾數(shù)據(jù)包。當捕獲到數(shù)據(jù)包后,Winpcap會在將數(shù)據(jù) 包發(fā)往應用程序之前,對數(shù)據(jù)包進行過濾。具體過濾原則是由用戶按照需要事先定義好的過濾規(guī)則進行數(shù)據(jù)包過濾的,不符合過濾規(guī)則的數(shù)據(jù)包將被過濾掉。
(3)發(fā)送原始數(shù)據(jù)包。將捕獲到的數(shù)據(jù)包發(fā)送給應用程序,以便應用程序進一步分析。
(4)收集網(wǎng)絡通信過程中的統(tǒng)計信息。

圖1 WinPcap的體系結構
以太網(wǎng)(Ethernet)具有共享介質(zhì)的特征,當網(wǎng)絡適配器設置為監(jiān)聽模式(混雜模式,Promiscuous)時,由于采用以太網(wǎng)廣播信道爭用的方式,使得監(jiān)聽系統(tǒng)與正常通信的網(wǎng)絡能夠并聯(lián)連接,并可以捕獲任何一個在同一沖突域上傳輸?shù)臄?shù)據(jù)包。IEEE802.3 標準的以太網(wǎng)采用的是持續(xù) CSMA 的方式,正是由于以太網(wǎng)采用這種廣播信道爭用的方式,使得各個站點可以獲得其他站點發(fā)送的數(shù)據(jù)。以太網(wǎng)是當今現(xiàn)有局域網(wǎng)采用的最通用的通信協(xié)議標準,局域網(wǎng)運用這一原理使信息捕獲系統(tǒng)能夠攔截的我們所要的信息,這是捕獲數(shù)據(jù)包的物理基礎[5]。
使用WinPcap函數(shù)庫進行數(shù)據(jù)包捕獲的相關函數(shù)及流程如下:
(1)首先,獲得網(wǎng)絡接口設備列表并打開指定端口。函數(shù)pcap_findalldevs_ex(),該函數(shù)用來獲取當前網(wǎng)絡列表的信息,并將獲得列表的詳細信息都保存一個鏈表中,該鏈表的每一個節(jié)點都是采取pcap_if結構的,并且網(wǎng)卡信息的詳細信息就保存在每個節(jié)點中。
(2)其次,設置過濾規(guī)則。用戶可以根據(jù)需要設置相應的過濾規(guī)則,實現(xiàn)過濾規(guī)則的設置關鍵是通過對pcap_compile(pcap_t*p,char *str,struct bpf_program *fp,int optimize,bpf_u_int32 netmask)和pcap_setfilter(pcap_t *p,struct bpf_program *fp)兩個函數(shù)進行正確的配置。
(3)再次,捕獲并解析網(wǎng)絡數(shù)據(jù)包。WinPcap為了滿足不同的需求情況提供了幾種捕獲數(shù)據(jù)包的函數(shù)以適應各種需要,用戶可以根據(jù)自身的情況選擇合適的函數(shù)。pcap_loop(pcap_t *p,pcap_handler callback,int cnt,u_char *user)循環(huán)捕獲網(wǎng)絡數(shù)據(jù)包。
(4)最后,關閉WinPcap相關聯(lián)的文件并釋放相關資源:pcap_close()。
通過對局域網(wǎng)網(wǎng)絡流量捕獲方法的比較與分析,介紹4種網(wǎng)絡流量捕獲方法,展示了WinPcap 內(nèi)部結構及實現(xiàn)原理等知識,說明了WinPcap的主要函數(shù)及數(shù)據(jù)包捕獲流程,為下一步對數(shù)據(jù)包進行捕獲和協(xié)議分析打下理論基礎,具有一定的理論研究意義和實際應用價值。同時可以根據(jù)功能需求以此研究開發(fā)獨立的網(wǎng)絡協(xié)議分析系統(tǒng),進行局域網(wǎng)網(wǎng)絡流量的分析及性能優(yōu)化。
[1]王月輝.基于WinPcap的網(wǎng)絡數(shù)據(jù)捕獲和分析系統(tǒng)的研究與實現(xiàn)[D].沈陽:沈陽工業(yè)大學,2007.
[2]劉格非,裴昌幸,朱暢華,權東曉.基于Linux的以太網(wǎng)數(shù)據(jù)包捕獲方法[J].現(xiàn)代電子技術,2006.
[3]Loris Degioanni. Development of an architecture for packet capture and network traffic analysis[M].http:// netgroup-serv.polito.it,2000.
[4]The Winpcap Team. The Winpap manual and tutorial for Winpcap 4.0 [EB/OL]. Http://www.Winpcap.org /docs/docs_ 40/html/main.html,2006.
[5]徐美華,王振旗,韓秀娟.利用ARP欺騙實現(xiàn)網(wǎng)絡捕包[J].網(wǎng)絡安全技術與應用,2005.
吉林省大學生創(chuàng)新創(chuàng)業(yè)訓練計劃項目(2016263363)。