數(shù)據(jù)包包頭協(xié)議解析器——畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  北京信息科技大學(xué)</b></p><p><b>  畢業(yè)設(shè)計(jì)(論文)</b></p><p>  題 目: 數(shù)據(jù)包包頭協(xié)議解析器 </p><p>  學(xué) 院: 信息與通信工程學(xué)院 </p>

2、<p>  專 業(yè): 電子信息工程 </p><p>  學(xué)生姓名: 班級(jí)/學(xué)號(hào) </p><p>  指導(dǎo)老師/督導(dǎo)老師: </p><p>  起止時(shí)間:

3、 </p><p><b>  摘 要</b></p><p>  從網(wǎng)絡(luò)中獲取正在傳輸?shù)臄?shù)據(jù)流,對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行捕捉和分析,這一類技術(shù)幾乎是現(xiàn)有階段網(wǎng)絡(luò)安全技術(shù)的實(shí)現(xiàn)基礎(chǔ),同時(shí)能夠有效預(yù)防網(wǎng)絡(luò)入侵危害,實(shí)施網(wǎng)絡(luò)入侵檢測(cè);現(xiàn)有的網(wǎng)絡(luò)分析軟件也是基于從網(wǎng)絡(luò)中抓取數(shù)據(jù)包進(jìn)行解析這一基礎(chǔ)而設(shè)計(jì)的。我們現(xiàn)有的技術(shù),例

4、如入侵監(jiān)測(cè)、防火墻、網(wǎng)絡(luò)安全掃描、包頭協(xié)議分析等這一系列的功能實(shí)現(xiàn)都是以對(duì)數(shù)據(jù)包的捕獲與分析為前提的,那么我們通過深入的分析所捕獲到的數(shù)據(jù)包,從而可以測(cè)算出當(dāng)前網(wǎng)絡(luò)中的流量情況,觀察和研究目標(biāo)網(wǎng)絡(luò)的狀態(tài)以及在當(dāng)前網(wǎng)絡(luò)上傳輸著什么樣信息等,從而我們可以分析當(dāng)前的網(wǎng)絡(luò)性能怎么樣、排除網(wǎng)絡(luò)中存在著的故障的阻礙因素又是什么。所以,研究對(duì)于網(wǎng)絡(luò)中的數(shù)據(jù)包進(jìn)行捕獲與分析的技術(shù)對(duì)于保障網(wǎng)絡(luò)安全來說是非常重要的,也是有意義的一項(xiàng)工作。</p>

5、;<p>  在本次的畢設(shè)項(xiàng)目中,將依托一系列的開發(fā)環(huán)境和開發(fā)工具,設(shè)計(jì)并制作完成一個(gè)基于網(wǎng)卡的數(shù)據(jù)包包頭協(xié)議解析軟件,軟件將實(shí)現(xiàn)對(duì)流經(jīng)網(wǎng)卡的數(shù)據(jù)包進(jìn)行捕獲和分析,并能夠?qū)λ东@和分析后的數(shù)據(jù)進(jìn)行導(dǎo)出保存,以便后續(xù)由專業(yè)人士對(duì)當(dāng)前的網(wǎng)絡(luò)狀態(tài)進(jìn)行研究判定,從而實(shí)現(xiàn)我們對(duì)當(dāng)前的網(wǎng)絡(luò)狀態(tài)進(jìn)行監(jiān)控的目的,進(jìn)而保證我們的網(wǎng)絡(luò)安全、無危害。</p><p>  關(guān)鍵詞:數(shù)據(jù)包捕獲,包頭協(xié)議解析,網(wǎng)絡(luò)安全,Win

6、pCap</p><p><b>  Abstract</b></p><p>  From the network to obtain the data stream being transmitted, the network packet capture and analysis, this type of technology is almost the ex

7、isting stage of network security technology to achieve the basis of the same time to effectively prevent network intrusion hazards, the implementation of network intrusion detection; existing Of the network analysis soft

8、ware is based on the data packet from the network to analyze the basis of this design. We have some of the existing technology intrusion </p><p>  In this project, will rely on a series of development enviro

9、nment and development tools, design and production of a network card based packet header protocol analysis software, the software will be carried out through the network card to capture and analyze the data packets, and

10、Can capture and analyze the data after the export and preservation, so that the follow-up by the professionals on the current state of the network to determine the study, in order to achieve our current state of the netw

11、</p><p>  Keywords: Network packet capture, The packet analysis, Network security,Winpcap</p><p><b>  目錄</b></p><p><b>  摘 要II</b></p><p>  Ab

12、stractIII</p><p><b>  第一章 概述1</b></p><p>  1.1 數(shù)據(jù)包解析技術(shù)1</p><p>  1.2 基于WinPcap實(shí)現(xiàn)數(shù)據(jù)包解析2</p><p>  1.2.1 Winpcap2</p><p>  1.2.2 Winpcap 捕獲和

13、解析數(shù)據(jù)包3</p><p><b>  1.3 小結(jié)4</b></p><p>  2.1 功能需求5</p><p>  2.2 性能需求5</p><p>  2.3 可行性分析6</p><p>  2.3.1 經(jīng)濟(jì)可行性6</p><p>  2.3.

14、2 技術(shù)可行性6</p><p>  2.4 本章小結(jié)6</p><p>  第三章 系統(tǒng)設(shè)計(jì)7</p><p>  3.1 設(shè)計(jì)原則7</p><p>  3.2 總體架構(gòu)7</p><p>  3.3 系統(tǒng)主流程7</p><p>  3.3.1 數(shù)據(jù)包捕獲模塊8</p

15、><p>  3.3.2 數(shù)據(jù)包解析模塊9</p><p><b>  3.4 小結(jié)9</b></p><p>  第四章 系統(tǒng)實(shí)現(xiàn)10</p><p>  4.1 驅(qū)動(dòng)獲取10</p><p>  4.2 捕獲數(shù)據(jù)初始化11</p><p>  4.3 數(shù)據(jù)包與

16、解析捕獲13</p><p>  4.4 數(shù)據(jù)包保存與讀取18</p><p>  4.5 數(shù)據(jù)包流量分析19</p><p><b>  4.6 小結(jié)20</b></p><p>  第五章 系統(tǒng)效果21</p><p>  5.1 系統(tǒng)功能截圖21</p><

17、p>  5.1.1 系統(tǒng)主頁(yè)面21</p><p>  5.1.2 選擇網(wǎng)卡21</p><p>  5.1.3 數(shù)據(jù)包過濾21</p><p>  5.1.4 數(shù)據(jù)包捕獲和解析22</p><p><b>  5.2 小結(jié)22</b></p><p>  第六章 總結(jié)與展望2

18、3</p><p><b>  6.1 總結(jié)23</b></p><p><b>  6.2展望23</b></p><p><b>  結(jié)束語24</b></p><p><b>  第一章 概述</b></p><p>

19、  互聯(lián)網(wǎng)已經(jīng)逐漸取代了以往的信息傳送方式,人類文明數(shù)千年來的傳承與不斷迸發(fā)出的新思想、新知識(shí),在互聯(lián)網(wǎng)上我們可以一目了然,互聯(lián)網(wǎng)儼然成為了人類的第二世界,那么與此同時(shí),我們的這個(gè)“第二世界”的安全性和可靠性就顯得越發(fā)的重要。因此,社會(huì)對(duì)能夠分析、診斷網(wǎng)絡(luò),測(cè)試網(wǎng)絡(luò)性能與安全的工具軟件的需求也越來越迫切,這就為基于Winpcap的網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和解析的產(chǎn)生和發(fā)展提供了良好的條件。其可以開發(fā)一套基于網(wǎng)絡(luò)數(shù)據(jù)包的捕獲與解析的數(shù)據(jù)包解析器

