計(jì)算機(jī)專業(yè)畢業(yè)論文基于winpcap數(shù)據(jù)抓取系統(tǒng)_第1頁(yè)
計(jì)算機(jī)專業(yè)畢業(yè)論文基于winpcap數(shù)據(jù)抓取系統(tǒng)_第2頁(yè)
計(jì)算機(jī)專業(yè)畢業(yè)論文基于winpcap數(shù)據(jù)抓取系統(tǒng)_第3頁(yè)
計(jì)算機(jī)專業(yè)畢業(yè)論文基于winpcap數(shù)據(jù)抓取系統(tǒng)_第4頁(yè)
計(jì)算機(jī)專業(yè)畢業(yè)論文基于winpcap數(shù)據(jù)抓取系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、本科畢業(yè)論文 基于 winpcap 數(shù)據(jù)抓取系統(tǒng) 學(xué) 院: 計(jì)算機(jī)與信息工程學(xué)院 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 號(hào): 071015559 姓 名: 劉博 指導(dǎo)教師: 白云莉 職 稱: 副教授 論文提交日期:二 一一一一年六月 摘 要 winpcap 是 win32 平臺(tái)下用于原始數(shù)據(jù)包捕獲,向網(wǎng)絡(luò)發(fā)送數(shù)據(jù)報(bào)文,搜集網(wǎng) 絡(luò)通信過(guò)程中統(tǒng)計(jì)信息的重要工具。著名的網(wǎng)絡(luò)封包分析軟件 wireshark(前身是 ethereal)就是依靠 winpcap 提供的接口實(shí)現(xiàn)的數(shù)據(jù)包捕獲。本文簡(jiǎn)要介紹了 winpcap 的歷史和 winpcap 的體系結(jié)構(gòu)及內(nèi)部結(jié)構(gòu),然后討論了 winpcap 對(duì)網(wǎng)絡(luò) 數(shù)據(jù)包

2、過(guò)濾的機(jī)制及特性。 通過(guò) vc+6.0 中 mfc 編程實(shí)現(xiàn)通過(guò)一個(gè)完整界面來(lái)控制調(diào)用 winpcap 中的函數(shù) 來(lái)實(shí)現(xiàn)對(duì)網(wǎng)卡信息的捕獲和循環(huán)捕獲數(shù)據(jù)包,然后通過(guò)預(yù)先對(duì)于 ip、tcp、udp 等數(shù) 據(jù)包結(jié)構(gòu)的定義和 tcp/ip 等協(xié)議來(lái)解析其中包含的內(nèi)容并返回顯示捕獲到的數(shù)據(jù)包 的信息,當(dāng)然也可以保存捕獲到的數(shù)據(jù)包到指定地點(diǎn)以便進(jìn)一步分析。 關(guān)鍵詞:winpcap 捕獲 分析 tcp/ip 數(shù)據(jù)包 abstractabstract winpcap is an important tool for raw packet capture, sending packets to the netw

3、ork andcollecting network traffic statistic. the wellknown network analysis software wireshark(formerlyehtereal) is rely on winpcap to realize the function of capture. this introduces the history ofwinpcap open source project and the winpcap architecture and internal structure, and then given themet

4、hod of building a network protocol analysis development environment with winpcap and vc,focusing on the winpcap packet filtering mechanisms and characteristics, and analyze theshortcomings of packet filtering on winpcap and the errorprone areas of the preparation of winpcapfilter string. finally, so

5、lutions and solution were evaluated. by vc + +6.0 mfc programming in the full interface to control through a call to the function to achieve winpcap card information on the capture and recycling capture packets, and then advance the ip, tcp, udp and other data structure definitions and tcp /ip and o

6、ther protocols to resolve them and return the display contains the contents of the captured packets of information, of course, you can save the captured data packets to the designated location for further analysis. key words: winpcap capture analysis tcp / ip data packets 目 錄 1 緒論.1 1.1 課題背景 .1 1.1.

7、1winpcap 介紹.1 1.1.2 winpcap 體系結(jié)構(gòu).1 1.1.3 winpcap 的內(nèi)部結(jié)構(gòu).1 1.2 國(guó)內(nèi)外研究現(xiàn)狀 .1 1.2.1 網(wǎng)絡(luò)安全的研究.1 1.2.2 現(xiàn)有的網(wǎng)絡(luò)測(cè)試分析系統(tǒng).2 1.3 課題研究的意義 .3 2 設(shè)計(jì)理論依據(jù).5 2.1 osi 模型簡(jiǎn)介.5 2.2 tcp/ip 協(xié)議族及各數(shù)據(jù)包格式.5 2.2.1 tcp/ip 協(xié)議族.5 2.2.2 數(shù)據(jù)包的總體結(jié)構(gòu) .6 2.2.3 ip 數(shù)據(jù)段格式.7 2.2.4 tcp 數(shù)據(jù)段格式.7 2.2.5 udp 數(shù)據(jù)段格式.8 2.2.6 udp 數(shù)據(jù)段格式.8 2.3 網(wǎng)絡(luò)數(shù)據(jù)捕獲原理 .8 2.4

8、 網(wǎng)絡(luò)數(shù)據(jù)捕獲程序結(jié)構(gòu) .9 2.5 網(wǎng)卡的工作模式 .10 2.6 基于windows的數(shù)據(jù)包捕獲方案.11 3 winpcap 研究 .12 3.1 winpcap簡(jiǎn)介 .12 3.2 winpcap功能和應(yīng)用 .12 3.3 winpcap組成架構(gòu)和相關(guān)功能 .13 3.3.1 winpcap 的組成圖和結(jié)構(gòu)圖:.13 3.3.2 winpcap 的各功能模塊.15 3.2.3 windows 下 bpf 與 ndis 依賴關(guān)系.16 3.3 winpcap數(shù)據(jù)結(jié)構(gòu)和主要功能函數(shù) .16 3.3.1 winpcap 的數(shù)據(jù)結(jié)構(gòu)及自定義類型.16 4 軟件系統(tǒng)實(shí)現(xiàn)過(guò)程.19 4.1 系統(tǒng)流

9、程圖 .19 4.2 winpcap的安裝和環(huán)境搭建 .20 4.3 功能描述 .20 4.3.1 獲得本地網(wǎng)絡(luò)設(shè)備列表及信息.20 4.3.2 打開網(wǎng)卡設(shè)備準(zhǔn)備捕獲數(shù)據(jù)包 .21 4.3.3 捕獲數(shù)據(jù)包 .22 4.4 數(shù)據(jù)包的協(xié)議解析 .23 4.4.1 網(wǎng)絡(luò)協(xié)議分析 .23 4.4.2 各協(xié)議幀的數(shù)據(jù)結(jié)構(gòu) .23 4.4.3 分析具體實(shí)現(xiàn) .25 5 軟件測(cè)試和結(jié)果顯示.30 5.1 設(shè)備列表顯示 .30 5.2 數(shù)據(jù)顯示框 .30 5.3 數(shù)據(jù)幀分析框 .31 5.3 完整對(duì)話框 .32 6 總結(jié).32 致 謝.33 1 緒論 1.1 課題背景 1.1.1winpcap 介紹 winp

10、cap(windows packet capture)是 windows 平臺(tái)下一個(gè)免費(fèi),公共的網(wǎng) 絡(luò)訪問(wèn)系統(tǒng)。winpcap 這個(gè)項(xiàng)目的目的在于為 win32 應(yīng)用程序提供訪問(wèn)網(wǎng)絡(luò)底層的 能力,通過(guò)它,應(yīng)用程序可以繞過(guò)系統(tǒng)的協(xié)議棧,直接從網(wǎng)絡(luò)捕獲或向網(wǎng)絡(luò)發(fā)送數(shù) 據(jù)包,收集網(wǎng)絡(luò)統(tǒng)計(jì)信息等。1993 年初,s.mccanne 和 v.jacobson 等人推出了著 名的 bsd 包過(guò)濾器(bpf),它可以免費(fèi)獲得,目前已被許多版本的 unix 系統(tǒng)所采 用,在 windows 平臺(tái)上也有一些捕獲工具面世,如 netmonapi, pcausa 等,與 bpf 不同的是,這些產(chǎn)品是商業(yè)性質(zhì)的。而

