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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

2、<p>  專 業(yè): 電子信息工程 </p><p>  學生姓名: 班級/學號 </p><p>  指導老師/督導老師: </p><p>  起止時間:

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

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

5、;<p>  在本次的畢設項目中,將依托一系列的開發(fā)環(huán)境和開發(fā)工具,設計并制作完成一個基于網(wǎng)卡的數(shù)據(jù)包包頭協(xié)議解析軟件,軟件將實現(xiàn)對流經(jīng)網(wǎng)卡的數(shù)據(jù)包進行捕獲和分析,并能夠對所捕獲和分析后的數(shù)據(jù)進行導出保存,以便后續(xù)由專業(yè)人士對當前的網(wǎng)絡狀態(tài)進行研究判定,從而實現(xiàn)我們對當前的網(wǎng)絡狀態(tài)進行監(jiān)控的目的,進而保證我們的網(wǎng)絡安全、無危害。</p><p>  關鍵詞:數(shù)據(jù)包捕獲,包頭協(xié)議解析,網(wǎng)絡安全,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ù)包解析技術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 小結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 技術可行性6</p><p>  2.4 本章小結6</p><p>  第三章 系統(tǒng)設計7</p><p>  3.1 設計原則7</p><p>  3.2 總體架構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 小結9</b></p><p>  第四章 系統(tǒng)實現(xiàn)10</p><p>  4.1 驅動獲取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 小結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 小結22</b></p><p>  第六章 總結與展望2

18、3</p><p><b>  6.1 總結23</b></p><p><b>  6.2展望23</b></p><p><b>  結束語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)絡,測試網(wǎng)絡性能與安全的工具軟件的需求也越來越迫切,這就為基于Winpcap的網(wǎng)絡數(shù)據(jù)包的捕獲和解析的產(chǎn)生和發(fā)展提供了良好的條件。其可以開發(fā)一套基于網(wǎng)絡數(shù)據(jù)包的捕獲與解析的數(shù)據(jù)包解析器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

35、分別是 DIXv2 標準(即以太網(wǎng) V2 標準)和 IEEE 802.3 標準,那么現(xiàn)在世界上使用的最多的以太網(wǎng)幀協(xié)議為以太網(wǎng) V2 的 標準的MAC幀格式。DIXv2 標準由以下 5 個字段組成:長度為 6 Byte 的目的地址、長度為 6 Byte 的源地址、長度是 2 Byte的類型字段(類型字段的作用是用來標識位于上一層協(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ù)報也可以得到它的完整內容。。</p><p>  如圖1.2.2,這是一個IP 數(shù)據(jù)報。第4位至7位是 IP 的首部長度,該字段的作用是用來精準定位網(wǎng)絡層的上層協(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位目的地址,這兩個字段分別標注了這個數(shù)據(jù)包從哪里發(fā)送、又發(fā)送到了哪里,可以解析出該數(shù)據(jù)報的源 IP 地址和目的 IP 地址,我們可以很清晰的判定數(shù)據(jù)包的流向。</p>

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

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

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

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

42、下面,就從系統(tǒng)的需求分析開始,分析其功能需求,準確定位在后續(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)的功能應有以下幾點:</p><p> ?。?)我們需要對從網(wǎng)卡中捕獲到的數(shù)據(jù)

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

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

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

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

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

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

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

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

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

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

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

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

55、的網(wǎng)絡設備;實現(xiàn)過濾規(guī)則的設定,以篩選出系統(tǒng)感興趣的網(wǎng)絡數(shù)據(jù)流;實現(xiàn)從用戶指定設備上捕獲流經(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)啟動后,通過調用pcap_findalldevs獲取當前計算機的所有網(wǎng)卡信息,然后顯示到界面;</p><p>  (2)用戶選擇網(wǎng)卡后,調用Pcap_open_live打開選中的網(wǎng)卡,開始初始化數(shù)據(jù)包捕獲的相關資源;</p><p> ?。?)如果需要設置過濾的數(shù)據(jù)包,則調用Pca

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

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

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

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

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

63、個下拉列表框的方式,然后調用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)絡適配器接口,然后返回一個 pcap_if 結構的鏈表, 每個這樣的結

69、構都包含了一個適配器的詳細信息。如下程序,得到保存了當前環(huán)境下的所有網(wǎng)卡信息的alldevs列表對象,并將其打印出來,數(shù)據(jù)域 name 和 description 表示一個適配器名稱和一個可以讓人們理解的描述,其該對象的結構如下:</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>  可以看到,其是一個鏈表結構。其保存了網(wǎng)卡的名字、描述信息、地址信息、標記。并且,通過next指針指向了下一個結構,從而能夠獲取所有的所有的列表信息。</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)卡的設置、保存文件的創(chuàng)建、內存的分配等。其主要的代碼如下:</p><p><b> ?。?)打開設備</b></p><p><b>  //打開設備 </b&g