20、。那么,對(duì)我們所使用的網(wǎng)絡(luò)中“流動(dòng)”的數(shù)據(jù)包進(jìn)行捕捉獲取并進(jìn)行進(jìn)一步的深層系的分析,這是有效預(yù)防網(wǎng)絡(luò)威脅侵入的核心措施,那么同時(shí)也是設(shè)計(jì)和實(shí)現(xiàn)網(wǎng)絡(luò)分析軟件的必要基礎(chǔ),我們現(xiàn)有的一些網(wǎng)絡(luò)技術(shù),像防火墻、入侵監(jiān)測(cè)、安全掃描、協(xié)議分析等一系列功能的實(shí)現(xiàn),全部都是通過監(jiān)測(cè)網(wǎng)絡(luò)流量、數(shù)據(jù)包,對(duì)其進(jìn)行捕獲,通過進(jìn)一步的深入分析,從數(shù)據(jù)層面上解析所捕獲到的數(shù)據(jù)包,我們可以得到當(dāng)前網(wǎng)絡(luò)中的數(shù)據(jù)信息,觀察網(wǎng)絡(luò)運(yùn)行狀態(tài)等信息,來分析是否有具有威脅的攻擊行為

21、、了解當(dāng)前的網(wǎng)絡(luò)的性能以及排除網(wǎng)絡(luò)中存在故障問題。通過本次的畢業(yè)設(shè)計(jì),搭建設(shè)計(jì)所需的開發(fā)環(huán)境,學(xué)習(xí)和制作數(shù)據(jù)包解析器,對(duì)數(shù)據(jù)</p><p>  1.1 數(shù)據(jù)包解析技術(shù)</p><p>  隨著計(jì)算機(jī)技術(shù)的一個(gè)不斷的發(fā)展,在量子計(jì)算機(jī)、生物計(jì)算機(jī)等超前應(yīng)用還處于研究之中,而沒有商業(yè)化的時(shí)代,二進(jìn)制的比特流依然是我們當(dāng)前社會(huì)進(jìn)行信息存儲(chǔ)以及傳遞的基礎(chǔ),并且,伴隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,我們可以看

22、到“萬物聯(lián)于一網(wǎng)”的時(shí)代即將到來,這將極大的豐富人們的生活方式,甚至錢幣都將去實(shí)物化,化為一個(gè)個(gè)“0”和“1”,我們可以從比特幣中窺探到未來貨幣的影子。但是與此伴隨的,是日益多發(fā)的網(wǎng)絡(luò)安全問題,正如當(dāng)前的“Wanacry”,基于windows的漏洞對(duì)整個(gè)互聯(lián)網(wǎng)體系造成了沉重的打擊,無論是大到政府機(jī)構(gòu)、國(guó)營(yíng)企業(yè),還是windows個(gè)人用戶,通過蠕蟲病毒完成快速傳播,加密用戶文件資料,以此勒索比特幣實(shí)現(xiàn)其利益需求,對(duì)于公共服務(wù)行業(yè)造成了極大

23、的影響。因此,對(duì)于信息安全的防護(hù)越來越受到重視。良好的網(wǎng)絡(luò)環(huán)境是一個(gè)公司,一個(gè)企業(yè),乃至一個(gè)政府部門正常開展工作的基礎(chǔ),而良好的網(wǎng)絡(luò)環(huán)境必定包括通暢的網(wǎng)路信號(hào)傳輸,完善的網(wǎng)絡(luò)安全機(jī)制兩方面,這個(gè)項(xiàng)目正是在這個(gè)基礎(chǔ)上建立的。該項(xiàng)目將完成一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和解析的工具的制作,這款軟件將實(shí)現(xiàn)一系列功能如對(duì)網(wǎng)絡(luò)進(jìn)行必要的分析以便為網(wǎng)絡(luò)管理提供客觀有效的參數(shù),與此</p><p>  1.2 基于WinPcap實(shí)現(xiàn)數(shù)據(jù)包

24、解析</p><p>  1.2.1 Winpcap</p><p>  Windows平臺(tái)下內(nèi)核本身沒有提供直接訪問數(shù)據(jù)包的標(biāo)準(zhǔn)API接口,需要通過增加一個(gè)驅(qū)動(dòng)程序或者網(wǎng)絡(luò)組件來訪問內(nèi)核網(wǎng)卡驅(qū)動(dòng)提供的數(shù)據(jù)包。Winpcap所采用的是Windows平臺(tái)系統(tǒng)下的一種對(duì)數(shù)據(jù)包進(jìn)行捕獲分析方法,它相當(dāng)于是一個(gè)函數(shù)庫(kù)、一個(gè)應(yīng)用于Windows操作系統(tǒng)的免費(fèi)而又公開的可以直接的用于訪問互聯(lián)網(wǎng)絡(luò)的開發(fā)

25、者工具包,它是Linu/Unixx系統(tǒng)中的Libpcap的Windows移植版,從設(shè)計(jì)到實(shí)現(xiàn)完全兼容Libpcap,使得原來許多Linux/Unix平臺(tái)下的網(wǎng)絡(luò)分析工具能被快速移植到Windows中。此外,Winpcap不僅可以與Libpcap進(jìn)行兼容,它還根據(jù)Window系統(tǒng)的特點(diǎn),針對(duì)Windows做出了性能上的優(yōu)化和效率上的提升,其包括了對(duì)于BPF-位于內(nèi)核層次的過濾器的支持以及位于內(nèi)核的統(tǒng)計(jì)模式上的支持等等。目前,Windows

26、平臺(tái)上的用作網(wǎng)絡(luò)數(shù)據(jù)包捕獲和解析的軟件有很多,但是Winpcap絕對(duì)是Windows平臺(tái)上我們所首選的。</p><p>  由當(dāng)前的技術(shù)發(fā)展現(xiàn)狀來看,絕大多數(shù)在Windows平臺(tái)上運(yùn)行的關(guān)于的網(wǎng)絡(luò)方面的應(yīng)用基本上都是通過“Winsock API – Windows套接口”這一類高級(jí)的編程接口來實(shí)現(xiàn)訪問網(wǎng)絡(luò)的,通過套接口訪問網(wǎng)絡(luò)數(shù)據(jù)的這種方法允許數(shù)據(jù)通過一定的條件在網(wǎng)絡(luò)中實(shí)現(xiàn)一些較為簡(jiǎn)單的傳遞,這是因?yàn)閃indo

27、ws操作系統(tǒng)中的TCP/IP協(xié)議棧能夠使軟件能夠自主處理流程的底層細(xì)節(jié)(例如協(xié)議操作、流程重組等這一些),并且提供給了系統(tǒng)一個(gè)函數(shù)接口,這個(gè)函數(shù)接口能夠用來讀寫目標(biāo)文件。然則,在一些情況下,這種“簡(jiǎn)便的方法”實(shí)際上并不能滿足我們現(xiàn)實(shí)中的一些需求,有那么一些的程序想要繞過TCP/IP協(xié)議棧,目的是直接處理位于網(wǎng)絡(luò)底層中的數(shù)據(jù)信息,這些程序需要直接訪問位于網(wǎng)絡(luò)的底層數(shù)據(jù),也就是說沒有與協(xié)議棧(TCP/IP協(xié)議棧)相似的實(shí)體介入時(shí),程序還能夠

28、對(duì)網(wǎng)絡(luò)進(jìn)行原始的訪問。那么,我們采用“Winsock API”進(jìn)行網(wǎng)絡(luò)編程,使應(yīng)用程序是能夠通過調(diào)用Windows系統(tǒng)提供的接口以訪問TCP/IP協(xié)議棧從而實(shí)現(xiàn)在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)通信。通過使用Winpcap工具進(jìn)行編程,應(yīng)用程序繞開Windows操作系統(tǒng)的TCP/IP協(xié)議</p><p>  Winpcap 主要提供了以下四個(gè)功能:</p><p> ?。?)捕獲流經(jīng)網(wǎng)卡的數(shù)據(jù)包,不管這個(gè)數(shù)