11、winpcap 則是 windows 平臺(tái)上為數(shù)不多的功 能強(qiáng)大且可免費(fèi)獲得的包捕獲接口軟件之一,它是由意大利人 fulvio risso 和 loris degioanni 等人提出并實(shí)現(xiàn)的 2。 1.1.2 winpcap 體系結(jié)構(gòu) winpcap 由一個(gè)驅(qū)動(dòng)和幾個(gè)動(dòng)態(tài)連接庫(kù)組成,驅(qū)動(dòng)擴(kuò)展了操作系統(tǒng),提供底層 的網(wǎng)絡(luò)訪問(wèn),動(dòng)態(tài)庫(kù)提供編程接口,方便應(yīng)用程序調(diào)用,如圖 1 所示。winpcap 提 供給用戶兩個(gè)不同級(jí)別的編程接口:一個(gè)基于 libpcap 的 wpcap.dll,另一個(gè)是較 底層的 packet.dll。對(duì)于一般的要與 unix 平臺(tái)上 libpcap 兼容的開發(fā)來(lái)說(shuō),使用 w

12、pcap.dll 是當(dāng)然的選擇。圖 1 winpcap 體系結(jié)構(gòu)3fig.1 main components of winpcap3 1.1.3 winpcap 的內(nèi)部結(jié)構(gòu) winpcap 是針對(duì) win32 平臺(tái)上的抓包和網(wǎng)絡(luò)分析的一個(gè)架構(gòu)。它包括一個(gè)核心 態(tài)的包過(guò)濾器,一個(gè)底層的動(dòng)態(tài)鏈接庫(kù)(packet.dll)和一個(gè)高層的不依賴于系統(tǒng) 的庫(kù)(wpcap.dll)。內(nèi)部結(jié)構(gòu)如圖 2 所示。圖 2 winpcap 內(nèi)部結(jié)構(gòu)3fig.2 winpcap and npf3使用 winpcap 抓包依賴于兩個(gè)主要組件:一個(gè)數(shù)據(jù)包過(guò)濾器, 它決定著是否接收進(jìn)來(lái)的數(shù)據(jù)包并把數(shù)據(jù)包拷貝給監(jiān)聽(tīng)程序。數(shù)據(jù)包

13、過(guò)濾器是一個(gè) 有布爾輸出的函數(shù)。如果函數(shù)值是 true,抓包驅(qū)動(dòng)拷貝數(shù)據(jù)包給應(yīng)用程序;如果是 false,數(shù)據(jù)包將被丟棄。npf 數(shù)據(jù)包過(guò)濾器更復(fù)雜一些,因?yàn)樗粌H決定數(shù)據(jù)包是 否應(yīng)該被保存,而且還得決定要保存的字節(jié)數(shù)。被 npf 驅(qū)動(dòng)采用的過(guò)濾系統(tǒng)來(lái)源于 bsd packet filter(bpf),一個(gè)虛擬處理器可以執(zhí)行偽匯編書寫的用戶級(jí)過(guò)濾程 序。應(yīng)用程序采用用戶定義的過(guò)濾器并使用 wpcap.dll 將它們編譯進(jìn) bpf 程序。然 后,應(yīng)用程序使用 biocsetf ioctl 寫入核心態(tài)的過(guò)濾器。這樣,對(duì)于每一個(gè)到來(lái) 的數(shù)據(jù)包該程序都將被執(zhí)行,而滿足條件的數(shù)據(jù)包將被接收。與傳統(tǒng)解決方

14、案不同, npf 不解釋(interpret)過(guò)濾器,而是執(zhí)行(execute)它。由于性能的原因,在 使用過(guò)濾器前,npf 提供一個(gè) jit 編譯器將它轉(zhuǎn)化成本地的 80 x86 函數(shù)。當(dāng)一個(gè)數(shù) 據(jù)包被捕獲,npf 調(diào)用這個(gè)本地函數(shù)而不是調(diào)用過(guò)濾器解釋器,這使得處理過(guò)程非 ???。一個(gè)循環(huán)緩沖區(qū),用來(lái)保存數(shù)據(jù)包并且避免丟失。一個(gè)保存在緩沖區(qū)中的數(shù) 據(jù)包有一個(gè)頭,它包含了一些主要的信息,例如時(shí)間戳和數(shù)據(jù)包的大小。此外,以 隊(duì)列插入的方式來(lái)保存數(shù)據(jù)包可以提高數(shù)據(jù)的存儲(chǔ)效率。可以以多個(gè)數(shù)據(jù)包一組的 方式將數(shù)據(jù)包從 npf 緩沖區(qū)拷貝到應(yīng)用程序。這樣就提高了性能,因?yàn)樗档土俗x 的次數(shù)。如果一個(gè)數(shù)據(jù)包

15、到來(lái)的時(shí)候緩沖區(qū)已經(jīng)滿了,那么該數(shù)據(jù)包將被丟棄,此 時(shí)發(fā)生丟包。 1.2 國(guó)內(nèi)外研究現(xiàn)狀 1.2.1 網(wǎng)絡(luò)安全的研究 從廣義的網(wǎng)絡(luò)安全角度來(lái)講,近來(lái)國(guó)內(nèi)外的研究主要集中在密碼理論與技術(shù)、 安全協(xié)議理論與技術(shù)、安全體系結(jié)構(gòu)理論與技術(shù)等方面。 密碼理論與技術(shù)是現(xiàn)代信息安全的核心問(wèn)題,其基礎(chǔ)是可信信息系統(tǒng)的構(gòu)建與 評(píng)估主要包括兩部分,即基于數(shù)學(xué)的密碼理論與技術(shù)和非數(shù)學(xué)的密碼理論與技術(shù)。 自從 1976 年公鑰密碼的思想提出以來(lái),國(guó)際上己經(jīng)提出了許多種公鑰密碼體制,近 年來(lái)又提出了許多新的密碼體系,如基于數(shù)學(xué)的分組密碼、序列密碼、認(rèn)證碼、數(shù) 字簽名、hash 函數(shù)、身份識(shí)別、密鑰管理、pki 技術(shù)等和

16、基于非數(shù)學(xué)的信息隱形, 量子密碼,基于生物特征的識(shí)別理論與技術(shù)等。 數(shù)據(jù)捕獲和協(xié)議分析只是網(wǎng)絡(luò)安全中協(xié)議部分的一個(gè)分支,而且由于還不能完 全拋開現(xiàn)有的正在廣泛使用的不安全協(xié)議(如 tcp/ip 等),所以對(duì)于當(dāng)今網(wǎng)絡(luò)的協(xié)議 分析在一段時(shí)間內(nèi)還是研究的課題。但是,現(xiàn)在已經(jīng)部分使用和今后發(fā)展方向的是 采用安全的協(xié)議。 安全協(xié)議的研究主要包括兩方面內(nèi)容,即安全協(xié)議的安全性分析方法研究和各 種實(shí)用安全協(xié)議的設(shè)計(jì)與分析研究。安全協(xié)議的安全性分析方法主要有兩類,一類 是攻擊檢驗(yàn)方法,一類是形式化分析方法,其中安全協(xié)議的形式化分析方法是安全 協(xié)議研究中最關(guān)鍵的研究問(wèn)題之一,它的研究始于 80 年代初,目前正

17、處于百花齊放, 充滿活力的狀態(tài)之中。隨著各種有效方法及思想的不斷涌現(xiàn),這一領(lǐng)域在理論上正 在走向成熟。 目前,已經(jīng)提出了大量的實(shí)用安全協(xié)議,代表的有:電子商務(wù)協(xié)議,ipsec 協(xié)議, tls 協(xié)議,簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(snmp),pgp 協(xié)議,pem 協(xié)議,s-http 協(xié)議,s/mime 協(xié)議等。 1.2.2 現(xiàn)有的網(wǎng)絡(luò)測(cè)試分析系統(tǒng) 基于網(wǎng)絡(luò)數(shù)據(jù)捕獲和協(xié)議分析技術(shù),可以應(yīng)用成為廣義上的協(xié)議分析儀 (protocol analyzer),之所以這樣定義是因?yàn)橛幸恍┘冘浖模康母鼈?cè)重于網(wǎng)絡(luò) 數(shù)據(jù)捕獲和偵聽(tīng)的協(xié)議分析系統(tǒng)又叫做嗅探器(sniffer),而基于硬件或軟硬件結(jié)合 的網(wǎng)絡(luò)數(shù)據(jù)捕獲和分析系

