版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 北京信息科技大學(xué)</b></p><p><b> 畢業(yè)設(shè)計(論文)</b></p><p> 題 目: 數(shù)據(jù)包包頭協(xié)議解析器 </p><p> 學(xué) 院: 信息與通信工程學(xué)院 </p>
2、<p> 專 業(yè): 電子信息工程 </p><p> 學(xué)生姓名: 班級/學(xué)號 </p><p> 指導(dǎo)老師/督導(dǎo)老師: </p><p> 起止時間:
3、 </p><p><b> 摘 要</b></p><p> 從網(wǎng)絡(luò)中獲取正在傳輸?shù)臄?shù)據(jù)流,對網(wǎng)絡(luò)數(shù)據(jù)包進行捕捉和分析,這一類技術(shù)幾乎是現(xiàn)有階段網(wǎng)絡(luò)安全技術(shù)的實現(xiàn)基礎(chǔ),同時能夠有效預(yù)防網(wǎng)絡(luò)入侵危害,實施網(wǎng)絡(luò)入侵檢測;現(xiàn)有的網(wǎng)絡(luò)分析軟件也是基于從網(wǎng)絡(luò)中抓取數(shù)據(jù)包進行解析這一基礎(chǔ)而設(shè)計的。我們現(xiàn)有的技術(shù),例
4、如入侵監(jiān)測、防火墻、網(wǎng)絡(luò)安全掃描、包頭協(xié)議分析等這一系列的功能實現(xiàn)都是以對數(shù)據(jù)包的捕獲與分析為前提的,那么我們通過深入的分析所捕獲到的數(shù)據(jù)包,從而可以測算出當(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ò)中存在著的故障的阻礙因素又是什么。所以,研究對于網(wǎng)絡(luò)中的數(shù)據(jù)包進行捕獲與分析的技術(shù)對于保障網(wǎng)絡(luò)安全來說是非常重要的,也是有意義的一項工作。</p>
5、;<p> 在本次的畢設(shè)項目中,將依托一系列的開發(fā)環(huán)境和開發(fā)工具,設(shè)計并制作完成一個基于網(wǎng)卡的數(shù)據(jù)包包頭協(xié)議解析軟件,軟件將實現(xiàn)對流經(jīng)網(wǎng)卡的數(shù)據(jù)包進行捕獲和分析,并能夠?qū)λ东@和分析后的數(shù)據(jù)進行導(dǎo)出保存,以便后續(xù)由專業(yè)人士對當(dāng)前的網(wǎng)絡(luò)狀態(tài)進行研究判定,從而實現(xiàn)我們對當(dāng)前的網(wǎng)絡(luò)狀態(tài)進行監(jiā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實現(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)濟可行性6</p><p> 2.3.
14、2 技術(shù)可行性6</p><p> 2.4 本章小結(jié)6</p><p> 第三章 系統(tǒng)設(shè)計7</p><p> 3.1 設(shè)計原則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)實現(xiàn)10</p><p> 4.1 驅(qū)動獲取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)主頁面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ā)出的新思想、新知識,在互聯(lián)網(wǎng)上我們可以一目了然,互聯(lián)網(wǎng)儼然成為了人類的第二世界,那么與此同時,我們的這個“第二世界”的安全性和可靠性就顯得越發(fā)的重要。因此,社會對能夠分析、診斷網(wǎng)絡(luò),測試網(wǎng)絡(luò)性能與安全的工具軟件的需求也越來越迫切,這就為基于Winpcap的網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和解析的產(chǎn)生和發(fā)展提供了良好的條件。其可以開發(fā)一套基于網(wǎng)絡(luò)數(shù)據(jù)包的捕獲與解析的數(shù)據(jù)包解析器
20、。那么,對我們所使用的網(wǎng)絡(luò)中“流動”的數(shù)據(jù)包進行捕捉獲取并進行進一步的深層系的分析,這是有效預(yù)防網(wǎng)絡(luò)威脅侵入的核心措施,那么同時也是設(shè)計和實現(xiàn)網(wǎng)絡(luò)分析軟件的必要基礎(chǔ),我們現(xiàn)有的一些網(wǎng)絡(luò)技術(shù),像防火墻、入侵監(jiān)測、安全掃描、協(xié)議分析等一系列功能的實現(xiàn),全部都是通過監(jiān)測網(wǎng)絡(luò)流量、數(shù)據(jù)包,對其進行捕獲,通過進一步的深入分析,從數(shù)據(jù)層面上解析所捕獲到的數(shù)據(jù)包,我們可以得到當(dāng)前網(wǎng)絡(luò)中的數(shù)據(jù)信息,觀察網(wǎng)絡(luò)運行狀態(tài)等信息,來分析是否有具有威脅的攻擊行為
21、、了解當(dāng)前的網(wǎng)絡(luò)的性能以及排除網(wǎng)絡(luò)中存在故障問題。通過本次的畢業(yè)設(shè)計,搭建設(shè)計所需的開發(fā)環(huán)境,學(xué)習(xí)和制作數(shù)據(jù)包解析器,對數(shù)據(jù)</p><p> 1.1 數(shù)據(jù)包解析技術(shù)</p><p> 隨著計算機技術(shù)的一個不斷的發(fā)展,在量子計算機、生物計算機等超前應(yīng)用還處于研究之中,而沒有商業(yè)化的時代,二進制的比特流依然是我們當(dāng)前社會進行信息存儲以及傳遞的基礎(chǔ),并且,伴隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,我們可以看
22、到“萬物聯(lián)于一網(wǎng)”的時代即將到來,這將極大的豐富人們的生活方式,甚至錢幣都將去實物化,化為一個個“0”和“1”,我們可以從比特幣中窺探到未來貨幣的影子。但是與此伴隨的,是日益多發(fā)的網(wǎng)絡(luò)安全問題,正如當(dāng)前的“Wanacry”,基于windows的漏洞對整個互聯(lián)網(wǎng)體系造成了沉重的打擊,無論是大到政府機構(gòu)、國營企業(yè),還是windows個人用戶,通過蠕蟲病毒完成快速傳播,加密用戶文件資料,以此勒索比特幣實現(xiàn)其利益需求,對于公共服務(wù)行業(yè)造成了極大
23、的影響。因此,對于信息安全的防護越來越受到重視。良好的網(wǎng)絡(luò)環(huán)境是一個公司,一個企業(yè),乃至一個政府部門正常開展工作的基礎(chǔ),而良好的網(wǎng)絡(luò)環(huán)境必定包括通暢的網(wǎng)路信號傳輸,完善的網(wǎng)絡(luò)安全機制兩方面,這個項目正是在這個基礎(chǔ)上建立的。該項目將完成一個網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和解析的工具的制作,這款軟件將實現(xiàn)一系列功能如對網(wǎng)絡(luò)進行必要的分析以便為網(wǎng)絡(luò)管理提供客觀有效的參數(shù),與此</p><p> 1.2 基于WinPcap實現(xiàn)數(shù)據(jù)包
24、解析</p><p> 1.2.1 Winpcap</p><p> Windows平臺下內(nèi)核本身沒有提供直接訪問數(shù)據(jù)包的標(biāo)準(zhǔn)API接口,需要通過增加一個驅(qū)動程序或者網(wǎng)絡(luò)組件來訪問內(nèi)核網(wǎng)卡驅(qū)動提供的數(shù)據(jù)包。Winpcap所采用的是Windows平臺系統(tǒng)下的一種對數(shù)據(jù)包進行捕獲分析方法,它相當(dāng)于是一個函數(shù)庫、一個應(yīng)用于Windows操作系統(tǒng)的免費而又公開的可以直接的用于訪問互聯(lián)網(wǎng)絡(luò)的開發(fā)
25、者工具包,它是Linu/Unixx系統(tǒng)中的Libpcap的Windows移植版,從設(shè)計到實現(xiàn)完全兼容Libpcap,使得原來許多Linux/Unix平臺下的網(wǎng)絡(luò)分析工具能被快速移植到Windows中。此外,Winpcap不僅可以與Libpcap進行兼容,它還根據(jù)Window系統(tǒng)的特點,針對Windows做出了性能上的優(yōu)化和效率上的提升,其包括了對于BPF-位于內(nèi)核層次的過濾器的支持以及位于內(nèi)核的統(tǒng)計模式上的支持等等。目前,Windows
26、平臺上的用作網(wǎng)絡(luò)數(shù)據(jù)包捕獲和解析的軟件有很多,但是Winpcap絕對是Windows平臺上我們所首選的。</p><p> 由當(dāng)前的技術(shù)發(fā)展現(xiàn)狀來看,絕大多數(shù)在Windows平臺上運行的關(guān)于的網(wǎng)絡(luò)方面的應(yīng)用基本上都是通過“Winsock API – Windows套接口”這一類高級的編程接口來實現(xiàn)訪問網(wǎng)絡(luò)的,通過套接口訪問網(wǎng)絡(luò)數(shù)據(jù)的這種方法允許數(shù)據(jù)通過一定的條件在網(wǎng)絡(luò)中實現(xiàn)一些較為簡單的傳遞,這是因為Windo
27、ws操作系統(tǒng)中的TCP/IP協(xié)議棧能夠使軟件能夠自主處理流程的底層細節(jié)(例如協(xié)議操作、流程重組等這一些),并且提供給了系統(tǒng)一個函數(shù)接口,這個函數(shù)接口能夠用來讀寫目標(biāo)文件。然則,在一些情況下,這種“簡便的方法”實際上并不能滿足我們現(xiàn)實中的一些需求,有那么一些的程序想要繞過TCP/IP協(xié)議棧,目的是直接處理位于網(wǎng)絡(luò)底層中的數(shù)據(jù)信息,這些程序需要直接訪問位于網(wǎng)絡(luò)的底層數(shù)據(jù),也就是說沒有與協(xié)議棧(TCP/IP協(xié)議棧)相似的實體介入時,程序還能夠
28、對網(wǎng)絡(luò)進行原始的訪問。那么,我們采用“Winsock API”進行網(wǎng)絡(luò)編程,使應(yīng)用程序是能夠通過調(diào)用Windows系統(tǒng)提供的接口以訪問TCP/IP協(xié)議棧從而實現(xiàn)在網(wǎng)絡(luò)中進行數(shù)據(jù)通信。通過使用Winpcap工具進行編程,應(yīng)用程序繞開Windows操作系統(tǒng)的TCP/IP協(xié)議</p><p> Winpcap 主要提供了以下四個功能:</p><p> ?。?)捕獲流經(jīng)網(wǎng)卡的數(shù)據(jù)包,不管這個數(shù)
29、據(jù)包時發(fā)送往其他主機上的,還是處于共享媒介上的,都能夠捕捉到;</p><p> ?。?)可以定義捕獲規(guī)則,抓取用戶想要的數(shù)據(jù)包類型,捕獲目標(biāo)數(shù)據(jù)包;</p><p> ?。?)能夠?qū)⒃紨?shù)據(jù)從自己的主機上從網(wǎng)絡(luò)中發(fā)送出去;</p><p> ?。?)可以統(tǒng)計網(wǎng)絡(luò)中的流量信息。</p><p> Winpcap提供的這些功能,要依靠安裝在W
30、in32內(nèi)核的網(wǎng)絡(luò)設(shè)備驅(qū)動程序和一些動態(tài)鏈接庫才能夠最終實現(xiàn)。盡管Winpcap有許多功的能,但是其實Winpcap也有其應(yīng)用的局限性:比如Winpcap不能進行過濾、阻止或者是操縱其他應(yīng)用程序在同一主機內(nèi)進行通信,只能夠簡單地“監(jiān)聽”數(shù)據(jù)包的網(wǎng)絡(luò)傳輸過程。因此,Winpcap不能提供網(wǎng)絡(luò)控制功能的服務(wù),例如流量控制、個人防火墻和服務(wù)質(zhì)量調(diào)度一類的支持。</p><p> 圖1.2.1 Winpcap成員調(diào)用
31、關(guān)系</p><p> Winpcap 由兩個不同層次的 API 組成:一個是位于應(yīng)用層底層的低級動態(tài)鏈接庫Packet.dll 和位于應(yīng)用層高層不依賴于系統(tǒng)的高層靜態(tài)庫 Wpcap.dll ,以及驅(qū)動層的虛擬設(shè)備驅(qū)動程序 NPF drivice driver(Netgroup Packet Filter)。它們之間的調(diào)用關(guān)系如圖2.2所示,應(yīng)用程序既可以調(diào)用應(yīng)用層底層的API packet.dll實現(xiàn)一些更底
32、層的操作,也可以調(diào)用應(yīng)用層高層的API wpcap.dll來簡化程序開發(fā)。</p><p> NPF(全拼:Netgroup Packet Filter),它是位于驅(qū)動層的一個虛擬設(shè)備驅(qū)動程序,同時它也是Winpcap 最為核心的部分,NPF負責(zé)從網(wǎng)卡驅(qū)動中捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包,然后將捕獲到的數(shù)據(jù)包轉(zhuǎn)發(fā)給過濾器模塊進行規(guī)則過濾,再下一步可以選擇將過濾后的數(shù)據(jù)包發(fā)送到統(tǒng)計模塊而后做數(shù)據(jù)分析,也可以發(fā)送到轉(zhuǎn)存器,將捕
33、獲到的數(shù)據(jù)包存儲到磁盤中。</p><p> Packet.dll是用戶級的低級包過濾動態(tài)鏈接庫,通過它可以直接映射到Windows系統(tǒng)內(nèi)核的調(diào)用,使應(yīng)用程序可以運行在不同的Windows系統(tǒng)上,也可以直接訪問NPF驅(qū)動程序的API,從而選擇接收或是發(fā)送數(shù)據(jù)包。</p><p> Wpcap.dll是一個高級的、獨立于系統(tǒng)的動態(tài)庫,與 Packet.dell 相同,并使用低層級的 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ù),所捕獲到的每一個數(shù)據(jù)包都是數(shù)據(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 個字段組成:長度為 6 Byte 的目的地址、長度為 6 Byte 的源地址、長度是 2 Byte的類型字段(類型字段的作用是用來標(biāo)識位于上一層協(xié)議的協(xié)議類型,舉個例子:0x8035 表示的是上層的協(xié)議為 RARP協(xié)議、長 46 —1500 Byte 長
36、度不等的 IP 數(shù)據(jù)報(IP Datagram),以及還有長為 4 Byte 的幀檢驗序列(FCS,frame check sequence)。通過分析每一個數(shù)據(jù)包,也即每一幀,我們可以解析出該數(shù)據(jù)包的源 MAC 地址和目的 MAC 地址,對于IP數(shù)據(jù)報也可以得到它的完整內(nèi)容。。</p><p> 如圖1.2.2,這是一個IP 數(shù)據(jù)報。第4位至7位是 IP 的首部長度,該字段的作用是用來精準(zhǔn)定位網(wǎng)絡(luò)層的上層協(xié)議
37、即傳輸層的起始位置來的(例如:上層協(xié)議是TCP);第 10 字節(jié)是協(xié)議字段,通過對該字段的分析,可以得出這個IP數(shù)據(jù)報攜帶了哪種協(xié)議,它所實現(xiàn)的功能是什么,常用的協(xié)議字段如圖1.2.3 所示;第 13字節(jié)至第16字節(jié)是32位源始地址,第17位至20字節(jié)是32位目的地址,這兩個字段分別標(biāo)注了這個數(shù)據(jù)包從哪里發(fā)送、又發(fā)送到了哪里,可以解析出該數(shù)據(jù)報的源 IP 地址和目的 IP 地址,我們可以很清晰的判定數(shù)據(jù)包的流向。</p>
38、<p> 圖1.2.2 IP數(shù)據(jù)報結(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ù)對于網(wǎng)絡(luò)安全的重要性。同時簡明的介紹了Winpcap的功能和結(jié)構(gòu),通過一個 IP 數(shù)據(jù)報
39、分析了接下來的實施方法。</p><p><b> 第二章 需求分析</b></p><p> 需求分析在系統(tǒng)的整個開發(fā)中起著很重要的作用,只要正確、完善地做出需求分析,才能夠減少后期的修改,不僅僅減少開發(fā)的時間和成本,也能影響到開發(fā)出的系統(tǒng)是否能夠正常地投入到實際的應(yīng)用中。本系統(tǒng)基于MFC的程序框架,在windows系統(tǒng)上,采用 Microsoft Visua
40、l Studio 2010 開發(fā)出一套基于 Winpcap 的數(shù)據(jù)包包頭協(xié)議解析器,并結(jié)合項目實際,結(jié)果現(xiàn)實需求進行分析在描述具體的需求之前,軟件需要具備以下基本原則:</p><p> (1)系統(tǒng)需要規(guī)范化、自動化。系統(tǒng)能夠在用戶輸入完基本的信息以及相關(guān)的信息后,能夠?qū)崿F(xiàn)對數(shù)據(jù)的歸檔類存儲,在用戶需要這些處理后的數(shù)據(jù)時,能夠清晰明了地展現(xiàn)出來。</p><p> (2)以實用性為開發(fā)
41、目的。圍繞捕獲數(shù)據(jù)包和解析數(shù)據(jù)包進行開發(fā),以系統(tǒng)的高速性和穩(wěn)定性為核心,兼顧應(yīng)用功能的豐富性。</p><p> ?。?)簡單易操作為開發(fā)目標(biāo)。任何一個系統(tǒng),不能開發(fā)的過于復(fù)雜或者重要常用的功能操作繁瑣。而應(yīng)該是簡單易懂的方式呈現(xiàn)在用戶面前,并且系統(tǒng)應(yīng)該遵循當(dāng)前主流軟件的界面設(shè)計,這樣能方便第一次接觸的用戶從別的軟件快速聯(lián)想到當(dāng)前軟件的使用方式,進一步方便用戶的使用。</p><p>
42、下面,就從系統(tǒng)的需求分析開始,分析其功能需求,準(zhǔn)確定位在后續(xù)的工作中需要實現(xiàn)的功能。</p><p><b> 2.1 功能需求</b></p><p> 系統(tǒng)實現(xiàn)了對流經(jīng)網(wǎng)卡中的數(shù)據(jù)流進行捕獲分析,完成數(shù)據(jù)包捕獲、頭部協(xié)議解析和后續(xù)的數(shù)據(jù)存儲的功能。因此,該系統(tǒng)的功能應(yīng)有以下幾點:</p><p> (1)我們需要對從網(wǎng)卡中捕獲到的數(shù)據(jù)
43、包的包頭協(xié)議進行解析,進而提取協(xié)議信息中的關(guān)鍵字段,它們包括源MAC 地址、目的MAC地址、以太網(wǎng)類型、源IP地址、目的IP地址、源端口號、目的端口號、協(xié)議類型以及數(shù)據(jù)負載長度等,然后再顯示到軟件界面上;</p><p> ?。?)用戶能夠自定義數(shù)據(jù)包的過濾規(guī)則,使數(shù)據(jù)包的捕獲更具精準(zhǔn)性和靈活性,增強了軟件功能以及與用戶的交互能力;</p><p> ?。?)程序帶有導(dǎo)出功能,使解析的數(shù)據(jù)
44、包信息以一定格式導(dǎo)出到指定文件夾,以便后續(xù)能夠進行分析研究;</p><p> ?。?)要求程序界面簡潔友好,大部分只需要鼠標(biāo)點擊就可以完成各個功能,操作簡單、方便。</p><p><b> 2.2 性能需求</b></p><p> 系統(tǒng)首先應(yīng)能夠保證穩(wěn)定運行,在解析速率上要接近100Mbps的任務(wù)要求,要保證解析結(jié)果的正確性,軟件的交
45、互界面要簡潔、明了、友好。其中,系統(tǒng)對數(shù)據(jù)包捕獲解析處理的準(zhǔn)確度和時效性是兩個系統(tǒng)的必備性能,也是重中之重,因為作為一個實時處理數(shù)據(jù)信息的系統(tǒng),它的數(shù)據(jù)準(zhǔn)確性以及時效性顯得尤為關(guān)鍵。</p><p> 那么,綜上所述,系統(tǒng)的功能需求如一下四點:</p><p> ?。?)運行速度:保證系統(tǒng)的運行速度快、響應(yīng)時間短、處理時間快、更新周期短,應(yīng)該能滿足用戶的需求。</p>&l
46、t;p> (2)精度需求:保證系統(tǒng)的運算精度。根據(jù)使用需要,在各項數(shù)據(jù)的捕獲、解析過程中,要保證數(shù)據(jù)的正確性且能滿足數(shù)據(jù)包的快速解析。</p><p> ?。?)故障處理需求:能夠兼容可能出現(xiàn)的數(shù)據(jù)包異常情況,能夠?qū)Πl(fā)生的異常進行提示與容錯處理。</p><p> ?。?)界面友好性:要有用戶需求特點的智能化美觀的界面,以便用戶使用上的方便。 </p><p&g
47、t;<b> 2.3 可行性分析</b></p><p> 2.3.1 經(jīng)濟可行性</p><p> 本次畢設(shè)的工作是基于Winpcap這一網(wǎng)絡(luò)數(shù)據(jù)包捕獲與解析的開發(fā)工具,通過對網(wǎng)卡上流經(jīng)的數(shù)據(jù)包進行捕獲和解析,以實現(xiàn)對當(dāng)前網(wǎng)絡(luò)的監(jiān)控,這將是為后期網(wǎng)絡(luò)數(shù)據(jù)的監(jiān)控提供一定的指導(dǎo)價值,然而,開發(fā)卻不需要過多的開發(fā)成本,所以經(jīng)濟上對于開發(fā)該系統(tǒng)是可行的。</p&
48、gt;<p> 2.3.2 技術(shù)可行性</p><p> 該系統(tǒng)將基于WinpCap對數(shù)據(jù)包進行捕獲解析,當(dāng)前已經(jīng)有很多參考的例子進行學(xué)習(xí)和研究。并且,該系統(tǒng)在算法邏輯上,并沒有很復(fù)雜的處理,主要是功能和對業(yè)務(wù)邏輯的處理。所以,在開發(fā)過程中不僅僅可以借鑒程序的開發(fā)例子,也可以在遇到問題的時候,找到相應(yīng)的解決辦法,所以,從技術(shù)的可行性來說,實現(xiàn)一個這樣的系統(tǒng)是可行的。</p><
49、;p><b> 2.4 本章小結(jié)</b></p><p> 在本章中,我們對需要設(shè)計的系統(tǒng)做了需求分析,并從經(jīng)濟可行性和技術(shù)可行性兩點做了可行性分析,這為后面章節(jié)中該系統(tǒng)的詳細設(shè)計奠定基礎(chǔ),并且詳細的需求分析可以為系統(tǒng)的具體實現(xiàn)提供準(zhǔn)確的依據(jù)。</p><p><b> 第三章 系統(tǒng)設(shè)計</b></p><p&g
50、t;<b> 3.1 設(shè)計原則</b></p><p> ?。?)對于網(wǎng)絡(luò)中的數(shù)據(jù)包進行捕獲分析是一項對于系統(tǒng)的穩(wěn)定性要求很高的項目,系統(tǒng)的設(shè)計要突出性能和穩(wěn)定性優(yōu)先,兼顧開發(fā)難度的原則,在開發(fā)工具、平臺和技術(shù)的選擇上優(yōu)先保證性能。</p><p> ?。?)在技術(shù)的選擇上要注意該項技術(shù)與系統(tǒng)的相容性,包括在性能上的相容性。比如本次的開發(fā)環(huán)境選擇了Windows環(huán)境
51、的Winpcap,這是由我個人的開發(fā)環(huán)境而選擇的。</p><p><b> 3.2 總體架構(gòu)</b></p><p> 在軟件設(shè)計和開發(fā)中,將不同的功能模塊化的設(shè)計往往是最終軟件開發(fā)能夠快速、方便的前提,并且能夠在協(xié)同開發(fā)、業(yè)務(wù)擴展等等方面提供很好的兼容性。將各個模塊分離開,優(yōu)點是很多的。如有效地實現(xiàn)軟件之間的解耦合,便于軟件開發(fā)過程中進行分工,后期的維護,提高
52、軟件的重組,便于以后以模塊化的方式來替換產(chǎn)品,以及產(chǎn)品功能的擴展等等功能。所以,模塊化的設(shè)計,以及分層的處理,能有效地讓軟件更利于開發(fā)。其具體如圖3-1:</p><p> 圖3.1 系統(tǒng)總體架構(gòu)圖</p><p> 該系統(tǒng)主要實現(xiàn)對當(dāng)前計算機中已有網(wǎng)卡的獲取和選擇,實施流經(jīng)網(wǎng)卡的數(shù)據(jù)流的捕獲和存儲以及網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議的分析等一系列功能。網(wǎng)絡(luò)設(shè)備的獲取與選擇主要完成從主機中獲取網(wǎng)絡(luò)設(shè)備
53、列表及其相關(guān)描述信息,并以列表的形式顯示出來,進而用戶通過界面選擇并查看系統(tǒng)工作的網(wǎng)絡(luò)設(shè)備信息。網(wǎng)絡(luò)數(shù)據(jù)流的捕獲與存儲主要完成在設(shè)置好過濾規(guī)則的基礎(chǔ)上,對已經(jīng)打開的網(wǎng)絡(luò)設(shè)備采集數(shù)據(jù)流,并按照主流的數(shù)據(jù)流存儲格式存儲對捕獲到的網(wǎng)絡(luò)數(shù)據(jù)流,然后再對所捕獲到的數(shù)據(jù)包的首部信息進行解析,同時用戶可以查看指定數(shù)據(jù)包的詳細信息,進一步實現(xiàn)對單一數(shù)據(jù)的應(yīng)用層數(shù)據(jù)解析。</p><p><b> 3.3 系統(tǒng)主流程&
54、lt;/b></p><p> 系統(tǒng)的核心是通過WinpCap捕獲到數(shù)據(jù)包,然后根據(jù)對應(yīng)的數(shù)據(jù)包協(xié)議進行解析,最終呈現(xiàn)到界面上。所以其具體的處理流程如下:</p><p> 3.3.1 數(shù)據(jù)包捕獲模塊</p><p> 數(shù)據(jù)包捕獲模塊主要負責(zé)采集網(wǎng)絡(luò)數(shù)據(jù)流。該模塊通過調(diào)用WinPcap開發(fā)包提供的API函數(shù),實現(xiàn)網(wǎng)絡(luò)設(shè)備信息的獲取,以便用戶選擇系統(tǒng)所運行
55、的網(wǎng)絡(luò)設(shè)備;實現(xiàn)過濾規(guī)則的設(shè)定,以篩選出系統(tǒng)感興趣的網(wǎng)絡(luò)數(shù)據(jù)流;實現(xiàn)從用戶指定設(shè)備上捕獲流經(jīng)的數(shù)據(jù)流,并將獲取到的數(shù)據(jù)流緩存起來,以供后續(xù)模塊進行分析處理。</p><p> 數(shù)據(jù)包捕獲模塊,實現(xiàn)了從網(wǎng)卡選擇到數(shù)據(jù)捕獲,最終呈現(xiàn)到界面的處理流程。其中,數(shù)據(jù)包的分析下面將作為一個詳細的章節(jié)進行介紹。具體邏輯如圖3-2:</p><p> 圖3-2 數(shù)據(jù)包捕獲</p><
56、;p> 如圖3-2,具體的處理簡要介紹如下:</p><p> ?。?)系統(tǒng)啟動后,通過調(diào)用pcap_findalldevs獲取當(dāng)前計算機的所有網(wǎng)卡信息,然后顯示到界面;</p><p> ?。?)用戶選擇網(wǎng)卡后,調(diào)用Pcap_open_live打開選中的網(wǎng)卡,開始初始化數(shù)據(jù)包捕獲的相關(guān)資源;</p><p> ?。?)如果需要設(shè)置過濾的數(shù)據(jù)包,則調(diào)用Pca
57、p_setfilter對捕獲的數(shù)據(jù)包進行過濾設(shè)置,在此次設(shè)計中,沒有對不同協(xié)議的數(shù)據(jù)包進行過濾設(shè)置; </p><p> ?。?)然后開始循環(huán)以旁路的方式獲取數(shù)據(jù)包;</p><p> ?。?)當(dāng)捕獲到一個數(shù)據(jù)包時,系統(tǒng)就對其進行解析;</p><p> ?。?)最終將解析到的數(shù)據(jù)包顯示到界面;</p><p> ?。?)最后,用戶停止數(shù)據(jù)包
58、的解析。</p><p> 3.3.2 數(shù)據(jù)包解析模塊</p><p> 數(shù)據(jù)包解析模塊主要負責(zé)解析網(wǎng)絡(luò)數(shù)據(jù)流。該模塊按照各層協(xié)議首部格式解析每個網(wǎng)絡(luò)數(shù)據(jù)包,提取網(wǎng)絡(luò)層、傳輸層等協(xié)議首部的關(guān)鍵字段信息,如:源IP地址、目的IP地址、源端口、目的端口等;然后再提取其TCP首部的序列號、確認序列號、TCP標(biāo)志等信息,為TCP流重組提供必要信息。</p><p>
59、數(shù)據(jù)包的解析主要是根據(jù)捕獲到的數(shù)據(jù)包數(shù)據(jù),以及對應(yīng)的協(xié)議,進行數(shù)據(jù)包的解析。該解析的方式是基于不同協(xié)議的格式固定,所以針對不同的數(shù)據(jù)包以及包協(xié)議,就可以直接到指定位置獲取到對應(yīng)的數(shù)據(jù)。其處理邏輯如圖3-3:</p><p> 圖3-3 數(shù)據(jù)包解析</p><p> 如圖3-3,在捕獲到數(shù)據(jù)包后,程序通過自定義的windows消息,將該捕獲的數(shù)據(jù)包發(fā)送到對應(yīng)的線程中進行分析。這樣能避免數(shù)
60、據(jù)包過快導(dǎo)致數(shù)據(jù)無法快速捕獲和解析。</p><p> 對于捕獲的數(shù)據(jù)包,通過定義了對應(yīng)協(xié)議的數(shù)據(jù)結(jié)構(gòu),然后分析出該包的協(xié)議類型后,直接捕獲的數(shù)據(jù)包的內(nèi)存將對應(yīng)的首地址指向?qū)?yīng)的包頭結(jié)構(gòu)指針,這樣,就直接完成了數(shù)據(jù)包的解析,然后調(diào)用對應(yīng)的字段去顯示就可以。其中,系統(tǒng)針對了TCP,UDP,ICMP數(shù)據(jù)包進行了解析,其對應(yīng)的數(shù)據(jù)包結(jié)構(gòu)如下:</p><p><b> 3.4 小結(jié)
61、</b></p><p> 本章主要圍繞WinpCap對數(shù)據(jù)包捕獲的核心邏輯處理,根據(jù)這些處理,能夠有效地了解Winpcap捕獲數(shù)據(jù)包的方式,為后面系統(tǒng)的具體實現(xiàn)提供詳細的依據(jù)。</p><p><b> 第四章 系統(tǒng)實現(xiàn)</b></p><p> 本章將具體闡述該系統(tǒng)的具體實現(xiàn)。</p><p>&
62、lt;b> 4.1 驅(qū)動獲取</b></p><p> 系統(tǒng)在初始化運行之后,系統(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、個下拉列表框的方式,然后調(diào)用pcap_findalldevs_ex函數(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對控件的基本處理。其中WinpCap中的接口就是pcap_findalldevs_ex對網(wǎng)卡的讀取,pcap_findalldevs_ex函數(shù)獲得已經(jīng)連接的網(wǎng)絡(luò)適配器接口,然后返回一個 pcap_if 結(jié)構(gòu)的鏈表, 每個這樣的結(jié)
69、構(gòu)都包含了一個適配器的詳細信息。如下程序,得到保存了當(dāng)前環(huán)境下的所有網(wǎng)卡信息的alldevs列表對象,并將其打印出來,數(shù)據(jù)域 name 和 description 表示一個適配器名稱和一個可以讓人們理解的描述,其該對象的結(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> 可以看到,其是一個鏈表結(jié)構(gòu)。其保存了網(wǎng)卡的名字、描述信息、地址信息、標(biāo)記。并且,通過next指針指向了下一個結(jié)構(gòu),從而能夠獲取所有的所有的列表信息。</p><p> 4.2 捕獲數(shù)據(jù)初始化</p><p> 在數(shù)據(jù)包捕獲之前,需要對資源進行初始化處理。其主要的
72、處理邏輯如圖4-2:</p><p> 圖4-2 資源初始化</p><p> 數(shù)據(jù)包捕獲之前,需要對系統(tǒng)資源進行初始化,這些初始化包括網(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ù)包的捕獲部分長度</p><p> PCAP_OPENFLAG_PROMISCUOUS, //混合模式</p><p>
74、; 1000, //讀超時值</p><p><b> NULL,</b></p><p> Errbuf ); //錯誤信息緩存區(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)卡點擊啟動數(shù)據(jù)包捕獲后,其調(diào)用pcap_open函數(shù),打開選擇的網(wǎng)卡對象中名字對應(yīng)的網(wǎng)卡對象,其在打開時,可以設(shè)置最大的捕獲數(shù)據(jù)包的長度,其65535是以太網(wǎng)中單個數(shù)據(jù)
76、包的最大長度。也可以設(shè)置該操作的超時時間,如果指定時間內(nèi)都沒有打開,則返回失敗。其也設(shè)置了捕獲的數(shù)據(jù)包為混雜模式,即只要流經(jīng)該網(wǎng)卡的數(shù)據(jù)都會被捕獲到,即使只是通過該網(wǎng)卡進行傳遞,而非發(fā)送給當(dāng)前計算機應(yīng)用層數(shù)據(jù)。</p><p> (2)檢測是否是以太網(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> ?。?)創(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ù)包捕獲的時候,會通過調(diào)用WinpCap的保存接口實現(xiàn)對數(shù)據(jù)包的捕獲,所以,需要創(chuàng)建一個目錄用于保存這些數(shù)據(jù)包文件,而該系統(tǒng)中,每次捕獲操作初始化的時候,如果檢測到該目錄不存在,則創(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> 資源初始化完成后,就開始對數(shù)據(jù)包進行捕獲。但是,其數(shù)據(jù)包的捕獲是一個循環(huán)、持續(xù)的過程,所以其具體的處理通過創(chuàng)建線程來操作,這樣讓
81、業(yè)務(wù)邏輯與UI邏輯分離出來,能夠讓用戶的操作更友好。</p><p> 4.3 數(shù)據(jù)包與解析捕獲</p><p> 數(shù)據(jù)包的捕獲其是通過調(diào)用WinpCap的接口來實現(xiàn)數(shù)據(jù)包的捕獲,當(dāng)捕獲到數(shù)據(jù)包之后,需要對數(shù)據(jù)包進行處理,這些處理包括解析數(shù)據(jù)包、顯示解析的數(shù)據(jù)、保存數(shù)據(jù)包、計算平均速率和瞬時速率等。其主要處理的邏輯如圖4-3:</p><p> 圖4-3 數(shù)據(jù)
82、包捕獲與處理</p><p> 其數(shù)據(jù)包的捕獲主要處理邏輯如下:</p><p> 捕獲數(shù)據(jù)包:系統(tǒng)通過調(diào)用WinpCap的數(shù)據(jù)包捕獲接口實現(xiàn)對數(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)卡對象,其該接口是一個阻塞方式的接口,其當(dāng)有新的數(shù)據(jù)包來臨的時候,其才會返回,會將捕獲的IP數(shù)據(jù)包的捕獲的描述信息保存在header對象中,其具體捕獲的數(shù)據(jù)內(nèi)容在pkt_data對象中。其中,header對象如下:</p><p> struct pcap_pkthdr<
84、;/p><p><b> {</b></p><p> struct timeval ts ; /* 時間戳 */</p><p> bpf_u_int32 caplen ;/* 本部分長度 */</p><p> bpf_u_int32 len ; /* 數(shù)據(jù)包長度 */</p><
85、;p><b> };</b></p><p> 可以看到,該對象主要是描述了數(shù)據(jù)包捕獲的具體時間以及捕獲的數(shù)據(jù)包長度,即定義了pkt_data對象的數(shù)據(jù)大小,程序就可以通過對應(yīng)的包長度對pkt_data對象進行詳細的解析。</p><p> (2)MAC層數(shù)據(jù)解析</p><p> 其pkt_data就是具體的數(shù)據(jù)包,其包括MAC
86、層的數(shù)據(jù),IP層的數(shù)據(jù),應(yīng)用層具體的包結(jié)構(gòu)。所以,程序需要先對MAC層數(shù)據(jù)進行解析,得到MAC層數(shù)據(jù)進行顯示。</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個字節(jié)</p><p> typedef struct tag_mac_header</p><p><b> {&l
89、t;/b></p><p> u_char dadd [6] ;//6個字節(jié) 目標(biāo)地址</p><p> u_char sadd [6] ;//6個字節(jié) 源地址</p><p> u_short mac_type ;//2個字節(jié) 類型</p><p><b> }</b></p><p&
90、gt; mac_header;</p><p> 可以看到,其通過解析MAC層的數(shù)據(jù),就能夠得到該數(shù)據(jù)包的目標(biāo)MAC地址和源MAC地址。</p><p> ?。?)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對象的結(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位) + 頭長(4位)</p><p> u_char tos;//TOS 服務(wù)類型</p><p> u_short tl
96、en;//包總長 u_short占兩個字節(jié)</p><p> u_short identification;//標(biāo)識</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;//校驗和</p><p> ip_address saddr;//源地址</p><p> ip_address daddr;//目的地址</p><p> u_int op_pad;//選項+填充字段 u_int占4個字節(jié) 32位</p><p> //接下來是
98、數(shù)據(jù)段,不屬于IP頭部</p><p> }ip_header;</p><p> 通過該結(jié)構(gòu),就可以知道其具體的上層使用的協(xié)議,以及數(shù)據(jù)包進行穩(wěn)定傳輸?shù)膮?shù)。</p><p><b> (4)上層協(xié)議解析</b></p><p> 通過字段proto字段,再對具體的上層協(xié)議進行解析,在該系統(tǒng)中,實現(xiàn)了對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;//序列號 32位</p><p> u_int32_t an;//確認號 32位</p><p> u_int16_t other;//16位 其中 頭長度4位+保留6位+UPG1+ACK1+PSH1+RST1+SYN1+
101、FIN1 </p><p> u_int16_t window_size;//窗口大小 16位</p><p> u_int16_t check_sum;//校驗和 16位</p><p> u_int16_t urgent_pointer;//緊急指針 16位</p><p> u_int32_t option;//選項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ù)報長度 16位</p><p> u_short crc;//校驗和 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;//序列號 8位</p><p> u_char chksum;//8位校驗和</p><p> }icmp_header;</p><p> ?。?)數(shù)據(jù)包內(nèi)存數(shù)據(jù)保存</p><p> 通過上面的步驟,其數(shù)據(jù)包的數(shù)據(jù)就已經(jīng)解析完畢。其會將解析后的數(shù)據(jù)保存到內(nèi)存鏈表中,用于數(shù)據(jù)的顯示。其具體的實現(xiàn)是通過CPt
106、rList類來實現(xiàn)。</p><p> CPtrList對象是一個鏈表的指針對象,其能夠保存Object對象。所以,當(dāng)有新的數(shù)據(jù)包來臨是,其通過AddTail接口,實現(xiàn)將新的數(shù)據(jù)包保存到該鏈表中。</p><p><b> ?。?)數(shù)據(jù)包顯示</b></p><p> 數(shù)據(jù)包的顯示包括對解析后的頭部數(shù)據(jù)進行顯示,也包括對當(dāng)前速度的統(tǒng)計數(shù)據(jù)
107、的顯示,其為了讓捕獲的數(shù)據(jù)包速度更快,系統(tǒng)通過發(fā)送Windows消息的方式到UI線程,讓界面去更新數(shù)據(jù),但是數(shù)據(jù)包捕獲線程則繼續(xù)處理下一個數(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> ?。?)數(shù)據(jù)包保存</b></p><p> 對于捕獲的數(shù)據(jù)包,系統(tǒng)也會保存到文件中,而這個過程也是通過發(fā)送Windows消息來實現(xiàn)對新的
109、數(shù)據(jù)包數(shù)據(jù)的保存。</p><p> 4.4 數(shù)據(jù)包保存與讀取</p><p><b> ?。?)數(shù)據(jù)包保存</b></p><p> 數(shù)據(jù)包的保存其也是通過調(diào)用WinpCap的接口來實現(xiàn)對數(shù)據(jù)包的保存。其具體處理邏輯如圖5-4:</p><p> 圖4-4 數(shù)據(jù)包保存</p><p>
110、由圖4-4可知,數(shù)據(jù)包的保存是通過調(diào)用WinpCap的接口來實現(xiàn)數(shù)據(jù)包的保存的。其通過pcap_dump_open來打開保存的句柄,當(dāng)每次又新的數(shù)據(jù)包來時,通過調(diào)用pcap_dump對數(shù)據(jù)包進行保存,捕獲結(jié)束的時候,調(diào)用pcap_dump_close實現(xiàn)對句柄對象的關(guān)閉。從而實現(xiàn)了數(shù)據(jù)的保存。</p><p><b> ?。?)數(shù)據(jù)包讀取</b></p><p>
111、其數(shù)據(jù)包保存到本地后,可以支持對數(shù)據(jù)包的讀取操作。其處理邏輯如圖4-5:</p><p> 圖4-5 數(shù)據(jù)包讀取</p><p> 可以看到,其系統(tǒng)也是通過調(diào)用WinpCap的接口pcap_open_offline來實現(xiàn)對離線數(shù)據(jù)包的讀取,讀取到數(shù)據(jù)包后,其通過消息將該數(shù)據(jù)包刷新到界面。</p><p> 4.5 數(shù)據(jù)包流量分析</p><
112、p> 系統(tǒng)還實現(xiàn)了對數(shù)據(jù)包的流量分析,其能實時顯示數(shù)據(jù)包的流量情況。而該處理主要是通過MFC的CPaintDC對象來實現(xiàn)對當(dāng)前數(shù)據(jù)的繪制,其主要處理邏輯如下:</p><p> 定義數(shù)組描述當(dāng)前需要繪制的點;</p><p> 定義了一個成員變量數(shù)組int m_data[60],用于保存某個時間段內(nèi)捕獲到的數(shù)據(jù)包個數(shù),其該數(shù)據(jù)通過在主窗口中實時獲取,并刷新更新該數(shù)據(jù)。</
113、p><p> 其通過重寫OnPaint事件,來實時刷新統(tǒng)計頁面,并且通過CPaintDC dc(this)、CBrush、CPen對象實現(xiàn)對坐標(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個數(shù)/秒)");</p><p> 通過在OnPaint事件中,顯示捕獲數(shù)據(jù)包的數(shù)量信息,
117、繪制動態(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高速網(wǎng)絡(luò)數(shù)據(jù)包解析器設(shè)計與FPGA實現(xiàn).pdf
- 基于UVM的網(wǎng)絡(luò)數(shù)據(jù)包解析器的驗證研究.pdf
- xml解析器
- 網(wǎng)絡(luò)協(xié)議分析課程設(shè)計---解析ip數(shù)據(jù)包
- 通用可組態(tài)串行協(xié)議解析器的設(shè)計與實現(xiàn).pdf
- 廣域監(jiān)控系統(tǒng)中協(xié)議解析器的設(shè)計與實現(xiàn).pdf
- “淘品牌”麥包包品牌策略分析畢業(yè)論文
- 廣域監(jiān)控系統(tǒng)的可重構(gòu)協(xié)議解析器設(shè)計與開發(fā).pdf
- VoiceXML解析器的研究與實現(xiàn).pdf
- Verilog門級網(wǎng)表解析器.pdf
- 畢業(yè)論文--- 局域網(wǎng)的ip數(shù)據(jù)包監(jiān)控分析軟件與設(shè)計
- 內(nèi)在數(shù)據(jù)庫xMMDB的SQL解析器分析與實現(xiàn).pdf
- can數(shù)據(jù)采集器設(shè)計【畢業(yè)論文】
- rfc1612_dns解析器mib擴展
- 解析ip數(shù)據(jù)包課程設(shè)計
- 解析arp數(shù)據(jù)包課程設(shè)計
- 基于http協(xié)議數(shù)據(jù)包的解析與還原系統(tǒng)的設(shè)計與實現(xiàn)學(xué)士學(xué)位論文
- 通用GML解析器的設(shè)計與實現(xiàn).pdf
- 網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計開發(fā)畢業(yè)設(shè)計
- 網(wǎng)絡(luò)入侵檢測系統(tǒng)的數(shù)據(jù)包頭處理引擎的設(shè)計.pdf
評論
0/150
提交評論