29、據(jù)包時(shí)發(fā)送往其他主機(jī)上的,還是處于共享媒介上的,都能夠捕捉到;</p><p> ?。?)可以定義捕獲規(guī)則,抓取用戶想要的數(shù)據(jù)包類型,捕獲目標(biāo)數(shù)據(jù)包;</p><p> ?。?)能夠?qū)⒃紨?shù)據(jù)從自己的主機(jī)上從網(wǎng)絡(luò)中發(fā)送出去;</p><p> ?。?)可以統(tǒng)計(jì)網(wǎng)絡(luò)中的流量信息。</p><p>  Winpcap提供的這些功能,要依靠安裝在W

30、in32內(nèi)核的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序和一些動(dòng)態(tài)鏈接庫(kù)才能夠最終實(shí)現(xiàn)。盡管Winpcap有許多功的能,但是其實(shí)Winpcap也有其應(yīng)用的局限性:比如Winpcap不能進(jìn)行過濾、阻止或者是操縱其他應(yīng)用程序在同一主機(jī)內(nèi)進(jìn)行通信,只能夠簡(jiǎn)單地“監(jiān)聽”數(shù)據(jù)包的網(wǎng)絡(luò)傳輸過程。因此,Winpcap不能提供網(wǎng)絡(luò)控制功能的服務(wù),例如流量控制、個(gè)人防火墻和服務(wù)質(zhì)量調(diào)度一類的支持。</p><p>  圖1.2.1 Winpcap成員調(diào)用

31、關(guān)系</p><p>  Winpcap 由兩個(gè)不同層次的 API 組成:一個(gè)是位于應(yīng)用層底層的低級(jí)動(dòng)態(tài)鏈接庫(kù)Packet.dll 和位于應(yīng)用層高層不依賴于系統(tǒng)的高層靜態(tài)庫(kù) Wpcap.dll ,以及驅(qū)動(dòng)層的虛擬設(shè)備驅(qū)動(dòng)程序 NPF drivice driver(Netgroup Packet Filter)。它們之間的調(diào)用關(guān)系如圖2.2所示,應(yīng)用程序既可以調(diào)用應(yīng)用層底層的API packet.dll實(shí)現(xiàn)一些更底

32、層的操作,也可以調(diào)用應(yīng)用層高層的API wpcap.dll來簡(jiǎn)化程序開發(fā)。</p><p>  NPF(全拼:Netgroup Packet Filter),它是位于驅(qū)動(dòng)層的一個(gè)虛擬設(shè)備驅(qū)動(dòng)程序,同時(shí)它也是Winpcap 最為核心的部分,NPF負(fù)責(zé)從網(wǎng)卡驅(qū)動(dòng)中捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包,然后將捕獲到的數(shù)據(jù)包轉(zhuǎn)發(fā)給過濾器模塊進(jìn)行規(guī)則過濾,再下一步可以選擇將過濾后的數(shù)據(jù)包發(fā)送到統(tǒng)計(jì)模塊而后做數(shù)據(jù)分析,也可以發(fā)送到轉(zhuǎn)存器,將捕

33、獲到的數(shù)據(jù)包存儲(chǔ)到磁盤中。</p><p>  Packet.dll是用戶級(jí)的低級(jí)包過濾動(dòng)態(tài)鏈接庫(kù),通過它可以直接映射到Windows系統(tǒng)內(nèi)核的調(diào)用,使應(yīng)用程序可以運(yùn)行在不同的Windows系統(tǒng)上,也可以直接訪問NPF驅(qū)動(dòng)程序的API,從而選擇接收或是發(fā)送數(shù)據(jù)包。</p><p>  Wpcap.dll是一個(gè)高級(jí)的、獨(dú)立于系統(tǒng)的動(dòng)態(tài)庫(kù),與 Packet.dell 相同,并使用低層級(jí)的 Pa

34、cket.dll 所提供的一些服務(wù),為應(yīng)用程序功能提供更復(fù)雜的監(jiān)聽界面和更豐富的功能調(diào)用。</p><p>  1.2.2 Winpcap 捕獲和解析數(shù)據(jù)包</p><p>  通過WinPcap,我們能夠訪問到存在于網(wǎng)絡(luò)中的原始數(shù)據(jù)包,原始數(shù)據(jù)包即為那些沒有被操作系統(tǒng)利用網(wǎng)絡(luò)協(xié)議處理過的數(shù)據(jù),所捕獲到的每一個(gè)數(shù)據(jù)包都是數(shù)據(jù)鏈路層中的一幀。在計(jì)算機(jī)領(lǐng)域中,應(yīng)用范圍最廣的以太網(wǎng)幀協(xié)議有兩種:

35、分別是 DIXv2 標(biāo)準(zhǔn)(即以太網(wǎng) V2 標(biāo)準(zhǔn))和 IEEE 802.3 標(biāo)準(zhǔn),那么現(xiàn)在世界上使用的最多的以太網(wǎng)幀協(xié)議為以太網(wǎng) V2 的 標(biāo)準(zhǔn)的MAC幀格式。DIXv2 標(biāo)準(zhǔn)由以下 5 個(gè)字段組成:長(zhǎng)度為 6 Byte 的目的地址、長(zhǎng)度為 6 Byte 的源地址、長(zhǎng)度是 2 Byte的類型字段(類型字段的作用是用來標(biāo)識(shí)位于上一層協(xié)議的協(xié)議類型,舉個(gè)例子:0x8035 表示的是上層的協(xié)議為 RARP協(xié)議、長(zhǎng) 46 —1500 Byte 長(zhǎng)

36、度不等的 IP 數(shù)據(jù)報(bào)(IP Datagram),以及還有長(zhǎng)為 4 Byte 的幀檢驗(yàn)序列(FCS,frame check sequence)。通過分析每一個(gè)數(shù)據(jù)包,也即每一幀,我們可以解析出該數(shù)據(jù)包的源 MAC 地址和目的 MAC 地址,對(duì)于IP數(shù)據(jù)報(bào)也可以得到它的完整內(nèi)容。。</p><p>  如圖1.2.2,這是一個(gè)IP 數(shù)據(jù)報(bào)。第4位至7位是 IP 的首部長(zhǎng)度,該字段的作用是用來精準(zhǔn)定位網(wǎng)絡(luò)層的上層協(xié)議

37、即傳輸層的起始位置來的(例如:上層協(xié)議是TCP);第 10 字節(jié)是協(xié)議字段,通過對(duì)該字段的分析,可以得出這個(gè)IP數(shù)據(jù)報(bào)攜帶了哪種協(xié)議,它所實(shí)現(xiàn)的功能是什么,常用的協(xié)議字段如圖1.2.3 所示;第 13字節(jié)至第16字節(jié)是32位源始地址,第17位至20字節(jié)是32位目的地址,這兩個(gè)字段分別標(biāo)注了這個(gè)數(shù)據(jù)包從哪里發(fā)送、又發(fā)送到了哪里,可以解析出該數(shù)據(jù)報(bào)的源 IP 地址和目的 IP 地址,我們可以很清晰的判定數(shù)據(jù)包的流向。</p>

38、<p>  圖1.2.2 IP數(shù)據(jù)報(bào)結(jié)構(gòu)</p><p>  圖1.2.3 常用的協(xié)議字段 </p><p><b>  1.3 小結(jié)</b></p><p>  在本章節(jié)中,介紹了數(shù)據(jù)包解析技術(shù)(又稱嗅探技術(shù))存在的背景,分析了數(shù)據(jù)包解析技術(shù)對(duì)于網(wǎng)絡(luò)安全的重要性。同時(shí)簡(jiǎn)明的介紹了Winpcap的功能和結(jié)構(gòu),通過一個(gè) IP 數(shù)據(jù)報(bào)

39、分析了接下來的實(shí)施方法。</p><p><b>  第二章 需求分析</b></p><p>  需求分析在系統(tǒng)的整個(gè)開發(fā)中起著很重要的作用,只要正確、完善地做出需求分析,才能夠減少后期的修改,不僅僅減少開發(fā)的時(shí)間和成本,也能影響到開發(fā)出的系統(tǒng)是否能夠正常地投入到實(shí)際的應(yīng)用中。本系統(tǒng)基于MFC的程序框架,在windows系統(tǒng)上,采用 Microsoft Visua

40、l Studio 2010 開發(fā)出一套基于 Winpcap 的數(shù)據(jù)包包頭協(xié)議解析器,并結(jié)合項(xiàng)目實(shí)際,結(jié)果現(xiàn)實(shí)需求進(jìn)行分析在描述具體的需求之前,軟件需要具備以下基本原則:</p><p> ?。?)系統(tǒng)需要規(guī)范化、自動(dòng)化。系統(tǒng)能夠在用戶輸入完基本的信息以及相關(guān)的信息后,能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)的歸檔類存儲(chǔ),在用戶需要這些處理后的數(shù)據(jù)時(shí),能夠清晰明了地展現(xiàn)出來。</p><p> ?。?)以實(shí)用性為開發(fā)