18、統(tǒng)才叫協(xié)議分析儀。但在某些場(chǎng)合他們的分界是模糊的, 因?yàn)樗鼈冊(cè)诠δ苌隙寄懿东@并分析報(bào)文。實(shí)際上一些網(wǎng)管軟件,和一些網(wǎng)絡(luò)測(cè)試儀 都使用了嗅探器技術(shù)。 純軟件的嗅探器很多,有 tepdump、nmap、linuxsniffer、dsniff、ngep、snifferpro 加 etxray、甚至有專 用于捕獲用戶名和密碼的 linsniffer、winsniffer。所以 sniffer 技術(shù)本身就是一 把雙刃劍,它們同時(shí)被網(wǎng)絡(luò)管理員和黑客在熟練地使用,既可以作為網(wǎng)絡(luò)故障的診 斷工具,也可以作為黑客嗅探和監(jiān)聽(tīng)的工具。 大多數(shù)的純軟件協(xié)議分析儀是可以使用普通的網(wǎng)卡來(lái)完成進(jìn)行簡(jiǎn)單的數(shù)據(jù)采集 工作的,即

19、協(xié)議分析軟件+pc 網(wǎng)卡。其典型的功能是數(shù)據(jù)包的捕捉、協(xié)議的解碼、 統(tǒng)計(jì)分析和數(shù)據(jù)流量的產(chǎn)生。用協(xié)議分析儀可以捕捉網(wǎng)上的實(shí)際流量、提取流量的 特征,據(jù)此對(duì)網(wǎng)絡(luò)系統(tǒng)的流量進(jìn)行模型化和特征化。此外,網(wǎng)絡(luò)協(xié)議分析儀還可以 主動(dòng)地產(chǎn)生大量的數(shù)據(jù)包施加到網(wǎng)絡(luò)上,分析網(wǎng)絡(luò)的響應(yīng)或?qū)W(wǎng)絡(luò)系統(tǒng)進(jìn)行加重測(cè) 試。目前典型的協(xié)議分析儀有 hp 公司的 internet advisor(網(wǎng)絡(luò)專家系統(tǒng))、 fluke(福祿克公司)的 optiview-pe、wg 公司的 domino 系列協(xié)議分析儀,nai 公司 出品的 network associates sniffer portable 等。但這類協(xié)議分析軟件無(wú)論

20、在協(xié) 議的解碼能力、解碼和數(shù)據(jù)分析的實(shí)時(shí)性以及數(shù)據(jù)流量的產(chǎn)生能力上與用專門硬件 實(shí)現(xiàn)的協(xié)議分析儀相比仍有差距。另一種就是采用專用的數(shù)據(jù)采集硬件的協(xié)議分析 儀,應(yīng)用于復(fù)雜和高速的網(wǎng)絡(luò)鏈路上,采用專用的數(shù)據(jù)采集箱有利于全線速地捕捉 或更有效地進(jìn)行實(shí)時(shí)數(shù)據(jù)過(guò)濾。 還有一些比協(xié)議分析儀更高層次的網(wǎng)絡(luò)性能測(cè)試工具,站在應(yīng)用層的角度使用 一些基準(zhǔn)流量對(duì)網(wǎng)絡(luò)系統(tǒng)的性能進(jìn)行分析,代表性的軟件是 ganymede software 公 司的 chariot 軟件。另外還有一類軟件值得介紹,就是用于網(wǎng)絡(luò)系統(tǒng)規(guī)劃驗(yàn)證的網(wǎng) 絡(luò)系統(tǒng)模擬環(huán)境,國(guó)外己有一些這樣的軟件能對(duì)用典型的網(wǎng)絡(luò)技術(shù)或它們的組合構(gòu) 建的較大型的網(wǎng)絡(luò)系統(tǒng)

21、進(jìn)行模擬,但往往價(jià)格十分昂貴。 從協(xié)議分析儀發(fā)展的角度來(lái)說(shuō),網(wǎng)絡(luò)維護(hù)人員越來(lái)越需要使用功能強(qiáng)大并能將 多種網(wǎng)絡(luò)測(cè)試手段集于一身的綜合式測(cè)試分析手段,典型的協(xié)議分析儀上的功能延 展就是加入網(wǎng)管功能、自動(dòng)網(wǎng)絡(luò)信息搜集功能、智能的專家故障診斷功能,并且移 動(dòng)性能要有效。這種綜合的協(xié)議分析儀或者說(shuō)是綜合的網(wǎng)絡(luò)分析儀成為了當(dāng)今網(wǎng)絡(luò) 維護(hù)和測(cè)試儀的主要發(fā)展趨勢(shì),像 fluke 的 optiview ina 手持式綜合協(xié)議分析儀自 上市來(lái)在網(wǎng)絡(luò)現(xiàn)場(chǎng)分析、故障診斷、網(wǎng)絡(luò)維護(hù)方法得到了相當(dāng)廣泛的應(yīng)用和發(fā)展。 隨著網(wǎng)絡(luò)維護(hù)規(guī)模的加大,網(wǎng)絡(luò)技術(shù)的變化,網(wǎng)絡(luò)關(guān)鍵數(shù)據(jù)的采集也越來(lái)越困 難。有時(shí)為了分析和采集數(shù)據(jù),必須能

22、在異地同時(shí)地進(jìn)行采集,于是將協(xié)議分析儀 的數(shù)據(jù)采集系統(tǒng)獨(dú)立開來(lái),能安置在網(wǎng)絡(luò)的不同地方,由能控制多個(gè)采集器的協(xié)議 分析儀平臺(tái)進(jìn)行管理和數(shù)據(jù)處理,這種應(yīng)用模式就誕生了分布式協(xié)議分析儀。 1.3 課題研究的意義 隨著網(wǎng)絡(luò)的飛速發(fā)展,internet 的迅速普及,網(wǎng)絡(luò)已經(jīng)深入到了我們的生活, 跟我們息息相關(guān)。伴隨著網(wǎng)絡(luò)帶來(lái)的便利,網(wǎng)絡(luò)安全問(wèn)題也越來(lái)越受到人們的關(guān)注 和重視。有兩類人對(duì)于流動(dòng)在網(wǎng)絡(luò)上的數(shù)據(jù)是非常感興趣的:網(wǎng)絡(luò)管理員和黑客, 他們都要對(duì)網(wǎng)絡(luò)上的以包為單位的數(shù)據(jù)流進(jìn)行監(jiān)測(cè)。事實(shí)上,一個(gè)好的數(shù)據(jù)包監(jiān)測(cè) 軟件通常可以在網(wǎng)絡(luò)管理和黑客技術(shù)的工具包中同時(shí)找到。黑客可以用數(shù)據(jù)包監(jiān)測(cè) 軟件監(jiān)聽(tīng)互聯(lián)網(wǎng),

23、并且追蹤一些敏感數(shù)據(jù)的交換如登錄對(duì)話和財(cái)經(jīng)交易;網(wǎng)絡(luò)管理 員可以用數(shù)據(jù)包監(jiān)測(cè)軟件監(jiān)視網(wǎng)絡(luò)的狀態(tài)、查找網(wǎng)絡(luò)漏洞,檢測(cè)網(wǎng)絡(luò)性能和修復(fù)網(wǎng) 絡(luò)的故障等。所以,研究網(wǎng)絡(luò)數(shù)據(jù)的捕獲和網(wǎng)絡(luò)協(xié)議的分析不但能夠有利于管理網(wǎng) 絡(luò)和維護(hù)網(wǎng)絡(luò)的健康運(yùn)轉(zhuǎn),更重要的還可以得知黑客對(duì)網(wǎng)絡(luò)攻擊的機(jī)理,有針對(duì)地 進(jìn)行入侵檢測(cè),進(jìn)而避免黑客的攻擊破壞和對(duì)資料的竊取。 該課題是 windows 下基于 winpcap 的網(wǎng)絡(luò)數(shù)據(jù)包的捕獲分析工具的開發(fā)和實(shí)現(xiàn), 所以主要的研究方向和側(cè)重點(diǎn)是在于最基本也是最核心的網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和分析 等功能上。網(wǎng)絡(luò)數(shù)據(jù)包的捕獲在于網(wǎng)絡(luò)安全領(lǐng)域有著無(wú)可代替的重要作用,不論是 防火墻技術(shù),網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)或

