吳彥倫
【摘要】在網(wǎng)絡(luò)數(shù)據(jù)包分析中,基于Winpcap的抓包技術(shù)的應(yīng)用最為廣泛。Winpcap提供了一套公共的網(wǎng)絡(luò)訪問系統(tǒng),可適用于32/64位的操作平臺上解析網(wǎng)絡(luò)封包。Web數(shù)據(jù)包是網(wǎng)絡(luò)數(shù)據(jù)包的一個重要組成部分,大量的數(shù)據(jù)來源于Web用戶的業(yè)務(wù)請求。本課題基于Winpcap開發(fā)了一套基于windows操作系統(tǒng)的數(shù)據(jù)包捕獲和分析系統(tǒng)。系統(tǒng)在VS2010 環(huán)境下借助WinPcap提供的各個接口函數(shù)對網(wǎng)卡進行編程進而對網(wǎng)絡(luò)IP數(shù)據(jù)包進行捕獲,并通過數(shù)據(jù)包解析,提取出用戶行為并統(tǒng)計。
【關(guān)鍵詞】winpcap;數(shù)據(jù);捕獲;解析;用戶行為
一、前言
網(wǎng)絡(luò)技術(shù)的飛速發(fā)展產(chǎn)生了大量的網(wǎng)絡(luò)業(yè)務(wù)。持續(xù)增加的網(wǎng)絡(luò)業(yè)務(wù)和網(wǎng)絡(luò)用戶產(chǎn)生了大量的網(wǎng)絡(luò)流量,對網(wǎng)絡(luò)數(shù)據(jù)的分析越來越迫切。Winpcap是針對Win32平臺上的抓包和網(wǎng)絡(luò)分析的一個架構(gòu)。它包括一個核心態(tài)的包過濾器,一個底層的動態(tài)鏈接庫(packet.dll)和一個高層的不依賴于系統(tǒng)的庫(wpcap.dll)。第一個模塊是Netgroup Packet Filter,NPF,它是一個虛擬設(shè)備驅(qū)動程序文件。它的功能是過濾數(shù)據(jù)包,并把這些數(shù)據(jù)包原封不動地傳給用戶態(tài)模塊。第二個模塊packet.dll,它為win32平臺提供了一個公共的接口。調(diào)用Packet.dll的程序可以運行在不同版本的Windows平臺上,而無需重新編譯。 第三個模塊 Winpcap.dll,它是不依賴于操作系統(tǒng)的。它提供了更加高層、抽象的函數(shù)。
網(wǎng)絡(luò)數(shù)據(jù)包過濾器是Winpcap的核心部分,它是Winpcap完成困難工作的組件。它處理網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包,并且為用戶級提供捕獲、發(fā)送和分析的性能。通過Winpcap捕包技術(shù)有效的捕獲網(wǎng)絡(luò)數(shù)據(jù)包,通過網(wǎng)絡(luò)協(xié)議對原始數(shù)據(jù)包進行逐層解析,保留IP數(shù)據(jù)包,抽取出Web業(yè)務(wù)請求,完成對用戶業(yè)務(wù)的統(tǒng)計。
二、Winpcap捕獲原始網(wǎng)絡(luò)數(shù)據(jù)包
以太網(wǎng)網(wǎng)絡(luò)是一種總線型網(wǎng)絡(luò),采用廣播信道的爭用方式,當將網(wǎng)卡設(shè)備的接入模式設(shè)置為混雜模式時,系統(tǒng)便可以與正常的通信網(wǎng)絡(luò)并聯(lián)連接,捕獲處于同一沖突域上傳輸?shù)娜我鈹?shù)據(jù)包。在混雜模式下,網(wǎng)卡將接受同一網(wǎng)絡(luò)內(nèi)所有主機所發(fā)送的數(shù)據(jù)包,這樣就可以到達對所有數(shù)據(jù)包進行捕獲的目的。
系統(tǒng)采用網(wǎng)絡(luò)數(shù)據(jù)包過濾器(NPF)來處理網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包。NPF提供一個數(shù)據(jù)包過濾器,用戶通過自定義過濾器結(jié)合wpcap.dll過濾捕獲的網(wǎng)絡(luò)數(shù)據(jù)包,并將過濾后的數(shù)據(jù)包拷貝給監(jiān)聽程序。同時,NPF還提供一個循環(huán)緩沖區(qū),用來保存數(shù)據(jù)包以避免數(shù)據(jù)丟失。此外,緩沖區(qū)以隊列插入的方式來保存數(shù)據(jù)包,提高數(shù)據(jù)的存儲效率,并以組的方式將數(shù)據(jù)包從NPF緩沖區(qū)拷貝給用戶應(yīng)用程序。
通過Winpcap捕獲原始網(wǎng)絡(luò)數(shù)據(jù)包,存儲到鏡像中,為后面數(shù)據(jù)分析存儲數(shù)據(jù)基礎(chǔ)。原始網(wǎng)絡(luò)數(shù)據(jù)包遵循以太網(wǎng)幀結(jié)構(gòu)。
三、原始網(wǎng)絡(luò)數(shù)據(jù)報解析
Winpcap捕獲的原始網(wǎng)絡(luò)數(shù)據(jù)報,其頭部也就是以太網(wǎng)數(shù)據(jù)包頭部包含了該數(shù)據(jù)包傳遞的MAC信息和數(shù)據(jù)包信息:目的MAC地址、源MAC地址、數(shù)據(jù)包長度等字段信息。在數(shù)據(jù)鏈路層對數(shù)據(jù)包進行關(guān)鍵字段信息的分析。分析原始數(shù)據(jù)包包頭(14字節(jié)),分析出該數(shù)據(jù)包傳遞的MAC地址和協(xié)議類型。如圖1所示。提取Type字段信息為0x0800的數(shù)據(jù)包,即IP數(shù)據(jù)包。
在網(wǎng)絡(luò)層去掉原始數(shù)據(jù)包包頭,得到IP數(shù)據(jù)包。并對IP數(shù)據(jù)包進行解析。根據(jù)IP數(shù)據(jù)包協(xié)議,在IP數(shù)據(jù)包頭部(20字節(jié))進行相關(guān)字段的解析,提取出該數(shù)據(jù)包傳輸?shù)脑碔P地址和目的IP地址。最后根據(jù)IP數(shù)據(jù)包包頭的“協(xié)議代碼”字段隔離出TCP數(shù)據(jù)包。
圖1 IP數(shù)據(jù)包解析信息
根據(jù)IP協(xié)議對數(shù)據(jù)包包頭解析,能準確分離出該數(shù)據(jù)包在網(wǎng)絡(luò)層傳輸?shù)姆?wù)器IP地址(180.97.33.67)和客戶端IP地址(192.168.0.2)。并通過“Protocol”字段獲取數(shù)據(jù)包在傳輸層采用的傳輸協(xié)議類型。最后提取出“Protocol”字段值為“6”,也就是采用TCP傳輸協(xié)議的數(shù)據(jù)包。
在傳輸層去掉IP數(shù)據(jù)包頭部,得到TCP數(shù)據(jù)包。并對其進行數(shù)據(jù)包解析。根據(jù)TCP協(xié)議,對TCP數(shù)據(jù)包相關(guān)字段進行解析,如圖2所示。提取出該TCP數(shù)據(jù)包傳輸?shù)脑炊丝谔?,目的端口號,?yīng)用層網(wǎng)絡(luò)協(xié)議和數(shù)據(jù)長度。根據(jù)對TCP數(shù)據(jù)包重要字段的提取,可以分離出該數(shù)據(jù)包攜帶的數(shù)據(jù)部分。根據(jù)目的端口號和源端口號判斷該數(shù)據(jù)包的應(yīng)用層協(xié)議,保留端口號為“80”的數(shù)據(jù)包。端口號為“80”表明該數(shù)據(jù)包在應(yīng)用層采用的是http協(xié)議。
圖2 TCP數(shù)據(jù)包包頭信息
從圖2可以看出,該TCP數(shù)據(jù)包傳輸?shù)脑炊丝谔枮?2516,目的端口號為80,表明該數(shù)據(jù)報應(yīng)用層采用的是http協(xié)議,并可以通過“TCP seqment data”字段得知該數(shù)據(jù)包攜帶的數(shù)據(jù)部分長度為808 bytes。
四、Web業(yè)務(wù)抽取
網(wǎng)絡(luò)用戶在通過瀏覽器訪問網(wǎng)頁時產(chǎn)生了大量的Web業(yè)務(wù)。這些通過瀏覽器產(chǎn)生的Web業(yè)務(wù)所帶來的網(wǎng)絡(luò)數(shù)據(jù)包都是屬于http協(xié)議的。通過上述方法,使用基于Winpcap的網(wǎng)絡(luò)捕包系統(tǒng)捕獲基于http協(xié)議的數(shù)據(jù)包,并進行詳細解析。
在Http協(xié)議中,Client/Server之間的會話總是有客戶端通過建立連接和發(fā)送HTTP請求包開始的。HTTP請求包(這里指GET請求包)由三部分組成:方法-URI-協(xié)議/版本;請求頭;請求正文信息。
在這些Web業(yè)務(wù)數(shù)據(jù)中,網(wǎng)絡(luò)用戶在向服務(wù)器發(fā)送連接請求后,進行三次握手,成功之后,用戶正式向服務(wù)器端發(fā)送數(shù)據(jù)請求數(shù)據(jù)包。用戶在請求Web業(yè)務(wù)時,發(fā)送的是“GET”請求包。則只需要在眾多http協(xié)議數(shù)據(jù)包中提取出包含Get請求的數(shù)據(jù)包便可以實現(xiàn)Web用戶行為的統(tǒng)計。如圖3所示為,用戶訪問“www.baidu.com”時,發(fā)送的某一個Get請求包的一部分。
從圖3可以看出該用戶在請求Web業(yè)務(wù)時,從“GET”項看出,請求的內(nèi)容是:“/img/baidu_sylogo1.gif”,從“HOST”項和“Referer”項可以看出該訪問的服務(wù)器域名是:“www.baidu.com”。至此,提取出了網(wǎng)絡(luò)用戶此次Web請求的業(yè)務(wù)內(nèi)容。
通過對Web業(yè)務(wù)訪問的所有GET請求包進行數(shù)據(jù)包分類,關(guān)鍵字段的解析和提取。根據(jù)不同的業(yè)務(wù)請求“host”和域名地址“referer”訪問以及業(yè)務(wù)請求內(nèi)容“uri”,對其進行有效的分類。
五、結(jié)論
通過基于Winpcap技術(shù)的網(wǎng)絡(luò)捕包系統(tǒng),抓取網(wǎng)卡設(shè)備處的所有IP數(shù)據(jù)包,并通過IP協(xié)議,TCP協(xié)議和HTTP協(xié)議對原始數(shù)據(jù)包進行逐層解析,提取出每一個用戶的GET請求數(shù)據(jù)包,并解析出該請求包訪問的業(yè)務(wù)和服務(wù)器域名地址,實現(xiàn)對局域網(wǎng)用戶所有Web業(yè)務(wù)的統(tǒng)計和分析。
如圖4所示,展示了系統(tǒng)對該本機網(wǎng)卡設(shè)備的長時間捕包,并分析提取出的所有Web請求的業(yè)務(wù)的統(tǒng)計和分析。通過mysql數(shù)據(jù)庫存儲每一個GET請求包的重要字段信息,最終通過mysql數(shù)據(jù)包操作,實現(xiàn)對所有數(shù)據(jù)包的分類。
如圖4所示,統(tǒng)計了每一個GET請求包的四元向量<源IP,目的IP,源端口,目的端口>的重要傳輸信息;“ur”字段信息標注了該請求的業(yè)務(wù)內(nèi)容;“host”和“referer”表明了該業(yè)務(wù)請求的內(nèi)容的來源。
通過該方法將所有Web業(yè)務(wù)進行詳細的分類和歸納,為網(wǎng)絡(luò)大數(shù)據(jù)的分析提供基礎(chǔ)。
參考文獻
[1]陳淼,譚順華.基于數(shù)據(jù)包的三層挖掘技術(shù)分析研究.DOI:
10.3969/J.issn.1001.
[2]賈明正.基于Winpcap的網(wǎng)絡(luò)流量統(tǒng)計與檢測.1007-3973(2012)003-075-02.
[3]王偉,王韜.基于Winpcap的數(shù)據(jù)包捕獲及應(yīng)用.1000-7024(2008)07-1649-03.