41、目的。圍繞捕獲數(shù)據(jù)包和解析數(shù)據(jù)包進(jìn)行開發(fā),以系統(tǒng)的高速性和穩(wěn)定性為核心,兼顧應(yīng)用功能的豐富性。</p><p> ?。?)簡(jiǎn)單易操作為開發(fā)目標(biāo)。任何一個(gè)系統(tǒng),不能開發(fā)的過于復(fù)雜或者重要常用的功能操作繁瑣。而應(yīng)該是簡(jiǎn)單易懂的方式呈現(xiàn)在用戶面前,并且系統(tǒng)應(yīng)該遵循當(dāng)前主流軟件的界面設(shè)計(jì),這樣能方便第一次接觸的用戶從別的軟件快速聯(lián)想到當(dāng)前軟件的使用方式,進(jìn)一步方便用戶的使用。</p><p>  

42、下面,就從系統(tǒng)的需求分析開始,分析其功能需求,準(zhǔn)確定位在后續(xù)的工作中需要實(shí)現(xiàn)的功能。</p><p><b>  2.1 功能需求</b></p><p>  系統(tǒng)實(shí)現(xiàn)了對(duì)流經(jīng)網(wǎng)卡中的數(shù)據(jù)流進(jìn)行捕獲分析,完成數(shù)據(jù)包捕獲、頭部協(xié)議解析和后續(xù)的數(shù)據(jù)存儲(chǔ)的功能。因此,該系統(tǒng)的功能應(yīng)有以下幾點(diǎn):</p><p> ?。?)我們需要對(duì)從網(wǎng)卡中捕獲到的數(shù)據(jù)

43、包的包頭協(xié)議進(jìn)行解析,進(jìn)而提取協(xié)議信息中的關(guān)鍵字段,它們包括源MAC 地址、目的MAC地址、以太網(wǎng)類型、源IP地址、目的IP地址、源端口號(hào)、目的端口號(hào)、協(xié)議類型以及數(shù)據(jù)負(fù)載長(zhǎng)度等,然后再顯示到軟件界面上;</p><p> ?。?)用戶能夠自定義數(shù)據(jù)包的過濾規(guī)則,使數(shù)據(jù)包的捕獲更具精準(zhǔn)性和靈活性,增強(qiáng)了軟件功能以及與用戶的交互能力;</p><p> ?。?)程序帶有導(dǎo)出功能,使解析的數(shù)據(jù)

44、包信息以一定格式導(dǎo)出到指定文件夾,以便后續(xù)能夠進(jìn)行分析研究;</p><p> ?。?)要求程序界面簡(jiǎn)潔友好,大部分只需要鼠標(biāo)點(diǎn)擊就可以完成各個(gè)功能,操作簡(jiǎn)單、方便。</p><p><b>  2.2 性能需求</b></p><p>  系統(tǒng)首先應(yīng)能夠保證穩(wěn)定運(yùn)行,在解析速率上要接近100Mbps的任務(wù)要求,要保證解析結(jié)果的正確性,軟件的交

45、互界面要簡(jiǎn)潔、明了、友好。其中,系統(tǒng)對(duì)數(shù)據(jù)包捕獲解析處理的準(zhǔn)確度和時(shí)效性是兩個(gè)系統(tǒng)的必備性能,也是重中之重,因?yàn)樽鳛橐粋€(gè)實(shí)時(shí)處理數(shù)據(jù)信息的系統(tǒng),它的數(shù)據(jù)準(zhǔn)確性以及時(shí)效性顯得尤為關(guān)鍵。</p><p>  那么,綜上所述,系統(tǒng)的功能需求如一下四點(diǎn):</p><p> ?。?)運(yùn)行速度:保證系統(tǒng)的運(yùn)行速度快、響應(yīng)時(shí)間短、處理時(shí)間快、更新周期短,應(yīng)該能滿足用戶的需求。</p>&l

46、t;p> ?。?)精度需求:保證系統(tǒng)的運(yùn)算精度。根據(jù)使用需要,在各項(xiàng)數(shù)據(jù)的捕獲、解析過程中,要保證數(shù)據(jù)的正確性且能滿足數(shù)據(jù)包的快速解析。</p><p> ?。?)故障處理需求:能夠兼容可能出現(xiàn)的數(shù)據(jù)包異常情況,能夠?qū)Πl(fā)生的異常進(jìn)行提示與容錯(cuò)處理。</p><p> ?。?)界面友好性:要有用戶需求特點(diǎn)的智能化美觀的界面,以便用戶使用上的方便。 </p><p&g

47、t;<b>  2.3 可行性分析</b></p><p>  2.3.1 經(jīng)濟(jì)可行性</p><p>  本次畢設(shè)的工作是基于Winpcap這一網(wǎng)絡(luò)數(shù)據(jù)包捕獲與解析的開發(fā)工具,通過對(duì)網(wǎng)卡上流經(jīng)的數(shù)據(jù)包進(jìn)行捕獲和解析,以實(shí)現(xiàn)對(duì)當(dāng)前網(wǎng)絡(luò)的監(jiān)控,這將是為后期網(wǎng)絡(luò)數(shù)據(jù)的監(jiān)控提供一定的指導(dǎo)價(jià)值,然而,開發(fā)卻不需要過多的開發(fā)成本,所以經(jīng)濟(jì)上對(duì)于開發(fā)該系統(tǒng)是可行的。</p&

48、gt;<p>  2.3.2 技術(shù)可行性</p><p>  該系統(tǒng)將基于WinpCap對(duì)數(shù)據(jù)包進(jìn)行捕獲解析,當(dāng)前已經(jīng)有很多參考的例子進(jìn)行學(xué)習(xí)和研究。并且,該系統(tǒng)在算法邏輯上,并沒有很復(fù)雜的處理,主要是功能和對(duì)業(yè)務(wù)邏輯的處理。所以,在開發(fā)過程中不僅僅可以借鑒程序的開發(fā)例子,也可以在遇到問題的時(shí)候,找到相應(yīng)的解決辦法,所以,從技術(shù)的可行性來說,實(shí)現(xiàn)一個(gè)這樣的系統(tǒng)是可行的。</p><

49、;p><b>  2.4 本章小結(jié)</b></p><p>  在本章中,我們對(duì)需要設(shè)計(jì)的系統(tǒng)做了需求分析,并從經(jīng)濟(jì)可行性和技術(shù)可行性兩點(diǎn)做了可行性分析,這為后面章節(jié)中該系統(tǒng)的詳細(xì)設(shè)計(jì)奠定基礎(chǔ),并且詳細(xì)的需求分析可以為系統(tǒng)的具體實(shí)現(xiàn)提供準(zhǔn)確的依據(jù)。</p><p><b>  第三章 系統(tǒng)設(shè)計(jì)</b></p><p&g