24、者是網(wǎng)絡(luò)測(cè)試都離不開數(shù)據(jù)包的捕獲,這是一切的基 礎(chǔ),其他的功能都要基于這個(gè)功能才能實(shí)現(xiàn)。 2 設(shè)計(jì)理論依據(jù) 2.1 osi 模型簡(jiǎn)介 osi(open system interconnect)七層模型即開放式系統(tǒng)互聯(lián)參考模型,是一 種框架性的設(shè)計(jì)方法通過(guò)七個(gè)層次化的結(jié)構(gòu)模型使不同的系統(tǒng)不同的網(wǎng)絡(luò)之間實(shí)現(xiàn) 可靠的通訊,因此其最主要的功能使就是幫助不同類型的主機(jī)實(shí)現(xiàn)數(shù)據(jù)傳輸。雖然 目前沒(méi)有完全按照這種模型實(shí)現(xiàn)的網(wǎng)絡(luò)協(xié)議棧,但是這種模型對(duì)于理解網(wǎng)絡(luò)協(xié)議內(nèi) 部的架構(gòu)很有幫助,為學(xué)習(xí)網(wǎng)絡(luò)協(xié)議及功能提供了很好的參考模型。七層模型圖如 圖 1 所示。 應(yīng)用層 表示層 會(huì)話層 應(yīng)用層 傳輸層 表示層 網(wǎng)絡(luò)層

25、傳輸層 網(wǎng)絡(luò)層 數(shù)據(jù)鏈路層 會(huì)話層 數(shù)據(jù)鏈路層 物理層物理層 接口 接口 接口 接口 接口 接口 接口 apud ppud 報(bào)文 tpud spud 幀 比特 圖 1 iso/osi 七層模型圖 協(xié) 議 2.2 tcp/ip 協(xié)議族及各數(shù)據(jù)包格式 2.2.1 tcp/ip 協(xié)議族 tcp/ip(transmission control protocol/internet protocol,傳輸控制協(xié)議/ 網(wǎng)間網(wǎng)協(xié)議)是目前世界上應(yīng)用最為廣泛的協(xié)議,它的流行與 internet 的迅猛發(fā)展 密切相關(guān)tcp/ip 最初是為互聯(lián)網(wǎng)的原型 arpanet 所設(shè)計(jì)的,目的是提供一整套方 便實(shí)用、能應(yīng)用于

26、多種網(wǎng)絡(luò)上的協(xié)議,事實(shí)證明 tcp/ip 做到了這一點(diǎn),它使網(wǎng)絡(luò)互 聯(lián)變得容易起來(lái),并且使越來(lái)越多的網(wǎng)絡(luò)加入其中,成為 internet 的事實(shí)標(biāo)準(zhǔn)。 ip 協(xié)議(internet protocol)又稱互聯(lián)網(wǎng)協(xié)議,是支持網(wǎng)間互連的數(shù)據(jù)報(bào)協(xié)議, 它與 tcp 協(xié)議(傳輸控制協(xié)議)一起構(gòu)成了 tcp/ip 協(xié)議族的核心。它提供網(wǎng)間連接 的完善功能,包括 ip 數(shù)據(jù)報(bào)規(guī)定互連網(wǎng)絡(luò)范圍內(nèi)的 ip 地址格式。tcp/ip 四層參考 模型如圖 2 所示。 數(shù)據(jù)包 ip 頭 tcp 頭(或其他信息頭) 數(shù) 據(jù) 圖 2 tcp/ip 四層模型 應(yīng)用層 表示層 會(huì)話層 傳輸層 網(wǎng)絡(luò)層 數(shù)據(jù)鏈路層 物理層 os

27、i七層參考模型 應(yīng)用層 網(wǎng)絡(luò)互聯(lián)層 主機(jī)到網(wǎng)絡(luò) tcp/ip四層參考模型 傳輸層 tcp/ip 各層包含的協(xié)議圖如下: 圖 3 各協(xié)議關(guān)系圖 應(yīng)用層 網(wǎng)絡(luò)互聯(lián)層 主機(jī)到網(wǎng)絡(luò) 傳輸層 telnet、ftp、http、p2p 以 太 網(wǎng) 令 牌 網(wǎng) iparp snmp、tftp、nfs、p2p udptcp fddihdlcppp 802.2802.3 icmp 2.2.2 數(shù)據(jù)包的總體結(jié)構(gòu) 圖 4 數(shù)據(jù)包總體結(jié)構(gòu)圖 2.2.3 ip 數(shù)據(jù)段格式 ip 的數(shù)據(jù)段頭的具體格式如圖 5 所示。 16 位 16 位 標(biāo)識(shí) 源地址 目的地址 生命期協(xié)議頭校驗(yàn)和 版本ihl服務(wù)類型總長(zhǎng) 標(biāo)志分段偏移 選項(xiàng)

28、(0 或更多) 16 位 16 位 源端口 目的端口 順序號(hào) 確認(rèn)號(hào) 校驗(yàn)和 緊急指針 可選項(xiàng)(0 或更多的 32 位) 數(shù)據(jù)(可選項(xiàng)) t c p 頭 長(zhǎng) ( 保 留) 7 位 u r c a c k p s h r s t s y n f i n窗口大小 16 位 16 位 源端口 目的端口 udp 長(zhǎng)度 udp 校驗(yàn)碼 圖 5 ip 數(shù)據(jù)段頭格式 2.2.4 tcp 數(shù)據(jù)段格式 tcp 的數(shù)據(jù)段頭的具體格式如圖 6 所示。 圖 6 tcp 數(shù)據(jù)段格式 2.2.5 udp 數(shù)據(jù)段格式 tcp 的數(shù)據(jù)段頭的具體格式如圖 7 所示。 圖 7 udp 數(shù)據(jù)段頭格式 2.2.6 udp 數(shù)據(jù)段格式

29、 icmp 的數(shù)據(jù)段頭的具體格式如圖 8 所示。 類型(8) 代碼(8) 校驗(yàn)和(16) 圖 8 icmp 數(shù)據(jù)段格式 2.3 網(wǎng)絡(luò)數(shù)據(jù)捕獲原理 由于目前用的最多的局域網(wǎng)絡(luò)形式是以太網(wǎng),在以太網(wǎng)上,數(shù)據(jù)是以被稱為幀 的數(shù)據(jù)結(jié)構(gòu)為單位進(jìn)行交換的,而幀(數(shù)據(jù)包)是用被稱為帶碰撞檢測(cè)的載波偵聽(tīng)多 址訪問(wèn)即 csma/cd(carrier sense multiple access with collision detection) 的方式發(fā)送的,在這種方法中,發(fā)送到指定地址的幀實(shí)際上是發(fā)送到所有計(jì)算機(jī)的, 只是如果網(wǎng)卡檢測(cè)到經(jīng)過(guò)的數(shù)據(jù)不是發(fā)往自身的,簡(jiǎn)單忽略過(guò)去而已。正是這種基 于 csma/cd

