張立新
摘 要:本文對基于包捕獲的網(wǎng)絡(luò)流量采集技術(shù)進(jìn)行了分析,著重給出了基于Snoop組件(包捕獲)的網(wǎng)絡(luò)流量采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。
關(guān)鍵詞:包捕獲;網(wǎng)絡(luò)流量采集;Snoop組件
1 基于包捕獲的數(shù)據(jù)采集方法
1.1 以太網(wǎng)數(shù)據(jù)傳輸原理
網(wǎng)絡(luò)適配器常用的兩種接收模式是普通模式和混雜模式。在普通模式下,網(wǎng)絡(luò)適配器只接收數(shù)據(jù)包中目的MAC地址為本機(jī)的數(shù)據(jù)包,而對于除了廣播和組播數(shù)據(jù)包以外的其它包一律丟棄。在混雜模式下,所有經(jīng)過檢測系統(tǒng)主機(jī)的數(shù)據(jù)包都會(huì)被接收。
為了能夠監(jiān)聽到該網(wǎng)絡(luò)中所有主機(jī)的數(shù)據(jù)包,可在交換機(jī)中設(shè)置監(jiān)控端口和受控端口(被監(jiān)聽端口),受控端口一般為核心交換機(jī)連接防火墻的電口或光口,監(jiān)控端口連接監(jiān)控計(jì)算機(jī)或抓包設(shè)備(其網(wǎng)絡(luò)適配器工作模式置于混雜模式),這樣就可以將受控端口的數(shù)據(jù)包復(fù)制到監(jiān)控端口,從而就可以捕獲或監(jiān)聽到通過核心交換機(jī)的各主機(jī)網(wǎng)絡(luò)數(shù)據(jù)包。其工作流程如圖1所示。
1.2 WinPcap簡介
本研究系統(tǒng)使用的Snoop數(shù)據(jù)包捕獲組件基于WinPcap數(shù)據(jù)包捕獲函數(shù)庫。WinPcap是Windows平臺下一個(gè)免費(fèi)、公共的網(wǎng)絡(luò)驅(qū)動(dòng)開發(fā)包,工作于數(shù)據(jù)鏈路層,用于對IP分組的捕獲,可為Win32應(yīng)用程序提供訪問網(wǎng)絡(luò)底層的能力。它基于UNIX的Libpcap和BPF模型開發(fā),包括內(nèi)核級的數(shù)據(jù)包過濾器NPF(Netgroup Packet Filter)、底層動(dòng)態(tài)鏈接庫(packet.dll)和高級系統(tǒng)無關(guān)性庫(wpcap.dll)。WinPcap可提供以下各項(xiàng)功能:捕獲原始數(shù)據(jù)包,包括各主機(jī)發(fā)送/接收的及相互之間交換的數(shù)據(jù)包;在網(wǎng)絡(luò)上發(fā)送原始的數(shù)據(jù)包;收集網(wǎng)絡(luò)通信過程中的統(tǒng)計(jì)信息。
2 Snoop組件介紹
2.1 Snoop組件工作原理
Snoop組件是用Delphi開發(fā)的捕獲數(shù)據(jù)包組件,其底層封裝了WinPcap,把對數(shù)據(jù)包的處理用函數(shù)封裝起來實(shí)現(xiàn),用戶編程時(shí)可專注于數(shù)據(jù)包分析,無需使用WinPcap提供的復(fù)雜操作對原始包進(jìn)行處理,只需用Snoop提供的函數(shù),即可將捕獲的數(shù)據(jù)包進(jìn)行分類處理。
2.2 Snoop組件相關(guān)函數(shù)
(1)snoopIsIP(EthernetHeader:PETHERNET_HDR;IPHeader:PPIP_HDR=nil):Boolean。此函數(shù)返回值為布爾型。它將以太數(shù)據(jù)包EthernetHeader從網(wǎng)卡接收進(jìn)來后,判斷其是否為IP數(shù)據(jù)包。如果是IP包,則返回true,并將IPHeader指向該IP包對應(yīng)的包頭,以便進(jìn)一步處理;否則返回false,IPHeader賦值為nil。其他的函數(shù),如snoopIsARP、snoopIsICMP、snoopIsTCP和snoopIsUDP等用法類似,分別判斷數(shù)據(jù)包是否為ARP包、ICMP包、TCP包和UDP包,在處理上也類似。
(2)snoopMac2Str函數(shù)用于將網(wǎng)卡的Mac地址轉(zhuǎn)換為字符串;snoopIP2Str函數(shù)將數(shù)字表示的IP地址轉(zhuǎn)換成字符串形式;snoopstr2Mac函數(shù)是snoopMac2Str的反函數(shù),snoopstr2IP函數(shù)是snoopIP2Str的反函數(shù),分別與其作相反的操作;snoopSendPacket函數(shù)可以向外發(fā)送數(shù)據(jù)包。
2.3 Snoop組件數(shù)據(jù)包過濾模塊設(shè)計(jì)
若捕獲所有數(shù)據(jù)包則數(shù)據(jù)量非常大,要求很強(qiáng)的處理能力和大量的儲(chǔ)存空間,而且有時(shí)我們也只捕獲感興趣的數(shù)據(jù)包。例如:對Web系統(tǒng)進(jìn)行監(jiān)控只需要端口號為80的TCP數(shù)據(jù)包,信息包過濾機(jī)制的引入來解決上述問題。
3 基于Snoop組件的流量采集系統(tǒng)設(shè)計(jì)
3.1 功能描述
流量采集模塊要抓取所有流經(jīng)核心交換機(jī)受控端口的Pcap文件格式的原始網(wǎng)絡(luò)數(shù)據(jù)包,為此要設(shè)置捕獲的初始化參數(shù),選擇捕獲來源,并進(jìn)入循環(huán)抓包過程。
3.2 網(wǎng)絡(luò)數(shù)據(jù)包格式
使用Snoop組件捕獲的網(wǎng)絡(luò)數(shù)據(jù)包格式實(shí)際上是Pcap文件格式,詳情分析如下,Pcap文件頭24B各字段說明。
(1)Magic:4B:0x1A 2B 3C 4D,用來標(biāo)示文件的開始;
(2)Major:2B,0x02 00,當(dāng)前文件主要的版本號;
(3)Minor:2B,0x04 00,當(dāng)前文件次要的版本號;
(4)ThisZone:4B,當(dāng)?shù)氐臉?biāo)準(zhǔn)時(shí)間,全零;
(5)SigFigs:4B,時(shí)間戳的精度,全零;
(6)SnapLen:4B,最大的存儲(chǔ)長度;
(7)LinkType:4B,鏈路類型,如1表示Ethernet,and Linux loopback devices(以太網(wǎng)類型,大多數(shù)的數(shù)據(jù)包為這種類型),更多詳細(xì)內(nèi)容因篇幅原因省略。
4 基于Snoop組件的流量采集模塊實(shí)現(xiàn)
由于Snoop組件基于WinPcap庫來實(shí)現(xiàn),故其捕獲流程與WinPcap相似。在進(jìn)行包捕獲前,需要將實(shí)施流量采集功能的計(jì)算機(jī)網(wǎng)卡設(shè)置成混雜模式,然后設(shè)置過濾條件、讀超時(shí)和捕獲的數(shù)據(jù)包長度,并選擇數(shù)據(jù)包捕獲來源,最常使用的是本機(jī)捕獲,最后選擇進(jìn)行捕獲的網(wǎng)卡并打開Snoop組件實(shí)現(xiàn)循環(huán)包捕獲。
所有初始化工作完成之后,要選擇捕獲數(shù)據(jù)的來源,可為文件捕獲、本機(jī)捕獲和遠(yuǎn)程捕獲。文件捕獲需要指定以前保存的Pcap數(shù)據(jù)包捕獲文件,然后系統(tǒng)可將該文件包含的數(shù)據(jù)包進(jìn)行協(xié)議解析后還原。用得較多的是本機(jī)捕獲,此時(shí)需要選擇要使用的網(wǎng)卡。AdapterIndex是網(wǎng)卡的序號,給它賦值是把Snoop控件與本機(jī)的某一網(wǎng)卡聯(lián)系起來,以確定接收從哪個(gè)網(wǎng)卡進(jìn)來的數(shù)據(jù)包。利用Open方法把該Snoop控件打開,使其開始工作,然后就可以在Snoop控件的OnCapture事件中編寫網(wǎng)絡(luò)數(shù)據(jù)包處理程序。為了確定它在工作,使用Active屬性判斷一下。遠(yuǎn)程捕獲和本機(jī)捕獲類似,但在捕獲之前需要設(shè)置遠(yuǎn)程捕獲計(jì)算機(jī)的IP、用戶名和密碼等登錄信息。在結(jié)束流量采集工作時(shí),把網(wǎng)卡設(shè)為正常模式,關(guān)閉Snoop控件。語句如下:SnoopSniff.Flags:=0;SnoopSniff.Close。
5 結(jié)束語
基于Snoop組件的流量采集系統(tǒng)可通過Snoop組件實(shí)時(shí)獲取流經(jīng)核心交換機(jī)受控端口的各主機(jī)網(wǎng)絡(luò)數(shù)據(jù)包,為后續(xù)網(wǎng)絡(luò)流量數(shù)據(jù)的統(tǒng)計(jì)與分析提供基礎(chǔ)數(shù)據(jù)來源。
參考文獻(xiàn)
[1] 孫欽東.網(wǎng)絡(luò)信息內(nèi)容審計(jì)[M].北京:電子工業(yè)出版社,2010:26-50.
[2] 譚獻(xiàn)海.網(wǎng)絡(luò)編程技術(shù)及應(yīng)用[M].北京:清華大學(xué)出版社,2006:183-204.
[3] 吳功宜,董大凡,王珺,等.計(jì)算機(jī)網(wǎng)絡(luò)高級軟件編程技術(shù)[M].北京:清華大學(xué)出版社,2008:406-407.
[4] 鄭成興.網(wǎng)絡(luò)入侵防范的理論與實(shí)踐[M].北京:機(jī)械工業(yè)出版社,2006:34-95.
[5] PCAP文件格式協(xié)議分析[J/OL].http://www.net527.cn/a/luyoujiaohuan/Ciscojishu/2010/0209/5527.html,2010-02-09.