50、t;<b>  3.1 設(shè)計(jì)原則</b></p><p> ?。?)對(duì)于網(wǎng)絡(luò)中的數(shù)據(jù)包進(jìn)行捕獲分析是一項(xiàng)對(duì)于系統(tǒng)的穩(wěn)定性要求很高的項(xiàng)目,系統(tǒng)的設(shè)計(jì)要突出性能和穩(wěn)定性優(yōu)先,兼顧開發(fā)難度的原則,在開發(fā)工具、平臺(tái)和技術(shù)的選擇上優(yōu)先保證性能。</p><p> ?。?)在技術(shù)的選擇上要注意該項(xiàng)技術(shù)與系統(tǒng)的相容性,包括在性能上的相容性。比如本次的開發(fā)環(huán)境選擇了Windows環(huán)境

51、的Winpcap,這是由我個(gè)人的開發(fā)環(huán)境而選擇的。</p><p><b>  3.2 總體架構(gòu)</b></p><p>  在軟件設(shè)計(jì)和開發(fā)中,將不同的功能模塊化的設(shè)計(jì)往往是最終軟件開發(fā)能夠快速、方便的前提,并且能夠在協(xié)同開發(fā)、業(yè)務(wù)擴(kuò)展等等方面提供很好的兼容性。將各個(gè)模塊分離開,優(yōu)點(diǎn)是很多的。如有效地實(shí)現(xiàn)軟件之間的解耦合,便于軟件開發(fā)過程中進(jìn)行分工,后期的維護(hù),提高

52、軟件的重組,便于以后以模塊化的方式來替換產(chǎn)品,以及產(chǎn)品功能的擴(kuò)展等等功能。所以,模塊化的設(shè)計(jì),以及分層的處理,能有效地讓軟件更利于開發(fā)。其具體如圖3-1:</p><p>  圖3.1 系統(tǒng)總體架構(gòu)圖</p><p>  該系統(tǒng)主要實(shí)現(xiàn)對(duì)當(dāng)前計(jì)算機(jī)中已有網(wǎng)卡的獲取和選擇,實(shí)施流經(jīng)網(wǎng)卡的數(shù)據(jù)流的捕獲和存儲(chǔ)以及網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議的分析等一系列功能。網(wǎng)絡(luò)設(shè)備的獲取與選擇主要完成從主機(jī)中獲取網(wǎng)絡(luò)設(shè)備

53、列表及其相關(guān)描述信息,并以列表的形式顯示出來,進(jìn)而用戶通過界面選擇并查看系統(tǒng)工作的網(wǎng)絡(luò)設(shè)備信息。網(wǎng)絡(luò)數(shù)據(jù)流的捕獲與存儲(chǔ)主要完成在設(shè)置好過濾規(guī)則的基礎(chǔ)上,對(duì)已經(jīng)打開的網(wǎng)絡(luò)設(shè)備采集數(shù)據(jù)流,并按照主流的數(shù)據(jù)流存儲(chǔ)格式存儲(chǔ)對(duì)捕獲到的網(wǎng)絡(luò)數(shù)據(jù)流,然后再對(duì)所捕獲到的數(shù)據(jù)包的首部信息進(jìn)行解析,同時(shí)用戶可以查看指定數(shù)據(jù)包的詳細(xì)信息,進(jìn)一步實(shí)現(xiàn)對(duì)單一數(shù)據(jù)的應(yīng)用層數(shù)據(jù)解析。</p><p><b>  3.3 系統(tǒng)主流程&

54、lt;/b></p><p>  系統(tǒng)的核心是通過WinpCap捕獲到數(shù)據(jù)包,然后根據(jù)對(duì)應(yīng)的數(shù)據(jù)包協(xié)議進(jìn)行解析,最終呈現(xiàn)到界面上。所以其具體的處理流程如下:</p><p>  3.3.1 數(shù)據(jù)包捕獲模塊</p><p>  數(shù)據(jù)包捕獲模塊主要負(fù)責(zé)采集網(wǎng)絡(luò)數(shù)據(jù)流。該模塊通過調(diào)用WinPcap開發(fā)包提供的API函數(shù),實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備信息的獲取,以便用戶選擇系統(tǒng)所運(yùn)行

55、的網(wǎng)絡(luò)設(shè)備;實(shí)現(xiàn)過濾規(guī)則的設(shè)定,以篩選出系統(tǒng)感興趣的網(wǎng)絡(luò)數(shù)據(jù)流;實(shí)現(xiàn)從用戶指定設(shè)備上捕獲流經(jīng)的數(shù)據(jù)流,并將獲取到的數(shù)據(jù)流緩存起來,以供后續(xù)模塊進(jìn)行分析處理。</p><p>  數(shù)據(jù)包捕獲模塊,實(shí)現(xiàn)了從網(wǎng)卡選擇到數(shù)據(jù)捕獲,最終呈現(xiàn)到界面的處理流程。其中,數(shù)據(jù)包的分析下面將作為一個(gè)詳細(xì)的章節(jié)進(jìn)行介紹。具體邏輯如圖3-2:</p><p>  圖3-2 數(shù)據(jù)包捕獲</p><

56、;p>  如圖3-2,具體的處理簡(jiǎn)要介紹如下:</p><p>  (1)系統(tǒng)啟動(dòng)后,通過調(diào)用pcap_findalldevs獲取當(dāng)前計(jì)算機(jī)的所有網(wǎng)卡信息,然后顯示到界面;</p><p>  (2)用戶選擇網(wǎng)卡后,調(diào)用Pcap_open_live打開選中的網(wǎng)卡,開始初始化數(shù)據(jù)包捕獲的相關(guān)資源;</p><p> ?。?)如果需要設(shè)置過濾的數(shù)據(jù)包,則調(diào)用Pca

57、p_setfilter對(duì)捕獲的數(shù)據(jù)包進(jìn)行過濾設(shè)置,在此次設(shè)計(jì)中,沒有對(duì)不同協(xié)議的數(shù)據(jù)包進(jìn)行過濾設(shè)置; </p><p> ?。?)然后開始循環(huán)以旁路的方式獲取數(shù)據(jù)包;</p><p> ?。?)當(dāng)捕獲到一個(gè)數(shù)據(jù)包時(shí),系統(tǒng)就對(duì)其進(jìn)行解析;</p><p> ?。?)最終將解析到的數(shù)據(jù)包顯示到界面;</p><p>  (7)最后,用戶停止數(shù)據(jù)包

58、的解析。</p><p>  3.3.2 數(shù)據(jù)包解析模塊</p><p>  數(shù)據(jù)包解析模塊主要負(fù)責(zé)解析網(wǎng)絡(luò)數(shù)據(jù)流。該模塊按照各層協(xié)議首部格式解析每個(gè)網(wǎng)絡(luò)數(shù)據(jù)包,提取網(wǎng)絡(luò)層、傳輸層等協(xié)議首部的關(guān)鍵字段信息,如:源IP地址、目的IP地址、源端口、目的端口等;然后再提取其TCP首部的序列號(hào)、確認(rèn)序列號(hào)、TCP標(biāo)志等信息,為TCP流重組提供必要信息。</p><p>  

59、數(shù)據(jù)包的解析主要是根據(jù)捕獲到的數(shù)據(jù)包數(shù)據(jù),以及對(duì)應(yīng)的協(xié)議,進(jìn)行數(shù)據(jù)包的解析。該解析的方式是基于不同協(xié)議的格式固定,所以針對(duì)不同的數(shù)據(jù)包以及包協(xié)議,就可以直接到指定位置獲取到對(duì)應(yīng)的數(shù)據(jù)。其處理邏輯如圖3-3:</p><p>  圖3-3 數(shù)據(jù)包解析</p><p>  如圖3-3,在捕獲到數(shù)據(jù)包后,程序通過自定義的windows消息,將該捕獲的數(shù)據(jù)包發(fā)送到對(duì)應(yīng)的線程中進(jìn)行分析。這樣能避免數(shù)