30、的廣播機(jī)制,這就給連接在網(wǎng)絡(luò)上的計(jì)算機(jī)捕獲來(lái)自于其他主機(jī)的數(shù)據(jù) 帶來(lái)了可能,即通過(guò)對(duì)網(wǎng)絡(luò)接口的設(shè)置可以使網(wǎng)卡能夠接收到所有經(jīng)過(guò)該機(jī)器的數(shù) 據(jù),然后將這些數(shù)據(jù)做相應(yīng)處理并實(shí)時(shí)分析這些數(shù)據(jù)的內(nèi)容,進(jìn)而分析網(wǎng)絡(luò)當(dāng)前狀 態(tài)和整體布局。 從廣義的角度上看,一個(gè)包捕獲機(jī)制包含三個(gè)主要部分:首先是最底層針對(duì)特定 操作系統(tǒng)的包捕獲機(jī)制,然后是最高層針對(duì)用戶程序的接口,第三部分是包過(guò)濾機(jī) 制。不同的操作系統(tǒng)實(shí)現(xiàn)的底層包捕獲機(jī)制可能是不一樣的,但從形式上看大同小 異。數(shù)據(jù)包常規(guī)的傳輸路徑依次為網(wǎng)卡、設(shè)備驅(qū)動(dòng)層、數(shù)據(jù)鏈路層、ip 層、傳輸層、 最后到達(dá)應(yīng)用程序。而包捕獲機(jī)制是在數(shù)據(jù)鏈路層增加一個(gè)旁路處理,對(duì)發(fā)送和接

31、 收到的數(shù)據(jù)包做過(guò)濾/緩沖等相關(guān)處理,最后直接傳遞到應(yīng)用程序。值得注意的是, 包捕獲機(jī)制并不影響操作系統(tǒng)對(duì)數(shù)據(jù)包的網(wǎng)絡(luò)棧處理。對(duì)用戶程序而言,包捕獲機(jī) 制提供了一個(gè)統(tǒng)一的接口,使用戶程序只需要簡(jiǎn)單的調(diào)用若干函數(shù)就能獲得所期望 的數(shù)據(jù)包。這樣一來(lái),針對(duì)特定操作系統(tǒng)的捕獲機(jī)制對(duì)用戶透明,使用戶程序有比 較好的可移植性。包過(guò)濾機(jī)制是對(duì)所捕獲到的數(shù)據(jù)包根據(jù)用戶的要求進(jìn)行篩選,最 終只把滿足過(guò)濾條件的數(shù)據(jù)包傳遞給用戶程序。 2.4 網(wǎng)絡(luò)數(shù)據(jù)捕獲程序結(jié)構(gòu) 用戶態(tài) - 核心態(tài) 網(wǎng)絡(luò)應(yīng)用程序 vxd/wdm 協(xié)議驅(qū)動(dòng)器 ndis 網(wǎng)卡驅(qū)動(dòng)程序網(wǎng)卡驅(qū)動(dòng)程序 網(wǎng)卡驅(qū)動(dòng)程序 圖 9 數(shù)據(jù)包捕獲程序結(jié)構(gòu)圖 其中 nd

32、is(network deiver interface specification)是 microsoft 和 3com 公司聯(lián)合制定的網(wǎng)絡(luò)驅(qū)動(dòng)規(guī)范,并提供了大量的操作函數(shù)。它為上層的協(xié)議驅(qū)動(dòng)程 序提供服務(wù),屏蔽了下層各種網(wǎng)卡的差別。ndis 向上支持多種網(wǎng)絡(luò)協(xié)議(比如 tcp/ip、nwlinux ipx/spx、netbeui 等) ,向下支持不同廠家生產(chǎn)的多種網(wǎng)卡,還 支持多種工作模式,支持多處理器,并提供一個(gè)完備的 ndis 庫(kù)。 ndis 驅(qū)動(dòng)程序結(jié)構(gòu)圖如圖 10 所示。 用戶模式 - 內(nèi)核模式 應(yīng)用層 協(xié)議驅(qū)動(dòng)程序 中間驅(qū)動(dòng)程序 網(wǎng)卡驅(qū)動(dòng) 網(wǎng)卡 sidn 圖 10 ndis 驅(qū)動(dòng)程

33、序的結(jié)構(gòu)圖 2.5 網(wǎng)卡的工作模式 以太網(wǎng)是一種總線型的網(wǎng)絡(luò),從邏輯上來(lái)看是由一條總線和多個(gè)連接在總線上 的節(jié)點(diǎn)所組成,各個(gè)節(jié)點(diǎn)采用上面提到的 csma/cd 協(xié)議進(jìn)行信道的爭(zhēng)用和共享。每 個(gè)節(jié)點(diǎn)通過(guò)網(wǎng)卡來(lái)實(shí)現(xiàn)這種功能。每一個(gè)在局域網(wǎng)(lan)節(jié)點(diǎn)上的主機(jī)都有其硬件地 址(mac 地址),這些地址唯一地表示了網(wǎng)絡(luò)上的主機(jī)。當(dāng)用戶發(fā)送一個(gè)數(shù)據(jù)包時(shí), 這些數(shù)據(jù)包就會(huì)發(fā)送到 lan 上所有可用的機(jī)器。網(wǎng)卡主要的工作是完成對(duì)于總線當(dāng) 前狀態(tài)的探測(cè),確定是否進(jìn)行數(shù)據(jù)的傳送,判斷每個(gè)物理數(shù)據(jù)幀目的地是否為本機(jī) 地址,如果不匹配,則說(shuō)明不是發(fā)送到本機(jī)的而將它丟棄。如果是的話,接收該數(shù) 據(jù)幀,進(jìn)行物理數(shù)據(jù)幀的

34、 crc 校驗(yàn),然后將數(shù)據(jù)幀提交給 llc 子層。 網(wǎng)卡具有如下的幾種工作模式: (1)廣播模式(broadcastmodel):它的物理地址(mac)地址是以 0 xfffff 的幀為 廣播幀,工作在廣播模式的網(wǎng)卡接收廣播幀。 (2)多播傳送(multicastmodel):多播傳送地址作為目的物理地址的幀可以被組 內(nèi)的其它主機(jī)同時(shí)接收,而組外主機(jī)卻接收不到。但是,如果將網(wǎng)卡設(shè)置為多播傳 送模式,它可以接收所有的多播傳送幀,而不論它是不是組內(nèi)成員。 (3)直接模式(directmodel):工作在直接模式下的網(wǎng)卡只接收目地址是自己 mac 地址的幀。 (4)混雜模式(promiscuousm

35、odel):工作在混雜模式下的網(wǎng)卡接收所有的流過(guò)網(wǎng) 卡的幀,數(shù)據(jù)包捕獲程序就是在這種模式下運(yùn)行的。 2.6 基于 windows 的數(shù)據(jù)包捕獲方案 l)使用原始套接字 (raw socket)機(jī)制。方法簡(jiǎn)單,但功能有限,只能捕獲較高 層的數(shù)據(jù)包。在創(chuàng)建了原始套接字后,需要通過(guò) setsockopt()函數(shù)來(lái)設(shè)置 ip 頭操 作選項(xiàng),然后再通過(guò) bind()函數(shù)將原始套接字綁定到本地網(wǎng)卡。為了讓原始套接字 能接受所有的數(shù)據(jù),還需要通過(guò) ioctlsocket()來(lái)進(jìn)行設(shè)置,而且還可以指定是否 親自處理 ip 頭。至此,實(shí)際就可以開始對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行監(jiān)聽(tīng)了,對(duì)數(shù)據(jù)包的獲取 仍象流式套接字或數(shù)據(jù)報(bào)套

36、接字那樣通過(guò) recv()函數(shù)來(lái)完成.但是與其他兩種套接 字不同的是,原始套接字此時(shí)捕獲到的數(shù)據(jù)包并不僅僅是單純的數(shù)據(jù)信息,而是包 含有 ip 頭、tcp 頭等信息頭的最原始的數(shù)據(jù)信息,這些信息保留了它在網(wǎng)絡(luò)傳輸時(shí) 的原貌。通過(guò)對(duì)這些在低層傳輸?shù)脑夹畔⒌姆治隹梢缘玫接嘘P(guān)網(wǎng)絡(luò)的一些信息。 由于這些數(shù)據(jù)經(jīng)過(guò)了網(wǎng)絡(luò)層和傳輸層的打包,因此需要根據(jù)其附加的幀頭對(duì)數(shù)據(jù)包 進(jìn)行分析; 2)直接連接調(diào)用 ndis 庫(kù)函數(shù),這種方法功能非常強(qiáng)大,但是比較危險(xiǎn),很可能 導(dǎo)致系統(tǒng)崩潰和網(wǎng)絡(luò)癱瘓; 3)使用或者自行編寫中間層驅(qū)動(dòng)程序,這是微軟公司推薦使用的一種方法,微 軟提供的 win2000 ddk 中也提供了幾