73、t;</p><p>  Adhandle = pcap_open ( d -> name, //網(wǎng)絡設備名</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ù)包捕獲后,其調用pcap_open函數(shù),打開選擇的網(wǎng)卡對象中名字對應的網(wǎng)卡對象,其在打開時,可以設置最大的捕獲數(shù)據(jù)包的長度,其65535是以太網(wǎng)中單個數(shù)據(jù)

76、包的最大長度。也可以設置該操作的超時時間,如果指定時間內都沒有打開,則返回失敗。其也設置了捕獲的數(shù)據(jù)包為混雜模式,即只要流經(jīng)該網(wǎng)卡的數(shù)據(jù)都會被捕獲到,即使只是通過該網(wǎng)卡進行傳遞,而非發(fā)送給當前計算機應用層數(shù)據(jù)。</p><p> ?。?)檢測是否是以太網(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)境下,所以如果當前網(wǎng)絡非以太網(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ù)包捕獲的時候,會通過調用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è)務邏輯與UI邏輯分離出來,能夠讓用戶的操作更友好。</p><p>  4.3 數(shù)據(jù)包與解析捕獲</p><p>  數(shù)據(jù)包的捕獲其是通過調用WinpCap的接口來實現(xiàn)數(shù)據(jù)包的捕獲,當捕獲到數(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)通過調用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)卡對象,其該接口是一個阻塞方式的接口,其當有新的數(shù)據(jù)包來臨的時候,其才會返回,會將捕獲的IP數(shù)據(jù)包的捕獲的描述信息保存在header對象中,其具體捕獲的數(shù)據(jù)內容在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ù)大小,程序就可以通過對應的包長度對pkt_data對象進行詳細的解析。</p><p> ?。?)MAC層數(shù)據(jù)解析</p><p>  其pkt_data就是具體的數(shù)據(jù)包,其包括MAC

86、層的數(shù)據(jù),IP層的數(shù)據(jù),應用層具體的包結構。所以,程序需要先對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層的結構如下:</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é) 目標地址</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ù)包的目標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對象的結構如下:</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 服務類型</p><p>  u_short tl

96、en;//包總長 u_short占兩個字節(jié)</p><p>  u_short identification;//標識</p><p>  u_short flags_fo;//標志位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>  通過該結構,就可以知道其具體的上層使用的協(xié)議,以及數(shù)據(jù)包進行穩(wěn)定傳輸?shù)膮?shù)。</p><p><b> ?。?)上層協(xié)議解析</b></p><p>  通過字段proto字段,再對具體的上層協(xié)議進行解析,在該系統(tǒng)中,實現(xiàn)了對TCP、

99、UDP、ICMP的解析,其定義的頭部結構如下:</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>  (5)數(shù)據(jù)包內存數(shù)據(jù)保存</p><p>  通過上面的步驟,其數(shù)據(jù)包的數(shù)據(jù)就已經(jīng)解析完畢。其會將解析后的數(shù)據(jù)保存到內存鏈表中,用于數(shù)據(jù)的顯示。其具體的實現(xiàn)是通過CPt

106、rList類來實現(xiàn)。</p><p>  CPtrList對象是一個鏈表的指針對象,其能夠保存Object對象。所以,當有新的數(shù)據(jù)包來臨是,其通過AddTail接口,實現(xiàn)將新的數(shù)據(jù)包保存到該鏈表中。</p><p><b> ?。?)數(shù)據(jù)包顯示</b></p><p>  數(shù)據(jù)包的顯示包括對解析后的頭部數(shù)據(jù)進行顯示,也包括對當前速度的統(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ù)包的保存其也是通過調用WinpCap的接口來實現(xiàn)對數(shù)據(jù)包的保存。其具體處理邏輯如圖5-4:</p><p>  圖4-4 數(shù)據(jù)包保存</p><p>  

110、由圖4-4可知,數(shù)據(jù)包的保存是通過調用WinpCap的接口來實現(xiàn)數(shù)據(jù)包的保存的。其通過pcap_dump_open來打開保存的句柄,當每次又新的數(shù)據(jù)包來時,通過調用pcap_dump對數(shù)據(jù)包進行保存,捕獲結束的時候,調用pcap_dump_close實現(xià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)也是通過調用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)對當前數(shù)據(jù)的繪制,其主要處理邏輯如下:</p><p>  定義數(shù)組描述當前需要繪制的點;</p><p>  定義了一個成員變量數(shù)組int m_data[60],用于保存某個時間段內捕獲到的數(shù)據(jù)包個數(shù),其該數(shù)據(jù)通過在主窗口中實時獲取,并刷新更新該數(shù)據(jù)。</

113、p><p>  其通過重寫OnPaint事件,來實時刷新統(tǒng)計頁面,并且通過CPaintDC dc(this)、CBrush、CPen對象實現(xiàn)對坐標軸的繪制。</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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論