60、據(jù)包過快導(dǎo)致數(shù)據(jù)無法快速捕獲和解析。</p><p>  對(duì)于捕獲的數(shù)據(jù)包,通過定義了對(duì)應(yīng)協(xié)議的數(shù)據(jù)結(jié)構(gòu),然后分析出該包的協(xié)議類型后,直接捕獲的數(shù)據(jù)包的內(nèi)存將對(duì)應(yīng)的首地址指向?qū)?yīng)的包頭結(jié)構(gòu)指針,這樣,就直接完成了數(shù)據(jù)包的解析,然后調(diào)用對(duì)應(yīng)的字段去顯示就可以。其中,系統(tǒng)針對(duì)了TCP,UDP,ICMP數(shù)據(jù)包進(jìn)行了解析,其對(duì)應(yīng)的數(shù)據(jù)包結(jié)構(gòu)如下:</p><p><b>  3.4 小結(jié)

61、</b></p><p>  本章主要圍繞WinpCap對(duì)數(shù)據(jù)包捕獲的核心邏輯處理,根據(jù)這些處理,能夠有效地了解Winpcap捕獲數(shù)據(jù)包的方式,為后面系統(tǒng)的具體實(shí)現(xiàn)提供詳細(xì)的依據(jù)。</p><p><b>  第四章 系統(tǒng)實(shí)現(xiàn)</b></p><p>  本章將具體闡述該系統(tǒng)的具體實(shí)現(xiàn)。</p><p>&

62、lt;b>  4.1 驅(qū)動(dòng)獲取</b></p><p>  系統(tǒng)在初始化運(yùn)行之后,系統(tǒng)需要捕獲當(dāng)前部署的設(shè)備上的所有網(wǎng)卡信息,顯示到界面,用于供用戶選擇當(dāng)前要捕獲的具體網(wǎng)卡。其處理邏輯如圖4-1:</p><p><b>  圖4-1 網(wǎng)卡選擇</b></p><p>  由圖3-2可知,系統(tǒng)在網(wǎng)卡的獲取與顯示上是通過添加一

63、個(gè)下拉列表框的方式,然后調(diào)用pcap_findalldevs_ex函數(shù),來實(shí)現(xiàn)網(wǎng)卡的獲取,然后將獲取的網(wǎng)卡顯示到下拉列表中,供用戶捕獲選擇。</p><p><b>  其主要的代碼如下:</b></p><p>  If ( ! m_wndToolBar.m_wndComboBox.Create (WS_CHILD | WS_VISIBLE|CBS_DROPDOWN

64、LIST,rect,(CWnd*)&m_wndToolBar,ID_TOOL_ZOOM))</p><p><b>  {</b></p><p>  return FALSE;</p><p><b>  }</b></p><p>  pcap_if_t * alldevs,*d;<

65、;/p><p>  char errbuf [ PCAP_ERRBUF_SIZE ];</p><p>  if ( pcap_findalldevs_ex (PCAP_SRC_IF_STRING,NULL, & alldevs,errbuf) == -1)</p><p><b>  {</b></p><p> 

66、 return false;</p><p><b>  }</b></p><p>  For ( d = alldevs ; d ; d = d -> next )</p><p><b>  {</b></p><p>  If ( d -> description )</p

67、><p><b>  {</b></p><p>  m_wndToolBar.m_wndComboBox.AddString ( d -> description );</p><p><b>  }</b></p><p><b>  }</b></p>&

68、lt;p>  m_wndToolBar.m_wndComboBox.SetCurSel ( 0 ) ;</p><p>  可以看到,該系統(tǒng)中主要的處理都是MFC對(duì)控件的基本處理。其中WinpCap中的接口就是pcap_findalldevs_ex對(duì)網(wǎng)卡的讀取,pcap_findalldevs_ex函數(shù)獲得已經(jīng)連接的網(wǎng)絡(luò)適配器接口,然后返回一個(gè) pcap_if 結(jié)構(gòu)的鏈表, 每個(gè)這樣的結(jié)

69、構(gòu)都包含了一個(gè)適配器的詳細(xì)信息。如下程序,得到保存了當(dāng)前環(huán)境下的所有網(wǎng)卡信息的alldevs列表對(duì)象,并將其打印出來,數(shù)據(jù)域 name 和 description 表示一個(gè)適配器名稱和一個(gè)可以讓人們理解的描述,其該對(duì)象的結(jié)構(gòu)如下:</p><p>  struct pcap_if </p><p><b>  {</b><

70、/p><p>  struct pcap_if * next;</p><p>  char * name;</p><p>  char * description;</p><p>  struct pcap_addr * addresses;</p><p>  bpf_u_int32 flags;<

71、/p><p><b>  };</b></p><p>  可以看到,其是一個(gè)鏈表結(jié)構(gòu)。其保存了網(wǎng)卡的名字、描述信息、地址信息、標(biāo)記。并且,通過next指針指向了下一個(gè)結(jié)構(gòu),從而能夠獲取所有的所有的列表信息。</p><p>  4.2 捕獲數(shù)據(jù)初始化</p><p>  在數(shù)據(jù)包捕獲之前,需要對(duì)資源進(jìn)行初始化處理。其主要的

72、處理邏輯如圖4-2:</p><p>  圖4-2 資源初始化</p><p>  數(shù)據(jù)包捕獲之前,需要對(duì)系統(tǒng)資源進(jìn)行初始化,這些初始化包括網(wǎng)卡的設(shè)置、保存文件的創(chuàng)建、內(nèi)存的分配等。其主要的代碼如下:</p><p><b> ?。?)打開設(shè)備</b></p><p><b>  //打開設(shè)備 </b&g

73、t;</p><p>  Adhandle = pcap_open ( d -> name, //網(wǎng)絡(luò)設(shè)備名</p><p>  65535, //數(shù)據(jù)包的捕獲部分長(zhǎng)度</p><p>  PCAP_OPENFLAG_PROMISCUOUS, //混合模式</p><p>

74、;  1000, //讀超時(shí)值</p><p><b>  NULL,</b></p><p>  Errbuf ); //錯(cuò)誤信息緩存區(qū)</p><p>  if ( adhandle == NULL ) </p><

75、p><b>  {</b></p><p>  return - 1;</p><p><b>  }</b></p><p>  系統(tǒng)在用戶選擇了網(wǎng)卡點(diǎn)擊啟動(dòng)數(shù)據(jù)包捕獲后,其調(diào)用pcap_open函數(shù),打開選擇的網(wǎng)卡對(duì)象中名字對(duì)應(yīng)的網(wǎng)卡對(duì)象,其在打開時(shí),可以設(shè)置最大的捕獲數(shù)據(jù)包的長(zhǎng)度,其65535是以太網(wǎng)中單個(gè)數(shù)據(jù)

76、包的最大長(zhǎng)度。也可以設(shè)置該操作的超時(shí)時(shí)間,如果指定時(shí)間內(nèi)都沒有打開,則返回失敗。其也設(shè)置了捕獲的數(shù)據(jù)包為混雜模式,即只要流經(jīng)該網(wǎng)卡的數(shù)據(jù)都會(huì)被捕獲到,即使只是通過該網(wǎng)卡進(jìn)行傳遞,而非發(fā)送給當(dāng)前計(jì)算機(jī)應(yīng)用層數(shù)據(jù)。</p><p> ?。?)檢測(cè)是否是以太網(wǎng)</p><p>  If ( pcap_datalink ( adhandle ) ! = DLT_EN10MB )</p>

77、<p><b>  {</b></p><p>  return - 1;</p><p><b>  }</b></p><p>  該程序捕獲只限于以太網(wǎng)的環(huán)境下,所以如果當(dāng)前網(wǎng)絡(luò)非以太網(wǎng),則不允許捕獲。</p><p><b>  (3)創(chuàng)建目錄</b>&l

78、t;/p><p>  CFileFind file ;</p><p>  If ( ! file.FindFile ( "SavedData" ))</p><p><b>  {</b></p><p>  CreateDirectory ( "SavedData" , NULL

79、);</p><p><b>  }</b></p><p>  數(shù)據(jù)包捕獲的時(shí)候,會(huì)通過調(diào)用WinpCap的保存接口實(shí)現(xiàn)對(duì)數(shù)據(jù)包的捕獲,所以,需要?jiǎng)?chuàng)建一個(gè)目錄用于保存這些數(shù)據(jù)包文件,而該系統(tǒng)中,每次捕獲操作初始化的時(shí)候,如果檢測(cè)到該目錄不存在,則創(chuàng)建該目錄。</p><p> ?。?)創(chuàng)建線程捕獲數(shù)據(jù)包</p><p>