37、個(gè)這樣的驅(qū)動(dòng)程序。在具體的實(shí)現(xiàn)方式上可分 為用戶級(jí)和內(nèi)核級(jí)兩類。其中內(nèi)核級(jí)主要是 tdi 捕獲過(guò)濾驅(qū)動(dòng)程序,ndis 中間層捕 獲過(guò)濾驅(qū)動(dòng)程序,ndis 捕獲過(guò)濾鉤子(hook)驅(qū)動(dòng)程序等,它們都是利用網(wǎng)絡(luò)驅(qū)動(dòng)來(lái) 實(shí)現(xiàn)的。而用戶級(jí)的包括 spi 接口,windows2000 包捕獲過(guò)濾接口等; 4)使用第三方捕獲組件或者庫(kù),比如 winpcap。此設(shè)計(jì)就是利用 winpcap 自帶 的庫(kù)函數(shù)實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的捕獲,從而為數(shù)據(jù)包協(xié)議的分析打下基礎(chǔ)。下面一章主要 來(lái)介紹 winpcap。 3 winpcap 研究 3.1 winpcap 簡(jiǎn)介 winpcap(windows packet captur

38、e)是 windows 平臺(tái)下一個(gè)免費(fèi)、公共的網(wǎng)絡(luò)訪 問(wèn)軟件系統(tǒng),是 linux 下的 libpcap 移植到 windows 平臺(tái)下實(shí)現(xiàn)數(shù)據(jù)包捕獲而設(shè)計(jì) 的函數(shù)庫(kù),在設(shè)計(jì) winpcap 時(shí)參照了 libpcap,使用方法也與 libpcap 相似,基于 libpcap 的程序可以很容易的移植到 windows 平臺(tái)下。這個(gè)數(shù)據(jù)包捕獲架構(gòu)是由加 州大學(xué)和 lawrence berkeley 實(shí)驗(yàn)室及其投稿者聯(lián)合開發(fā)的。大多數(shù)網(wǎng)絡(luò)應(yīng)用程序 訪問(wèn)網(wǎng)絡(luò)是通過(guò)廣泛使用的套接字。這種方法很容易實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)傳輸,因?yàn)椴僮?系統(tǒng)負(fù)責(zé)底層的細(xì)節(jié)(比如協(xié)議棧,數(shù)據(jù)流組裝等)以及提供了類似于文件讀寫的 函數(shù)接口

39、。 winpcap 是 bpf 模型和 libpcap 函數(shù)庫(kù)在 windows 平臺(tái)下捕獲網(wǎng)絡(luò)數(shù)據(jù)包和進(jìn) 行網(wǎng)絡(luò)狀態(tài)分析的一種體系結(jié)構(gòu),是由一個(gè)核心的包過(guò)濾驅(qū)動(dòng)程序、一個(gè)底層的動(dòng) 態(tài)鏈接庫(kù) packet.dll 和一個(gè)高層的獨(dú)立于系統(tǒng)的函數(shù)庫(kù) libpcap 組成。底層的包捕 獲驅(qū)動(dòng)程序?qū)嶋H上是一個(gè)協(xié)議網(wǎng)絡(luò)驅(qū)動(dòng)程序,通過(guò)對(duì) ndis 中函數(shù)的調(diào)用提供捕獲和 發(fā)送原始數(shù)據(jù)包的能力。packet.dll 是對(duì)這個(gè) bpf 驅(qū)動(dòng)程序訪問(wèn)的 api 接口,同時(shí) 有一套符合 libpcap 接口的函數(shù)庫(kù)。 但是,winpcap 有它的不足之處,不依靠主機(jī)的諸如 tcp/ip 協(xié)議去收發(fā)數(shù)據(jù)包。 這意味

40、著它不能阻塞,不能處理同一臺(tái)主機(jī)中各程序之間的通信數(shù)據(jù)。它只能“嗅 探”到物理線路上的數(shù)據(jù)報(bào)。因此它不適用于 traffic shapers,qos 調(diào)度,以及個(gè) 人防火墻。 3.2 winpcap 功能和應(yīng)用 (1)開發(fā) winpcap 這個(gè)項(xiàng)目的目的在于為 win32 應(yīng)用程序提供訪問(wèn)網(wǎng)絡(luò)底層的能 力。winpcap 為程序員提供了一套標(biāo)準(zhǔn)的網(wǎng)絡(luò)數(shù)據(jù)包捕獲接口,并且與 libpcap 兼 容,使得原來(lái)許多 linux 平臺(tái)下的網(wǎng)絡(luò)安全程序可以很快地移植到 windows 平臺(tái)下: winpcap 的效率很高,它充分考慮了各種性能和效率的優(yōu)化,在內(nèi)核層次實(shí)現(xiàn)了數(shù) 據(jù)包的捕獲和過(guò)濾。這是由 n

41、pf(netgroup packet filter)來(lái)實(shí)現(xiàn)的,npf 是 winpcape 的核心部分,它還實(shí)現(xiàn)了內(nèi)核層次的統(tǒng)計(jì)功能,有利于設(shè)計(jì)網(wǎng)絡(luò)流量的程 序。 winpcap 提供了以下的各項(xiàng)功能: 1)捕獲原始數(shù)據(jù)包,包括在共享網(wǎng)絡(luò)上各主機(jī)發(fā)送/接收的數(shù)據(jù)包以及相互之間 換的數(shù)據(jù)包; 2)在數(shù)據(jù)報(bào)發(fā)往應(yīng)用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)報(bào)過(guò)濾掉; 3)在網(wǎng)絡(luò)上發(fā)送原始的數(shù)據(jù)報(bào); 4)收集網(wǎng)絡(luò)通信過(guò)程中的統(tǒng)計(jì)信息。 (2)winpcap 的應(yīng)用非常廣泛,很多不同的工具軟件使用 winpcap 作為開發(fā)工具, 它特別適用于下面這幾個(gè)經(jīng)典領(lǐng)域: l) 網(wǎng)絡(luò)與協(xié)議分析器 (networ

42、k and protocol analyzers); 2) 網(wǎng)絡(luò)監(jiān)視器 (network monitors); 3) 網(wǎng)絡(luò)流量記錄器 (traffic loggers); 4) 流量發(fā)生 (traffic generators); 5) 用戶級(jí)網(wǎng)橋及路由 (user-level bridges and routers); 6) 網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng) (network intrusion detection systems (nids); 7) 網(wǎng)絡(luò)掃描器 (network scanners); 8) 安全工具 (security tools)。 (3)特別地,大部分 windows 平臺(tái)下有數(shù)據(jù)包

43、捕獲功能的軟件都使用了 winpcap 作為編程接口,比較著名的有:windump-網(wǎng)絡(luò)協(xié)議分析軟件;sniffit-windows 平 臺(tái)下的嗅探器;arpsniffergui-國(guó)產(chǎn)的 windows 平臺(tái)下交換網(wǎng)絡(luò)的嗅探器; ethereal(2006 年后改稱 wireshark)-是全球相當(dāng)行流行的開放源代碼的網(wǎng)絡(luò)協(xié)議分 析軟件。 3.3 winpcap 組成架構(gòu)和相關(guān)功能 3.3.1 winpcap 的組成圖和結(jié)構(gòu)圖: winpcap 的組成如圖 1 所示。 應(yīng)用程序 wpcap.dll packet.dll npf 裝置 驅(qū)動(dòng)程序 圖 1 winpcap 組成 用 戶 層 核 心

44、層 數(shù)據(jù)包 網(wǎng)絡(luò) winpcap 的結(jié)構(gòu)如圖 2 所示。 應(yīng)用程序 直接調(diào)用 packet.dll 直接訪問(wèn) npf 應(yīng)用程序應(yīng)用程序 用戶緩沖區(qū)緩沖器 動(dòng)態(tài)鏈接庫(kù) packet.dll 內(nèi)核緩沖區(qū) 1 內(nèi)核緩沖區(qū) 2 過(guò)濾器 1過(guò)濾器 2 其 他 協(xié) 議 棧 nic 驅(qū)動(dòng)(ndis 3.0 或更高版本) 用戶級(jí) npf 過(guò)濾器 guolvqi 網(wǎng)絡(luò)分流器 數(shù)據(jù)包 網(wǎng)絡(luò) 內(nèi)核級(jí) 網(wǎng)絡(luò) 圖 2 winpcap 結(jié)構(gòu)圖 3.3.2 winpcap 的各功能模塊 winpcap 是由一個(gè)核心的包過(guò)濾驅(qū)動(dòng)程序 npf 即網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾器,一個(gè)底層 的動(dòng)態(tài)連接庫(kù) packet.dll 和一個(gè)高層的獨(dú)立于