80、;  LPDWORD ThreadID = NULL;</p><p>  m_ThreadHandle = CreateThread ( NULL , 0 , MyCaptureThread , this , 0 , ThreadID );</p><p>  資源初始化完成后,就開始對(duì)數(shù)據(jù)包進(jìn)行捕獲。但是,其數(shù)據(jù)包的捕獲是一個(gè)循環(huán)、持續(xù)的過程,所以其具體的處理通過創(chuàng)建線程來操作,這樣讓

81、業(yè)務(wù)邏輯與UI邏輯分離出來,能夠讓用戶的操作更友好。</p><p>  4.3 數(shù)據(jù)包與解析捕獲</p><p>  數(shù)據(jù)包的捕獲其是通過調(diào)用WinpCap的接口來實(shí)現(xiàn)數(shù)據(jù)包的捕獲,當(dāng)捕獲到數(shù)據(jù)包之后,需要對(duì)數(shù)據(jù)包進(jìn)行處理,這些處理包括解析數(shù)據(jù)包、顯示解析的數(shù)據(jù)、保存數(shù)據(jù)包、計(jì)算平均速率和瞬時(shí)速率等。其主要處理的邏輯如圖4-3:</p><p>  圖4-3 數(shù)據(jù)

82、包捕獲與處理</p><p>  其數(shù)據(jù)包的捕獲主要處理邏輯如下:</p><p>  捕獲數(shù)據(jù)包:系統(tǒng)通過調(diào)用WinpCap的數(shù)據(jù)包捕獲接口實(shí)現(xiàn)對(duì)數(shù)據(jù)包的捕獲,</p><p><b>  其代碼如下:</b></p><p>  Res = pcap_next_ex ( pthis -> adhandle ,&

83、amp; header ,& pkt_data );</p><p>  其首先是需要指定捕獲的數(shù)據(jù)包的網(wǎng)卡對(duì)象,其該接口是一個(gè)阻塞方式的接口,其當(dāng)有新的數(shù)據(jù)包來臨的時(shí)候,其才會(huì)返回,會(huì)將捕獲的IP數(shù)據(jù)包的捕獲的描述信息保存在header對(duì)象中,其具體捕獲的數(shù)據(jù)內(nèi)容在pkt_data對(duì)象中。其中,header對(duì)象如下:</p><p>  struct pcap_pkthdr<

84、;/p><p><b>  {</b></p><p>  struct timeval ts ; /* 時(shí)間戳 */</p><p>  bpf_u_int32 caplen ;/* 本部分長(zhǎng)度 */</p><p>  bpf_u_int32 len ; /* 數(shù)據(jù)包長(zhǎng)度 */</p><

85、;p><b>  };</b></p><p>  可以看到,該對(duì)象主要是描述了數(shù)據(jù)包捕獲的具體時(shí)間以及捕獲的數(shù)據(jù)包長(zhǎng)度,即定義了pkt_data對(duì)象的數(shù)據(jù)大小,程序就可以通過對(duì)應(yīng)的包長(zhǎng)度對(duì)pkt_data對(duì)象進(jìn)行詳細(xì)的解析。</p><p>  (2)MAC層數(shù)據(jù)解析</p><p>  其pkt_data就是具體的數(shù)據(jù)包,其包括MAC

86、層的數(shù)據(jù),IP層的數(shù)據(jù),應(yīng)用層具體的包結(jié)構(gòu)。所以,程序需要先對(duì)MAC層數(shù)據(jù)進(jìn)行解析,得到MAC層數(shù)據(jù)進(jìn)行顯示。</p><p>  其主要的解析代碼如下:</p><p>  mach = ( mac_header * ) pkt_data; //mac頭</p><p>  for ( int i = 0 ; i < 6 ; i++ )</p>

87、<p><b>  {</b></p><p>  pdata -> mach.sadd [i] = mach -> sadd [i];</p><p>  pdata -> mach.dadd [i] = mach -> dadd [i];</p><p><b>  }</b><

88、;/p><p>  pdata->mach.mac_type=mach->mac_type;</p><p>  其MAC層的結(jié)構(gòu)如下:</p><p>  //Mac幀頭 占14個(gè)字節(jié)</p><p>  typedef struct tag_mac_header</p><p><b>  {&l

89、t;/b></p><p>  u_char dadd [6] ;//6個(gè)字節(jié) 目標(biāo)地址</p><p>  u_char sadd [6] ;//6個(gè)字節(jié) 源地址</p><p>  u_short mac_type ;//2個(gè)字節(jié) 類型</p><p><b>  }</b></p><p&

90、gt;  mac_header;</p><p>  可以看到,其通過解析MAC層的數(shù)據(jù),就能夠得到該數(shù)據(jù)包的目標(biāo)MAC地址和源MAC地址。</p><p>  (3)IP層數(shù)據(jù)解析</p><p>  解析完MAC層數(shù)據(jù)后,就可以解析IP層數(shù)據(jù),其具體處理的代碼如下:</p><p>  ih = (ip_header*)(pkt_data

91、+14);//ip頭</p><p>  int iplen = (ih->ver_ihl & 0xf)*4;</p><p>  pdata -> iph.crc = ih -> crc;</p><p>  pdata -> iph.daddr = ih -> daddr;</p><p>  pda

92、ta -> iph.flags_fo = ih -> flags_fo;</p><p>  pdata -> iph.identification = ih -> identification;</p><p>  pdata -> iph.op_pad = ih -> op_pad;</p><p>  pdata ->

93、 iph.proto = ih -> proto;</p><p>  pdata -> iph.saddr = ih -> saddr;</p><p>  pdata -> iph.tlen = ih -> tlen;</p><p>  pdata -> iph.tos = ih -> tos;</p>

94、<p>  pdata -> iph.ttl = ih -> ttl;</p><p>  pdata -> iph.ver_ihl = ih -> ver_ihl;</p><p>  其IP對(duì)象的結(jié)構(gòu)如下:</p><p>  //定義IP頭 IP數(shù)據(jù)包=IP頭+TCP數(shù)據(jù)段(或UDP數(shù)據(jù)段)</p><p&

95、gt;  typedef struct tag_ip_header</p><p><b>  {</b></p><p>  u_char ver_ihl; // u_char 8位 版本(4位) + 頭長(zhǎng)(4位)</p><p>  u_char tos;//TOS 服務(wù)類型</p><p>  u_short tl

96、en;//包總長(zhǎng) u_short占兩個(gè)字節(jié)</p><p>  u_short identification;//標(biāo)識(shí)</p><p>  u_short flags_fo;//標(biāo)志位Flags(3位)+分段偏移(13位)</p><p>  u_char ttl;//TTL</p><p>  u_char proto;//Protocol

97、</p><p>  u_short crc;//校驗(yàn)和</p><p>  ip_address saddr;//源地址</p><p>  ip_address daddr;//目的地址</p><p>  u_int op_pad;//選項(xiàng)+填充字段 u_int占4個(gè)字節(jié) 32位</p><p>  //接下來是

98、數(shù)據(jù)段,不屬于IP頭部</p><p>  }ip_header;</p><p>  通過該結(jié)構(gòu),就可以知道其具體的上層使用的協(xié)議,以及數(shù)據(jù)包進(jìn)行穩(wěn)定傳輸?shù)膮?shù)。</p><p><b> ?。?)上層協(xié)議解析</b></p><p>  通過字段proto字段,再對(duì)具體的上層協(xié)議進(jìn)行解析,在該系統(tǒng)中,實(shí)現(xiàn)了對(duì)TCP、