45、系統(tǒng)的動(dòng)態(tài)連接庫(kù) wpcap.dll 組成。 1)npf 模塊,內(nèi)核層的數(shù)據(jù)包過(guò)濾模塊 npf(netgroup packet filter)是一個(gè) 虛擬設(shè)備驅(qū)動(dòng)程序文件,它的功能是捕獲和過(guò)濾數(shù)據(jù)包,同時(shí)還可以發(fā)送、存儲(chǔ)數(shù) 據(jù)包以及對(duì)網(wǎng)絡(luò)進(jìn)行統(tǒng)計(jì)分析。并把這些數(shù)據(jù)包原封不動(dòng)地傳給用戶態(tài)模塊,這個(gè) 過(guò)程中包括了一些操作系統(tǒng)特有的代碼。這個(gè)底層的包捕獲驅(qū)動(dòng)程序?qū)嶋H為一個(gè)協(xié) 議網(wǎng)絡(luò)驅(qū)動(dòng)程序。 捕獲數(shù)據(jù)包是 npf 最重要的操作。在抓包的時(shí)候,網(wǎng)絡(luò)接口驅(qū)動(dòng)程序使用一個(gè) 網(wǎng)絡(luò)接口監(jiān)視著數(shù)據(jù)包,并將這些數(shù)據(jù)包完整無(wú)缺地投遞給用戶級(jí)應(yīng)用程序。抓包 過(guò)程依賴于兩個(gè)主要組件: (1)數(shù)據(jù)包過(guò)濾器,它決定著是否接

46、收進(jìn)來(lái)的數(shù)據(jù)包并把數(shù)據(jù)包拷貝給監(jiān)聽(tīng)程 序。數(shù)據(jù)包過(guò)濾器是一個(gè)有布爾輸出的函數(shù)。如果函數(shù)值是 true,抓包驅(qū)動(dòng)拷貝數(shù) 據(jù)包給應(yīng)用程序;如果是 false,數(shù)據(jù)包將被丟棄。npf 數(shù)據(jù)包過(guò)濾器更復(fù)雜一些, 因?yàn)樗粌H決定數(shù)據(jù)包是否應(yīng)該被保存,而且還得決定要保存的字節(jié)數(shù)。npf 驅(qū)動(dòng) 采用的過(guò)濾系統(tǒng)來(lái)源于 bsd packet filter(bpf)。 (2)虛擬處理器,可以執(zhí)行偽匯編書寫的用戶級(jí)過(guò)濾程序,應(yīng)用程序采用用戶 定義的過(guò)濾器并使用 wpcap.dll 將它們編譯進(jìn) bpf 程序。然后,應(yīng)用程序使用 biocsetfioctl 寫入核心態(tài)的過(guò)濾器。這樣,對(duì)于每一個(gè)到來(lái)的數(shù)據(jù)包該程序都將

47、被執(zhí)行,而滿足條件的數(shù)據(jù)包將被接收。與傳統(tǒng)解決方案不同,npf 不解釋 (interpret)過(guò)濾器,而是執(zhí)行(execute)它。由于性能的原因,在使用過(guò)濾器前, npf 提供一個(gè) jit 編譯器將它轉(zhuǎn)化成本地的 80 x86 函數(shù)。當(dāng)一個(gè)數(shù)據(jù)包被捕獲,npf 調(diào)用這個(gè)本地函數(shù)而不是調(diào)用過(guò)濾器解釋器,這使得處理過(guò)程相當(dāng)快。 2)paeket.dll 動(dòng)態(tài)鏈接庫(kù)模塊,為 win32 平臺(tái)提供了一個(gè)較低層的編程接口, 使用它就可以調(diào)用 winpcap 函數(shù)。dll(dynamic linkable library)文件通常是一個(gè) 具有獨(dú)立功能的程序模塊,可以進(jìn)行單獨(dú)編譯和測(cè)試。在運(yùn)行時(shí),只有當(dāng)

48、exe 程序 確實(shí)要調(diào)用這些 dll 模塊的情況下,系統(tǒng)才會(huì)將它們裝載到內(nèi)存空間中。這種方式 不僅減少了 exe 文件的大小和對(duì)內(nèi)存空間的需求,而且使這些 dll 模塊可以同時(shí)被 多個(gè)應(yīng)用程序使用,只是增加 dll 的計(jì)數(shù)。當(dāng)應(yīng)用程序卸載 dll 時(shí),計(jì)數(shù)則減少, 計(jì)數(shù)為 o 時(shí) dll 就從內(nèi)存被釋放。packet.dll 也是對(duì) bpf 驅(qū)動(dòng)程序進(jìn)行訪問(wèn)的 api 接口,同時(shí)它有一套符合 libpcap 接口的函數(shù)庫(kù)。packet.dll 直接映射了內(nèi)核的調(diào) 用,不同版本的 windows 系統(tǒng)都有自己的內(nèi)核模塊和用戶層模塊,packet.dll 用于 解決這些不同。調(diào)用 packet.d

49、ll 的程序可以運(yùn)行在不同版本的 windows 平臺(tái)上,而 無(wú)需重新編譯。packet.dll 還包含了其他一些函數(shù)使它可以基于 winpcap 的網(wǎng)絡(luò)數(shù) 據(jù)捕獲和分析系統(tǒng)的研究和實(shí)現(xiàn)一些底層的操作,如:獲取網(wǎng)絡(luò)適配器名或動(dòng)態(tài)的加 載驅(qū)動(dòng)程序。packet.dll 還可以取得一些系統(tǒng)信息,如:主機(jī)的 mac 地址和一些硬 件計(jì)數(shù)(以太網(wǎng)上沖突次數(shù)等等)。paeket.dll 和 npf 都依賴于操作系統(tǒng),并且由于 windows95/98 和 windowsnt/2000 之間結(jié)構(gòu)的不同而在不同版本的操作系統(tǒng)上有所 不同。 3)wpcap.dll 動(dòng)態(tài)鏈接庫(kù)模塊,也是一個(gè)動(dòng)態(tài)鏈接庫(kù),較 pa

50、cket.dll 層次更 高,其調(diào)用是不依賴于操作系統(tǒng)的。它提供了更加高層、抽象的函數(shù)。它是基于 libpcap 設(shè)計(jì)的,其函數(shù)的調(diào)用和 libpcap 幾乎一樣,函數(shù)名稱和參數(shù)的定義也一 樣。但它包含了一些其它高層的函數(shù),比如:過(guò)濾器生成器、用戶定義的緩沖區(qū)和高 層特性(數(shù)據(jù)統(tǒng)計(jì)和構(gòu)造數(shù)據(jù)包)。 實(shí)際上,程序員可以使用兩類 api:一套是直接映射到內(nèi)核調(diào)用的原始函數(shù),包 含在 packet.dll 的調(diào)用中;另一套是 wpcap.dll 提供的高層函數(shù),這些函數(shù)提供了 更加友好、功能更加強(qiáng)大的調(diào)用,用戶也更容易掌握。一般 wpcap.dll 能自動(dòng)調(diào)用 packet.dll。往往一個(gè)“高層“