99、UDP、ICMP的解析,其定義的頭部結(jié)構(gòu)如下:</p><p><b>  //定義TCP頭</b></p><p>  typedef struct tag_tcp_header</p><p><b>  {</b></p><p>  u_short sport;//源端口地址 16位<

100、;/p><p>  u_short dport;//目的端口地址 16位</p><p>  u_int32_t sn;//序列號(hào) 32位</p><p>  u_int32_t an;//確認(rèn)號(hào) 32位</p><p>  u_int16_t other;//16位 其中 頭長(zhǎng)度4位+保留6位+UPG1+ACK1+PSH1+RST1+SYN1+

101、FIN1 </p><p>  u_int16_t window_size;//窗口大小 16位</p><p>  u_int16_t check_sum;//校驗(yàn)和 16位</p><p>  u_int16_t urgent_pointer;//緊急指針 16位</p><p>  u_int32_t option;//選項(xiàng)0或32位&

102、lt;/p><p>  }tcp_header;</p><p><b>  //定義UDP頭</b></p><p>  typedef struct tag_udp_header</p><p><b>  {</b></p><p>  u_short sport;//源端

103、口 16位</p><p>  u_short dport;//目的端口 16位</p><p>  u_short len;//數(shù)據(jù)報(bào)長(zhǎng)度 16位</p><p>  u_short crc;//校驗(yàn)和 16位</p><p>  }udp_header;</p><p><b>  //定義ICMP&l

104、t;/b></p><p>  typedef struct tag_icmp_header</p><p><b>  {</b></p><p>  u_char type;//8位 類型</p><p>  u_char identifer; //8位 代碼</p><p>  u_c

105、har sequence;//序列號(hào) 8位</p><p>  u_char chksum;//8位校驗(yàn)和</p><p>  }icmp_header;</p><p> ?。?)數(shù)據(jù)包內(nèi)存數(shù)據(jù)保存</p><p>  通過上面的步驟,其數(shù)據(jù)包的數(shù)據(jù)就已經(jīng)解析完畢。其會(huì)將解析后的數(shù)據(jù)保存到內(nèi)存鏈表中,用于數(shù)據(jù)的顯示。其具體的實(shí)現(xiàn)是通過CPt

106、rList類來實(shí)現(xiàn)。</p><p>  CPtrList對(duì)象是一個(gè)鏈表的指針對(duì)象,其能夠保存Object對(duì)象。所以,當(dāng)有新的數(shù)據(jù)包來臨是,其通過AddTail接口,實(shí)現(xiàn)將新的數(shù)據(jù)包保存到該鏈表中。</p><p><b> ?。?)數(shù)據(jù)包顯示</b></p><p>  數(shù)據(jù)包的顯示包括對(duì)解析后的頭部數(shù)據(jù)進(jìn)行顯示,也包括對(duì)當(dāng)前速度的統(tǒng)計(jì)數(shù)據(jù)

107、的顯示,其為了讓捕獲的數(shù)據(jù)包速度更快,系統(tǒng)通過發(fā)送Windows消息的方式到UI線程,讓界面去更新數(shù)據(jù),但是數(shù)據(jù)包捕獲線程則繼續(xù)處理下一個(gè)數(shù)據(jù)包。</p><p><b>  其具體的代碼如下:</b></p><p>  ::SendMessage(((CMainFrame*)AfxGetApp()</p><p>  ->GetMai

108、nWnd())</p><p>  ->m_wndStatusBar.m_hWnd,SB_SETTEXT,4,(LPARAM)(LPCTSTR)g_strSpeed);</p><p><b>  (7)數(shù)據(jù)包保存</b></p><p>  對(duì)于捕獲的數(shù)據(jù)包,系統(tǒng)也會(huì)保存到文件中,而這個(gè)過程也是通過發(fā)送Windows消息來實(shí)現(xiàn)對(duì)新的

109、數(shù)據(jù)包數(shù)據(jù)的保存。</p><p>  4.4 數(shù)據(jù)包保存與讀取</p><p><b>  (1)數(shù)據(jù)包保存</b></p><p>  數(shù)據(jù)包的保存其也是通過調(diào)用WinpCap的接口來實(shí)現(xiàn)對(duì)數(shù)據(jù)包的保存。其具體處理邏輯如圖5-4:</p><p>  圖4-4 數(shù)據(jù)包保存</p><p>  

110、由圖4-4可知,數(shù)據(jù)包的保存是通過調(diào)用WinpCap的接口來實(shí)現(xiàn)數(shù)據(jù)包的保存的。其通過pcap_dump_open來打開保存的句柄,當(dāng)每次又新的數(shù)據(jù)包來時(shí),通過調(diào)用pcap_dump對(duì)數(shù)據(jù)包進(jìn)行保存,捕獲結(jié)束的時(shí)候,調(diào)用pcap_dump_close實(shí)現(xiàn)對(duì)句柄對(duì)象的關(guān)閉。從而實(shí)現(xiàn)了數(shù)據(jù)的保存。</p><p><b> ?。?)數(shù)據(jù)包讀取</b></p><p>  

111、其數(shù)據(jù)包保存到本地后,可以支持對(duì)數(shù)據(jù)包的讀取操作。其處理邏輯如圖4-5:</p><p>  圖4-5 數(shù)據(jù)包讀取</p><p>  可以看到,其系統(tǒng)也是通過調(diào)用WinpCap的接口pcap_open_offline來實(shí)現(xiàn)對(duì)離線數(shù)據(jù)包的讀取,讀取到數(shù)據(jù)包后,其通過消息將該數(shù)據(jù)包刷新到界面。</p><p>  4.5 數(shù)據(jù)包流量分析</p><

112、p>  系統(tǒng)還實(shí)現(xiàn)了對(duì)數(shù)據(jù)包的流量分析,其能實(shí)時(shí)顯示數(shù)據(jù)包的流量情況。而該處理主要是通過MFC的CPaintDC對(duì)象來實(shí)現(xiàn)對(duì)當(dāng)前數(shù)據(jù)的繪制,其主要處理邏輯如下:</p><p>  定義數(shù)組描述當(dāng)前需要繪制的點(diǎn);</p><p>  定義了一個(gè)成員變量數(shù)組int m_data[60],用于保存某個(gè)時(shí)間段內(nèi)捕獲到的數(shù)據(jù)包個(gè)數(shù),其該數(shù)據(jù)通過在主窗口中實(shí)時(shí)獲取,并刷新更新該數(shù)據(jù)。</

113、p><p>  其通過重寫OnPaint事件,來實(shí)時(shí)刷新統(tǒng)計(jì)頁(yè)面,并且通過CPaintDC dc(this)、CBrush、CPen對(duì)象實(shí)現(xiàn)對(duì)坐標(biāo)軸的繪制。</p><p><b>  其代碼如下:</b></p><p>  CBrush* pOldBrush=pdc->SelectObject(&m_brushBlack);&l

114、t;/p><p>  pdc->Rectangle(&rect);</p><p>  pdc->SelectObject(pOldBrush);</p><p>  CPen* pOldPen=pdc->SelectObject(&m_Pengreen);</p><p>  pdc->MoveTo(re

115、ct.left-1,rect.bottom+1);</p><p>  pdc->LineTo(rect.right+20,rect.bottom+1);</p><p>  pdc->MoveTo(rect.left-1,rect.bottom+1);</p><p>  pdc->LineTo(rect.left-1,rect.top-20);

116、</p><p>  pdc->TextOut(rect.right+10,rect.bottom+3,"秒");</p><p>  pdc->TextOut(rect.left-20,rect.top-20,"流量(IP個(gè)數(shù)/秒)");</p><p>  通過在OnPaint事件中,顯示捕獲數(shù)據(jù)包的數(shù)量信息,

117、繪制動(dòng)態(tài)圖。</p><p><b>  其代碼如下:</b></p><p>  CPen redPen(PS_SOLID,2,RGB(255,0,0));</p><p>  CPen* pred=pdc->SelectObject(&redPen);</p><p>  for(int i=59;i&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論