51、調(diào)用會(huì)被譯成幾個(gè) npf 系統(tǒng)調(diào)用。程序員一般使用 wpcap.dll,只有在為數(shù)不多的程序中才直接使用 packet.dll。 3.2.3 windows 下 bpf 與 ndis 依賴關(guān)系 win32 網(wǎng)絡(luò)結(jié)構(gòu)是基于 ndis 的。如前所述,捕獲包進(jìn)程的核心必須在內(nèi)核中運(yùn) 行,它必須能在協(xié)議棧處理這些包前獲取這些包。 bsd 在所有協(xié)議之前執(zhí)行了捕獲 包系統(tǒng):bpf 通過(guò)網(wǎng)卡驅(qū)動(dòng)直接被調(diào)用,并且它需要 nic 設(shè)備驅(qū)動(dòng)適應(yīng)一些稱為 “bpf 驅(qū)動(dòng)規(guī)范”的程序。換句話說(shuō),它需要設(shè)備驅(qū)動(dòng)明確的調(diào)用 bpf 網(wǎng)絡(luò)捕獲函 數(shù),這個(gè)函數(shù)控制所有由網(wǎng)絡(luò)接口接收發(fā)送的數(shù)據(jù)包,并復(fù)制一個(gè)滿足過(guò)濾器的數(shù) 據(jù)

52、包。當(dāng)創(chuàng)建一個(gè) winpcap 捕獲包的程序,這種解決方案是完全不可能的實(shí)現(xiàn),這 是因?yàn)?windows 沒(méi)有與 bpf 驅(qū)動(dòng)規(guī)范相似的接口,而且 windows 也不允許對(duì)操作系 統(tǒng)和 nic 進(jìn)行修改。所以,winpcap 將網(wǎng)絡(luò)數(shù)據(jù)捕獲設(shè)置為 ndis 結(jié)構(gòu)上的協(xié)議驅(qū)動(dòng)。 因?yàn)?ndis 沒(méi)有將 npf 與底層完全隔離,所以它不自動(dòng)支持不同類型媒體。因此必須 要?jiǎng)?chuàng)建這種方法來(lái)支持各種媒體。 3.3 winpcap 數(shù)據(jù)結(jié)構(gòu)和主要功能函數(shù) 3.3.1 winpcap 的數(shù)據(jù)結(jié)構(gòu)及自定義類型 由于 winpcap 的設(shè)計(jì)是基于 libpcap 的,所以它使用了與 libpcap 相同的數(shù)據(jù)

53、結(jié)構(gòu),這里介紹幾個(gè) winpcap 核心的數(shù)據(jù)結(jié)構(gòu)。 (l)網(wǎng)絡(luò)接口的地址 struct pcap_addr struct pacp_addr *next; /*指向下一個(gè)地址節(jié)點(diǎn)*/ struct sockaddr *addr; /*網(wǎng)絡(luò)接口地址*/ struct sockaddr *netmask; /*掩碼*/ struct sockaddr *broadaddr; /*廣播地址*/ struct sockaddr *dstaddr; /*目標(biāo)地址*/ (2)winpcap 存儲(chǔ)文件類型 struct pcap_file_header bpf_u_int32 magic; /*文件類型*

54、/ u_short version_major; /*主版本號(hào)*/ u_short version_minor; /*次版本號(hào)*/ bpf_int32 thiszone; /*區(qū)域時(shí)間*/ bpf_int32 sigfigs; /*時(shí)間截*/ bpf_int32 snaplen; /*捕獲長(zhǎng)度*/ bpf_int32 linktype; /*鏈路層類型*/ (3)網(wǎng)絡(luò)接口鏈表中的一個(gè)結(jié)點(diǎn) struct pcap_if struct pacp_if *next; /*下一個(gè)網(wǎng)絡(luò)接口節(jié)點(diǎn)*/ char *name; /*網(wǎng)絡(luò)接口名稱*/ char *description; /*描述信息*/ st

55、ruct pcap_addr *address; /*網(wǎng)絡(luò)接口地址*/ bpf_u_int32 flags; /*標(biāo)記*/ (4)捕獲的數(shù)據(jù)包基本信息 struct pcap_pkthdr struct timevalts; /*時(shí)間截*/ bpf_u_int32 caplen; /*捕獲長(zhǎng)度*/ bpf_u_int32 len; /*數(shù)據(jù)包長(zhǎng)度*/ (5)winpcap 的狀態(tài)信息 struct pcap_stat u_int ps_recv; /*捕獲到的數(shù)據(jù)包的個(gè)數(shù)*/ u_int ps_drop; /*丟失的數(shù)據(jù)包的個(gè)數(shù)*/ u_int ps_ifdrop; /*未用*/ #ifdef

56、 win32 u_int ba_capt; /*數(shù)據(jù)包到達(dá)應(yīng)用層的個(gè)數(shù)*/ #endif (6)自定義類型 typedef int bpf_int32 /*32 位整數(shù)*/ typedef u_int bpf_u_int32 /*32 位無(wú)符號(hào)數(shù)*/ typedef pcap pcap_t /*一個(gè)已打開的捕捉實(shí)例的描述符*/ typedef pcap_if pcap_if_t /*接口列表的一項(xiàng)*/ typedef pcap_addr pcap_addr_t /*表示一個(gè)接口地址*/ 3.3.2 winpcap 主要函數(shù) 1)winpcap 的主要函數(shù): (1)int pcap_findal

57、ldevs(); 構(gòu)造一個(gè)可打開的網(wǎng)絡(luò)設(shè)備列表 (2)int pcap_freealldevs(); 釋放一個(gè)借口列表 (3)pcap_t* pcap_open_live(); 用于打開一個(gè)網(wǎng)絡(luò)接口進(jìn)行數(shù)據(jù)包捕獲 (4)u_char * pcap_next(); 返回下一個(gè)可用的數(shù)據(jù)包 (5)char* pcap_lookupdev(); 功能是獲得本機(jī)的網(wǎng)絡(luò)接口 (6)int pcap_lookupnet(); 功能是獲取的網(wǎng)絡(luò)地址和掩碼 (7)int pcap_dispatch()或 int pcap_loop(); 功能是(循環(huán))獲取網(wǎng)絡(luò)數(shù)據(jù) 包 (8)void pcap_dump();

58、 用于將包內(nèi)容輸出到由 pcap_dump_open()打開的 文件中 (9)int pcap_datalink(); 功能是獲取數(shù)據(jù)鏈路層類型,如 10m 以太網(wǎng)、 slip、ppp、fddi、atm、ieee802.3 等 (10)void pcap_close(); 功能是關(guān)閉 winpcap 關(guān)聯(lián)文件操作并回收資源 4 軟件系統(tǒng)實(shí)現(xiàn)過(guò)程 4.1 系統(tǒng)流程圖 一個(gè)較為完整的基于 winpcap 的網(wǎng)絡(luò)數(shù)據(jù)包捕獲程序包括內(nèi)核部分和用戶分析 部分,其中內(nèi)核部分負(fù)責(zé)從網(wǎng)絡(luò)中捕獲和過(guò)濾數(shù)據(jù);用戶分析部分負(fù)責(zé)界面、數(shù)據(jù)轉(zhuǎn) 化與處理、格式化、協(xié)議分析等。 編程思想和流程圖如圖 1 所示。 打開網(wǎng)絡(luò)設(shè)

59、備 pcap_open_live() 指定要監(jiān)視 的網(wǎng)絡(luò)設(shè)備 捕獲并處理 while (pcap_next() 釋放列表 pcap_freealldevs() 無(wú)指定設(shè)備 開始 結(jié)束 n y 獲得設(shè)備列表 pcap_findalldevs() 圖 1 系統(tǒng)流程圖 4.2 winpcap 的安裝和環(huán)境搭建 (1)下載 winpcap 及開發(fā)包 winpcap 下載地址: /install/default.htm winpcap 開發(fā)包: /devel.htm (2)安裝 winpcap (3)解壓 wpdpack

60、 開發(fā)包,將得到一個(gè) wpdpack 目錄,該目錄中包含了 5 個(gè)子目 錄:docs、examples-pcap、examples-remote、include 和 lib。 docs 中是 winpcap 的幫助文檔,比較通俗易懂 examples 的是一些例子 include 和 lib 則分別為 c+項(xiàng)目的頭文件和鏈接庫(kù) (4)配置 1)包含文件(include)、庫(kù)文件(lib)目錄路徑設(shè)置 tools-options-directories,在show directories for:中選擇 include files,單擊下面的new圖標(biāo),單擊編輯框右側(cè)進(jìn)行瀏覽,選擇 winpca

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論