2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩67頁(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、<p>  畢 業(yè) 設(shè) 計(jì)</p><p>  題 目: 基于WinPcap的網(wǎng)絡(luò)數(shù)據(jù)流 </p><p>  分析器的設(shè)計(jì)與實(shí)現(xiàn) </p><p>  系: 計(jì)算機(jī)科學(xué)與技術(shù)系 </p><p>  專

2、業(yè):通信工程 班級(jí): 學(xué)號(hào): </p><p>  學(xué)生姓名: </p><p>  導(dǎo)師姓名: </p><p>  完成日期: 200

3、8年6月8日 </p><p>  畢業(yè)設(shè)計(jì)(論文)任務(wù)書</p><p>  題目: 基于WinPcap的網(wǎng)絡(luò)數(shù)據(jù)流分析器的設(shè)計(jì)與實(shí)現(xiàn) </p><p><b>  基本任務(wù)及要求:</b></p><p>  

4、隨著網(wǎng)絡(luò)技術(shù)的快速發(fā)展,越來(lái)越需要對(duì)網(wǎng)絡(luò)進(jìn)行有效的管理和監(jiān)控,而分析網(wǎng)絡(luò)數(shù)據(jù)流是其中的基礎(chǔ)核心功能之一。目前已有比較成熟的軟件開發(fā)包,如Windows下的winpcap,可方便用于捕獲數(shù)據(jù)包。本課題擬采用Visual C++ 6.0為開發(fā)平臺(tái),利用winpcap開發(fā)包提供的一系列API,實(shí)現(xiàn)對(duì)流經(jīng)網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)進(jìn)行捕獲,并用可視化技術(shù)表現(xiàn)出來(lái)。 </p><

5、;p><b>  基本任務(wù):</b></p><p>  1.采用Visual C++ 6.0語(yǔ)言編寫界面。 </p><p>  2.學(xué)習(xí)winpcap教程,理解捕獲網(wǎng)絡(luò)數(shù)據(jù)包的原理。 </p&

6、gt;<p>  3.對(duì)網(wǎng)絡(luò)數(shù)據(jù)流進(jìn)行分析,如數(shù)據(jù)包捕獲的時(shí)間,數(shù)據(jù)包的長(zhǎng)度和協(xié)議,以及數(shù)據(jù)包發(fā)送的源地址和目的地址。 </p><p>  4.對(duì)分析后的信息用可視化表征。

7、</p><p><b>  基本要求:</b></p><p>  掌握網(wǎng)絡(luò)數(shù)據(jù)包捕獲的相關(guān)只是,熟悉VC++編程。 </p><p>  進(jìn)度安排及完成時(shí)間:</p><p>  第1周 老師講解課題,明確課題任務(wù)與要求,學(xué)習(xí)資料

8、收集檢索方法,并搜索收集所需 </p><p>  英文資料。 </p><p>  第2周 閱讀資料、書籍,學(xué)習(xí)所需知識(shí),撰寫文獻(xiàn)綜述。 </p><p>  第3~5周

9、 畢業(yè)實(shí)習(xí)。 </p><p>  第6周 完成畢業(yè)實(shí)習(xí)報(bào)告撰寫;建立畢業(yè)設(shè)計(jì)實(shí)驗(yàn)環(huán)境;初步擬訂設(shè)計(jì)方案;準(zhǔn)備開題報(bào)</p><p>  告。

10、 </p><p>  第7周 撰寫開題報(bào)告。 </p><p>  第8~13周 具體設(shè)計(jì)、調(diào)試、修改、實(shí)現(xiàn)。 </p>

11、<p>  第14~15周 撰寫畢業(yè)論文(說(shuō)明書),完成畢業(yè)答辯資格審查。 </p><p>  第16周 畢業(yè)答辯準(zhǔn)備、畢業(yè)答辯。 </p><p><b>  目 錄</b></p&

12、gt;<p><b>  摘要1</b></p><p>  Abstract2</p><p><b>  前言3</b></p><p>  第1章 數(shù)據(jù)包的捕獲原理6</p><p>  1.1 網(wǎng)卡工作原理6</p><p>  1.2 網(wǎng)絡(luò)

13、數(shù)據(jù)包格式7</p><p>  1.2.1 MAC幀結(jié)構(gòu)7</p><p>  1.2.2 IP數(shù)據(jù)包結(jié)構(gòu)7</p><p>  1.2.3 TCP數(shù)據(jù)包和UDP數(shù)據(jù)包結(jié)構(gòu)9</p><p>  1.3 WinPcap原理11</p><p>  1.3.1 WinPcap概述11</p>

14、<p>  1.3.2 WinPcap內(nèi)核層NPF12</p><p>  1.3.3 WinPcap的數(shù)據(jù)結(jié)構(gòu)和主要功能函數(shù)14</p><p>  1.3.4 WinPcap優(yōu)化方法15</p><p>  第2章 網(wǎng)絡(luò)數(shù)據(jù)流分析器的設(shè)計(jì)17</p><p>  2.1 需求分析17</p><p

15、>  2.1.1 功能需求17</p><p>  2.1.2 開發(fā)環(huán)境17</p><p>  2.2 系統(tǒng)設(shè)計(jì)18</p><p>  2.2.1 數(shù)據(jù)包捕獲模塊18</p><p>  2.2.2 數(shù)據(jù)包過(guò)濾模塊19</p><p>  2.2.3 數(shù)據(jù)包分析模塊20</p>&l

16、t;p>  第3章 網(wǎng)絡(luò)數(shù)據(jù)流分析器的實(shí)現(xiàn)22</p><p>  3.1 網(wǎng)絡(luò)數(shù)據(jù)流分析器的實(shí)現(xiàn)22</p><p>  3.1.1 數(shù)據(jù)包捕獲模塊的實(shí)現(xiàn)22</p><p>  3.1.2 數(shù)據(jù)包過(guò)濾模塊的實(shí)現(xiàn)24</p><p>  3.1.3 數(shù)據(jù)包分析模塊的實(shí)現(xiàn)26</p><p>  3.

17、2 系統(tǒng)測(cè)試31</p><p>  3.2.1 運(yùn)行環(huán)境31</p><p>  3.2.2 系統(tǒng)測(cè)試結(jié)果31</p><p>  第4章 總結(jié)34</p><p><b>  參考文獻(xiàn)35</b></p><p><b>  致 謝37</b></p&

18、gt;<p><b>  附 錄38</b></p><p>  基于WinPcap的網(wǎng)絡(luò)數(shù)據(jù)流分析器的設(shè)計(jì)與實(shí)現(xiàn)</p><p>  摘要:本課題針對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和分析技術(shù)做了比較深入的闡述。首先,概括介紹了當(dāng)今網(wǎng)絡(luò)數(shù)據(jù)安全的相關(guān)現(xiàn)狀、理論及技術(shù),并著重介紹了網(wǎng)絡(luò)數(shù)據(jù)捕獲和分析的有關(guān)基本實(shí)現(xiàn)機(jī)理、方法和手段,還列舉了當(dāng)前正在應(yīng)用的網(wǎng)絡(luò)分析系統(tǒng)。接

19、下去,詳細(xì)地闡述了WinPcap網(wǎng)絡(luò)數(shù)據(jù)捕獲函數(shù)庫(kù)的工作機(jī)理和內(nèi)部架構(gòu),對(duì)其內(nèi)部的功能函數(shù)做了介紹,并對(duì)它們?cè)跀?shù)據(jù)包捕獲和分析上的實(shí)現(xiàn)過(guò)程做了總結(jié)和概括。最后,具體分析了目的在于網(wǎng)絡(luò)數(shù)據(jù)包捕獲和分析的程序的層次結(jié)構(gòu),給出了具體的通過(guò)調(diào)用 WinPcap 來(lái)捕獲和分析數(shù)據(jù)包的程序的設(shè)計(jì)與實(shí)現(xiàn)方法,最后論文對(duì)數(shù)據(jù)流分析器進(jìn)行了測(cè)試,實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)數(shù)據(jù)流的捕獲和分析。</p><p>  關(guān)鍵詞:數(shù)據(jù)包;捕獲;過(guò)濾;Wi

20、nPcap</p><p>  Design and Implementation of Network Data Analyzing</p><p>  System Based on WinPcap Library</p><p>  Abstract: This paper focuses on the technology of capturing and

21、analyzing of network data. Firstly,illuminate the actuality,theoretics and technology of security of network data and the real system today briefly. Subsequently, expatiate the principle and construction of WinPcap and t

22、he inside function of it as well. Summarize the layout and the configuration of the programs that aimes for the capturing and analyzing of network data. Fina11y, this paper conducts a number of tests in the Ethernet <

23、/p><p>  Key Word: package; capture; Filter; WinPcap</p><p><b>  前 言</b></p><p>  隨著Internet應(yīng)用的日益普及,Internet技術(shù)廣泛用于各行各業(yè),形成各自的網(wǎng)絡(luò),為資源共享、信息交換和分布處理提供了良好的環(huán)境。計(jì)算機(jī)網(wǎng)絡(luò)具備分布廣域性、體系結(jié)構(gòu)開放性

24、、資源共享性和信道共用性的特點(diǎn),因此增加了網(wǎng)絡(luò)的實(shí)用性,同時(shí)也不可避免地帶來(lái)系統(tǒng)的脆弱性,使其面臨嚴(yán)重的安全問(wèn)題?,F(xiàn)在人們對(duì)計(jì)算機(jī)信息安全要求越來(lái)越高,隨著計(jì)算機(jī)網(wǎng)絡(luò)的資源共享進(jìn)一步加強(qiáng),隨之而來(lái)的網(wǎng)絡(luò)安全問(wèn)題也日益突出。計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的普及和隨之而來(lái)的網(wǎng)絡(luò)安全問(wèn)題使得計(jì)算機(jī)網(wǎng)絡(luò)安全保護(hù)將會(huì)變得越來(lái)越重要。</p><p>  網(wǎng)絡(luò)監(jiān)聽技術(shù)的起源是網(wǎng)絡(luò)管理員為了診斷網(wǎng)絡(luò)故障的需要,而監(jiān)聽網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)信息。它是

25、指利用計(jì)算機(jī)的網(wǎng)絡(luò)接口截獲目的地為第三方計(jì)算機(jī)的數(shù)據(jù)報(bào)文的一種技術(shù)。一般的做法是在一定的網(wǎng)段上安裝網(wǎng)絡(luò)監(jiān)聽系統(tǒng)或網(wǎng)絡(luò)分析儀來(lái)獲取網(wǎng)絡(luò)上的數(shù)據(jù)包進(jìn)行分析,以便找出錯(cuò)誤的原因,解決網(wǎng)絡(luò)的故障。一些網(wǎng)絡(luò)管理人員也利用截取網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù)流量,來(lái)實(shí)現(xiàn)一定的流量計(jì)費(fèi)功能。同時(shí),很多黑客也利用網(wǎng)絡(luò)監(jiān)聽來(lái)獲取一些明文傳送的信息,達(dá)到竊取信息的目的。</p><p>  因此,局域網(wǎng)數(shù)據(jù)監(jiān)聽系統(tǒng)的研究,對(duì)于更好的維護(hù)

26、計(jì)算機(jī)網(wǎng)絡(luò)及解決網(wǎng)絡(luò)安全問(wèn)題有著重要的意義。它可以用來(lái)幫助診斷網(wǎng)絡(luò)中的路由設(shè)備,其他的網(wǎng)絡(luò)連接設(shè)備,查看網(wǎng)上數(shù)據(jù)包的傳送情況,利于網(wǎng)絡(luò)管理員的管理與維護(hù)。它的主要用途是分析網(wǎng)絡(luò)的流量,分析網(wǎng)絡(luò)數(shù)據(jù)在某一網(wǎng)段的通信情況以及數(shù)據(jù)的反饋信息,以便找出所關(guān)心的網(wǎng)絡(luò)中潛在的問(wèn)題。例如,假設(shè)網(wǎng)絡(luò)的某一段運(yùn)行地不是很好,報(bào)文發(fā)送的比較慢,而我們又不知道問(wèn)題出在什么地方,此時(shí)就可以用網(wǎng)絡(luò)監(jiān)聽工具做出精確的問(wèn)題判斷。在大型的網(wǎng)絡(luò)中,它的存在對(duì)系統(tǒng)管理人員

27、是非常重要的,系統(tǒng)管理員通過(guò)它可以診斷出大量的不可見的模糊問(wèn)題,這些問(wèn)題涉及兩臺(tái)乃至多臺(tái)計(jì)算機(jī)之間的異常通訊,有些甚至牽涉到各種網(wǎng)絡(luò)協(xié)議,管理員借助它可以方便的確定出多少的通訊量屬于哪個(gè)網(wǎng)絡(luò)協(xié)議、占主要通訊協(xié)議的主機(jī)是哪一臺(tái)、大多數(shù)通訊目的地是哪臺(tái)主機(jī)、報(bào)文發(fā)送占用多少時(shí)間,或者相互通信主機(jī)間報(bào)文傳送的時(shí)間間隔等等,這些信息為系統(tǒng)管理員判斷網(wǎng)絡(luò)故障,管理網(wǎng)絡(luò)區(qū)域提供了非常寶貴的信息。</p><p>  目前市場(chǎng)

28、上已出現(xiàn)一些專用的網(wǎng)絡(luò)監(jiān)控和協(xié)議分析軟件,它們的共同特點(diǎn)是:能夠訪問(wèn)本地網(wǎng)絡(luò)上數(shù)據(jù)鏈路層傳輸?shù)乃袛?shù)據(jù)包,并按用戶的要求對(duì)這些包進(jìn)行相關(guān)處理;對(duì)各種協(xié)議進(jìn)行分析,從而可以對(duì)網(wǎng)絡(luò)負(fù)載流量情況、網(wǎng)絡(luò)所有的各種通訊協(xié)議進(jìn)行監(jiān)控。</p><p>  商用化的工具產(chǎn)品如美國(guó)網(wǎng)絡(luò)聯(lián)盟公司的Snifer網(wǎng)絡(luò)協(xié)議分析儀就是很好的例子。Snifer對(duì)網(wǎng)管具有重要意義。網(wǎng)管通過(guò)Snifer可以方便的確定某種網(wǎng)絡(luò)協(xié)議擁有的通訊量、哪

29、臺(tái)主機(jī)是主要的通訊目的地、主機(jī)相互間發(fā)送報(bào)文的時(shí)間間隔、發(fā)送報(bào)文占用的時(shí)間等,這些信息為網(wǎng)管判斷網(wǎng)絡(luò)問(wèn)題、管理網(wǎng)絡(luò)提供了非常寶貴的信息。</p><p>  WinPcap 的基礎(chǔ)結(jié)構(gòu)是受BPF結(jié)構(gòu)的啟發(fā)而得來(lái)的。它可以分為三個(gè)獨(dú)立的部分:數(shù)據(jù)包捕獲驅(qū)動(dòng)程序NPF( Netgroup Packet Filter)、底層的動(dòng)態(tài)鏈接庫(kù)packet.dll和高層的動(dòng)態(tài)鏈接庫(kù)wpcap.dll。其中NPF處于內(nèi)核級(jí)別,而

30、packet.dll和wpcap.dll處于用戶級(jí)別。處于最下方的是網(wǎng)絡(luò)適配器(NIC)驅(qū)動(dòng),它用來(lái)管理NIC捕獲網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包。為了讓NIC能夠截獲網(wǎng)絡(luò)中的全部數(shù)據(jù)包,應(yīng)將其設(shè)為“混雜模式”。 NIC驅(qū)動(dòng)上面是NPF,它工作在核心態(tài)。NPF是WinPcap體系結(jié)構(gòu)中最底層的模塊。它可以和NIC驅(qū)動(dòng)交互,并向上提供一組函數(shù),用于從網(wǎng)絡(luò)中讀取數(shù)據(jù)包和向網(wǎng)絡(luò)中寫入數(shù)據(jù)包。NPF具有高效和迅速的特點(diǎn),即使在流量很大的快速局域網(wǎng)中也能正常的

31、進(jìn)行包捕獲,丟包率小并且占用的系統(tǒng)資源少。接下來(lái)是 packet.dll,它為上層提供了一個(gè)與平臺(tái)無(wú)關(guān)的包捕獲接口。上層的程序不用經(jīng)過(guò)重新編譯就可在不同版本的Windows系統(tǒng)中運(yùn)行。而wpcap.dll使用了由packet.dll導(dǎo)出的函數(shù),向上層的應(yīng)用程序提供更易于使用的編程接口。處于最上層的包捕</p><p>  在網(wǎng)絡(luò)監(jiān)測(cè)與分析軟件的開發(fā)方面,由于絕大多數(shù)的Unix系統(tǒng)都提供了一套方便應(yīng)用程序直接和網(wǎng)絡(luò)

32、交換的系統(tǒng)調(diào)用,這些系統(tǒng)調(diào)用對(duì)于類似數(shù)據(jù)包捕獲的應(yīng)用程序很有用,所以目前Unix環(huán)境下網(wǎng)絡(luò)監(jiān)控程序的開發(fā)包有很多。而Windows平臺(tái)除2000帶有一個(gè)非常簡(jiǎn)單的IP過(guò)濾器〔利用WinSock2.0的新特性實(shí)現(xiàn))外,其他系統(tǒng)都沒(méi)有包含該方面的功能,現(xiàn)有的一些包捕獲系統(tǒng)要么功能有限〔如Netmon API),要么是商業(yè)性質(zhì)的軟件包。但隨著Windows的普及使用,它在PC機(jī)上已經(jīng)成為了主流操作系統(tǒng),而且針對(duì)Windows的網(wǎng)絡(luò)安全問(wèn)題也日

33、益增多,因此很有必要在Windows平臺(tái)上開發(fā)出許多高質(zhì)量的網(wǎng)絡(luò)分析與安全維護(hù)工具。</p><p>  最后,Windows平臺(tái)網(wǎng)絡(luò)監(jiān)聽技術(shù),涉及驅(qū)動(dòng)程序編程技術(shù)、內(nèi)核態(tài)編程技術(shù)、系統(tǒng)動(dòng)態(tài)鏈接庫(kù)編程技術(shù)、協(xié)議生成和解析編程技術(shù)等,集中體現(xiàn)了網(wǎng)絡(luò)應(yīng)用的核心技術(shù),所以對(duì)其進(jìn)行研究,也就必不可免地對(duì)以上技術(shù)進(jìn)行研究,這不僅可以使研究人員掌握多種核心技術(shù),獲益匪淺,更體現(xiàn)了咨種技術(shù)綜合運(yùn)用的效果和力量,擴(kuò)展知識(shí)層面,結(jié)

34、合運(yùn)用各種技術(shù)甚至是結(jié)合各種學(xué)科進(jìn)行課題研究是非常重要的。</p><p>  本課題中的數(shù)據(jù)流分析是Windows平臺(tái)下基于以太網(wǎng)的監(jiān)聽,Windows版本主要是2000/XP,并且不對(duì)如何在交換機(jī)環(huán)境下進(jìn)行監(jiān)聽作討論。本論文對(duì)網(wǎng)絡(luò)監(jiān)聽的研究,是基于已有的解決方案,即開放源代碼的用于網(wǎng)絡(luò)監(jiān)聽的WinPcap框架系統(tǒng),詳細(xì)論述網(wǎng)絡(luò)監(jiān)聽系統(tǒng)的主要方面,如數(shù)據(jù)包捕獲過(guò)濾驅(qū)動(dòng)程序、數(shù)據(jù)包協(xié)議分析,并對(duì)緩沖區(qū)、數(shù)據(jù)包轉(zhuǎn)發(fā)

35、、分析等機(jī)制進(jìn)行詳細(xì)討論。本課題實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)數(shù)據(jù)流分析的應(yīng)用程序來(lái)展示、驗(yàn)證、實(shí)現(xiàn)論文中討論的概念、原理、機(jī)制。</p><p>  第1章 數(shù)據(jù)包的捕獲原理</p><p>  1.1 網(wǎng)卡工作原理</p><p>  網(wǎng)卡是插在個(gè)人計(jì)算機(jī)或服務(wù)器擴(kuò)展槽內(nèi)的擴(kuò)展卡,其功能主要是充當(dāng)計(jì)算機(jī)和網(wǎng)絡(luò)纜線之間的物理接口或連接,與操作系統(tǒng)配合工作,控制網(wǎng)絡(luò)上的信息流。網(wǎng)卡

36、與網(wǎng)絡(luò)傳輸介質(zhì)(雙絞線、同軸電纜或光纖)相連,網(wǎng)絡(luò)傳輸介質(zhì)與網(wǎng)絡(luò)中的所有網(wǎng)卡相連。</p><p>  網(wǎng)卡具有一組配置選項(xiàng)以保證網(wǎng)卡能與工作站中其他外部設(shè)備共存,并且正確地響應(yīng)操作系統(tǒng)。支配網(wǎng)卡操作的兩個(gè)重要的參數(shù)是它的端口地址和中斷。端口地址與網(wǎng)卡地址是不同的。網(wǎng)卡地址是指網(wǎng)卡在整個(gè)網(wǎng)絡(luò)中唯一的標(biāo)識(shí)值,而端口地址即IP地址是工作站使用的十六進(jìn)制數(shù),常用的缺省地址是300H。工作站的端口地址必須配置成能正確發(fā)送

37、數(shù)據(jù),而網(wǎng)卡地址則必須被配置成當(dāng)數(shù)據(jù)發(fā)送到該地址時(shí)能夠?qū)ζ溥M(jìn)行識(shí)別。如果硬件配置不一致,則數(shù)據(jù)將被發(fā)往別處,網(wǎng)絡(luò)響應(yīng)將失效,而工作站則可能關(guān)閉。中斷是另一個(gè)重要的參數(shù),工作站利用中斷暫時(shí)中止數(shù)據(jù)流動(dòng)而允許其他數(shù)據(jù)通過(guò)系統(tǒng)。中斷使不同的數(shù)據(jù)流同時(shí)使用同一個(gè)物理網(wǎng)絡(luò)。PC的中斷數(shù)量是有限的,對(duì)有許多外圍設(shè)備的工作站必須小心配置,以達(dá)到所有設(shè)備共享中斷而不致于整個(gè)系統(tǒng)崩潰。</p><p>  在共享式以太網(wǎng)中,所有的

38、通訊都是廣播的,也就是說(shuō)通常在同一段的所有網(wǎng)絡(luò)接口都可以訪問(wèn)在物理媒體上傳輸?shù)乃袛?shù)據(jù)。在正常的情況下,一個(gè)網(wǎng)絡(luò)接口應(yīng)該只響應(yīng)兩種數(shù)據(jù)幀:與自己硬件地址相匹配的數(shù)據(jù)幀和發(fā)向所有機(jī)器的廣播數(shù)據(jù)幀。在一個(gè)實(shí)際的關(guān)系中,數(shù)據(jù)的收發(fā)由網(wǎng)卡來(lái)完成。網(wǎng)卡一般有四種工作模式: 廣播模式、多播模式、直播模式和混雜模式。</p><p>  廣播模式:目的物理地址是0xFFFFFF的幀為廣播幀,工作在廣播模式的網(wǎng)卡接收廣播幀。&l

39、t;/p><p>  多播模式(組內(nèi)廣播):D類IP地址是用于組內(nèi)廣播的,也就是一個(gè)人發(fā)出的包可以同時(shí)被其他多個(gè)有資格的人接收,這個(gè)人和那些有資格的人就形成了一個(gè)組,他們?cè)诮M內(nèi)的通信是廣播(或多播傳送),以多播傳送地址作為目的物理地址的幀可以被組內(nèi)的其他主機(jī)同時(shí)接收,而組外主機(jī)卻接收不到。但是,如果將網(wǎng)卡設(shè)置為多播傳送模式,它可以接收所有的多播傳送幀,而不論它是不是組內(nèi)成員。</p><p>

40、  直播模式:工作在直接模式下的網(wǎng)卡只接收目的地址是自己的地址的幀。</p><p>  混雜模式(監(jiān)聽模式):工作在混雜模式下的網(wǎng)卡接收所有流過(guò)網(wǎng)卡的幀。</p><p>  網(wǎng)卡的缺省工作模式包含廣播模式和直接模式,即它只接收廣播數(shù)據(jù)包和發(fā)給自己的數(shù)據(jù)包。</p><p>  每張以太網(wǎng)卡擁有一個(gè)全球唯一的以太網(wǎng)地址。以太網(wǎng)地址是一個(gè)48位的二進(jìn)制數(shù)。在以太網(wǎng)卡

41、中內(nèi)建有一個(gè)數(shù)據(jù)包過(guò)濾器。當(dāng)網(wǎng)卡工作在廣播模式或直接模式時(shí),該數(shù)據(jù)包過(guò)濾器的作用是保留以本身網(wǎng)卡的MAC地址為通訊目的的數(shù)據(jù)包和廣播數(shù)據(jù)包。丟棄所有其他無(wú)關(guān)的數(shù)據(jù)包。以免除CPU對(duì)無(wú)關(guān)的數(shù)據(jù)包做無(wú)謂的處理。這是以太網(wǎng)卡在一般情況下的工作方式。在這種工作方式下,以太網(wǎng)卡只將接收到的數(shù)據(jù)包中與本機(jī)有關(guān)的部分向上傳遞。然而數(shù)據(jù)包過(guò)濾器是可以變成禁用的。禁用數(shù)據(jù)包過(guò)濾器后,網(wǎng)卡工作在混雜模式,將把接收到的所有數(shù)據(jù)包向上傳遞,上一層的軟件因此可以

42、監(jiān)聽以太網(wǎng)中其他計(jì)算機(jī)之間的通訊。</p><p>  網(wǎng)卡的“混雜模式”使得采用普通網(wǎng)卡作為網(wǎng)絡(luò)探針,實(shí)現(xiàn)網(wǎng)絡(luò)的監(jiān)聽變得非常容易。一方面方便了網(wǎng)絡(luò)管理,另一方面普通用戶能容易的偵聽網(wǎng)絡(luò)通訊,對(duì)用戶的數(shù)據(jù)通訊保密是一個(gè)很大的威脅。</p><p>  1.2 網(wǎng)絡(luò)數(shù)據(jù)包格式</p><p>  1.2.1 MAC幀結(jié)構(gòu)</p><p>  T

43、CP/IP只定義了應(yīng)用層、傳輸層、網(wǎng)際層(IP層)和數(shù)據(jù)鏈路層四個(gè)層次。無(wú)論TCP/IP應(yīng)用怎么封裝數(shù)據(jù),數(shù)據(jù)包在網(wǎng)絡(luò)中都將以MAC幀的形式出現(xiàn)。在同一網(wǎng)絡(luò)中的兩臺(tái)主機(jī)通信時(shí),源主機(jī)在傳輸層將應(yīng)用層數(shù)據(jù)加上報(bào)頭形成傳輸層數(shù)據(jù)包,傳給網(wǎng)絡(luò)層;網(wǎng)絡(luò)層將傳輸層的數(shù)據(jù)包(例如TCP數(shù)據(jù)包和UDP數(shù)據(jù)包)加上IP報(bào)頭,形成IP數(shù)據(jù)包,傳給數(shù)據(jù)鏈路層,數(shù)據(jù)鏈路層將IP數(shù)據(jù)包加上MAC報(bào)頭,形成MAC幀。MAC幀最終將被發(fā)送到網(wǎng)卡,發(fā)送到網(wǎng)絡(luò)中。MA

44、C幀由6Bit的目的MAC地址、6Bit的源MAC地址和2Bit的幀類型組成。其中幀類型字段用來(lái)標(biāo)識(shí)上一層使用的是什么協(xié)議。以便把MAC幀的數(shù)據(jù)上交給該協(xié)議。例如,當(dāng)幀類型字段的值是0800H時(shí),就表示上層使用的是TCP/IP協(xié)議。若類型字段的值為8137H,則表示該幀是由Novell NetWare工作站發(fā)過(guò)來(lái)的。</p><p>  1.2.2 IP數(shù)據(jù)包結(jié)構(gòu)</p><p>  在T

45、CP/IP中,一個(gè)IP數(shù)據(jù)包由一個(gè)報(bào)頭和一個(gè)報(bào)文部分組成。IP報(bào)頭定義了一些用于指示該分組數(shù)據(jù)特性的數(shù)據(jù)。IP報(bào)頭由一個(gè)20Bit的固定長(zhǎng)度部分和一個(gè)可選任意長(zhǎng)度部分構(gòu)成,其格式見圖1.1。 </p><p>  圖1.1 IP報(bào)頭結(jié)構(gòu)</p><p>  (1) 版本字段標(biāo)志:占4bit,指該分組采用的IP數(shù)據(jù)包結(jié)構(gòu)的版本號(hào),對(duì)于常用的IPV4來(lái)說(shuō),該字段的內(nèi)容為4;對(duì)于IPv6來(lái)說(shuō),

46、該字段的內(nèi)容為6。通信雙方使用的IP協(xié)議的版本必須一致。</p><p>  (2) IHL字段:報(bào)頭的長(zhǎng)度,以4Bit為單位,最小為5,最大值為15,即報(bào)頭的最大長(zhǎng)度為60Bit。當(dāng)IP分組的首部長(zhǎng)度不是4字節(jié)的整數(shù)倍時(shí),必須利用最后一個(gè)填充字段加以填充。因此數(shù)據(jù)部分永遠(yuǎn)在4字節(jié)的整數(shù)倍時(shí)開始,這樣在實(shí)現(xiàn)IP協(xié)議時(shí)較為方便。首部長(zhǎng)度限制為60字節(jié)的缺點(diǎn)是有時(shí)(如源站路由選擇)不夠用。但這樣做是希望用戶盡量減少開

47、銷。最常用的首部長(zhǎng)度就是20字節(jié),即不用任何選項(xiàng)。</p><p>  (3)服務(wù)類型字段:占8bit,主機(jī)能告訴子網(wǎng)它需要的服務(wù)。</p><p>  前3個(gè)比特表示優(yōu)先級(jí),它可使數(shù)據(jù)報(bào)具有8個(gè)優(yōu)先級(jí)中的一個(gè)。</p><p>  第4個(gè)比特是D比特,表示要求具有更低的時(shí)延。</p><p>  第5個(gè)比特是T比特,表示要求具有更高的吞吐量

48、。</p><p>  第6個(gè)比特是R比特,表示要求具有更高的可靠性(即在數(shù)據(jù)報(bào)傳送的過(guò)程中,被路由器丟棄的概率要更小些)。</p><p>  第7個(gè)比特是C比特,是新增加的,表示要求選擇費(fèi)用更低廉的路由。最后一個(gè)比特目前尚未使用。</p><p>  (4)總長(zhǎng):該數(shù)據(jù)包(包括報(bào)頭和報(bào)文)的長(zhǎng)度,總長(zhǎng)字段為16bit,因此數(shù)據(jù)報(bào)的最大長(zhǎng)度為是65 535字節(jié)。&

49、lt;/p><p>  (5)標(biāo)志字段:占16bit,它是一個(gè)計(jì)數(shù)器,用來(lái)產(chǎn)生數(shù)據(jù)報(bào)的標(biāo)識(shí)。但這里的“標(biāo)識(shí)”并沒(méi)有序號(hào)的意思,因?yàn)镮P是無(wú)連接服務(wù),數(shù)據(jù)報(bào)不存在按序接收的問(wèn)題。當(dāng)IP協(xié)議發(fā)送數(shù)據(jù)報(bào)時(shí),它就將這個(gè)計(jì)數(shù)器的當(dāng)前值復(fù)制到標(biāo)志字段中。當(dāng)數(shù)據(jù)報(bào)由于長(zhǎng)度超過(guò)網(wǎng)絡(luò)的MTU 而必須分片時(shí),這個(gè)標(biāo)志字段的值就被復(fù)制到所有的數(shù)據(jù)報(bào)的標(biāo)志字段中。相同的標(biāo)志字段的值使分片后的各數(shù)據(jù)報(bào)片最后能正確地重裝成為原來(lái)的數(shù)據(jù)報(bào)。<

50、;/p><p>  (6) DF, MF和分段偏移字段:指示該分組是否需要分段,是否全部到達(dá),該分段</p><p><b>  處于分組的位置。</b></p><p>  DF ( Don 't Fragment):意思使“不能分片”。只有當(dāng)DF=0時(shí)才允許分片。</p><p>  MF ( More Frag

51、ment):MF=1,表示后面“還有分片”的數(shù)據(jù)報(bào)。MF=0,表示這已是若干數(shù)據(jù)報(bào)片中的最后一個(gè)。</p><p>  分段偏移字段:較長(zhǎng)的分組在分片后,某片在原分組中的相對(duì)位置。也就是說(shuō),相對(duì)于用戶數(shù)據(jù)字段的起點(diǎn),該片從何處開始。片偏移以8個(gè)字節(jié)為偏移單位。片偏移等于5就表明偏移量為40字節(jié)。每個(gè)分片的長(zhǎng)度一定是8字節(jié)(64bit) 的整數(shù)倍。</p><p>  (7)生命期字段:用來(lái)

52、限制分組生命周期的計(jì)數(shù)器,即一個(gè)數(shù)據(jù)報(bào)在它通過(guò)互連網(wǎng)時(shí)必須具有受限的壽命,最長(zhǎng)生命周期為255s。這個(gè)字段用來(lái)控制數(shù)據(jù)報(bào)所通過(guò)路由器的最大跳數(shù)。當(dāng)源站發(fā)送數(shù)據(jù)報(bào)時(shí),它在此字段寫入一個(gè)數(shù)。這個(gè)數(shù)值約為任何兩個(gè)主機(jī)之間的路由器的兩倍。當(dāng)路由器收到一個(gè)數(shù)據(jù)報(bào)時(shí),它先將此字段的值減1。若在減1之后此字段的值是0,路由器就丟棄該數(shù)據(jù)報(bào)。</p><p>  (8)協(xié)議:占8bit,協(xié)議字段指出此數(shù)據(jù)報(bào)攜帶的數(shù)據(jù)是使用何種協(xié)

53、議,以便使目的主機(jī)的IP層知道應(yīng)將此數(shù)據(jù)報(bào)上交給哪個(gè)進(jìn)程。</p><p>  常用的一些協(xié)議和相應(yīng)的協(xié)議字段值如表一所示:</p><p>  表1-1 協(xié)議名和協(xié)議字段值 </p><p>  (9) 頭校驗(yàn):此字段只檢驗(yàn)數(shù)據(jù)報(bào)的首部,不包括數(shù)據(jù)部分。主要用于檢測(cè)以路由器中的內(nèi)存壞字帶來(lái)的錯(cuò)誤。</p><p>  (10) 源地址和目的

54、地址:該數(shù)據(jù)包的來(lái)源和去向。這是首部中最重要的字段。對(duì)于TCP/IP數(shù)據(jù)包而言,僅僅掌握IP數(shù)據(jù)包的格式,還不能將數(shù)據(jù)正文從數(shù)據(jù)包中完全分離出來(lái),還不能完全理解這個(gè)數(shù)據(jù)包的真正含義。在網(wǎng)絡(luò)層之上的傳輸層, TCP/IP定義了兩種數(shù)據(jù)傳輸協(xié)議:TCP和UDP,這兩種協(xié)議也相應(yīng)定義了不同的數(shù)據(jù)包結(jié)構(gòu)。</p><p>  1.2.3 TCP數(shù)據(jù)包和UDP數(shù)據(jù)包結(jié)構(gòu)</p><p>  TCP

55、(傳輸控制協(xié)議)是專門設(shè)計(jì)用于在不可靠的網(wǎng)絡(luò)上提供可靠的、端到端的字節(jié)流通信的協(xié)議。TCP的數(shù)據(jù)包結(jié)構(gòu)與IP數(shù)據(jù)包結(jié)構(gòu)相似,也有一個(gè)不少于20字節(jié)的可變長(zhǎng)度的報(bào)頭,其結(jié)構(gòu)如圖1.2所示。</p><p>  圖1.2 TCP報(bào)頭結(jié)構(gòu)</p><p>  (1) 源端口和目的端口字段:標(biāo)志出本地和遠(yuǎn)端的連接端口。16bit的端口號(hào)加上32bit的IP地址,構(gòu)成了插口(socket),它相當(dāng)

56、于運(yùn)輸層服務(wù)訪問(wèn)點(diǎn)的地址〔總共是48bit)。這些端口用來(lái)將若干高層協(xié)議向下復(fù)用,也用來(lái)將運(yùn)輸層協(xié)議向上分用。</p><p>  (2) 順序號(hào):占4字節(jié)。TCP是面向數(shù)據(jù)流的。TCP傳送的報(bào)文可看成連續(xù)的數(shù)據(jù)流,其中每一個(gè)字節(jié)都對(duì)應(yīng)于一個(gè)序號(hào)。首部中的“順序號(hào)”則指的是本報(bào)文段所發(fā)送的數(shù)據(jù)中第一個(gè)字節(jié)的序號(hào)。</p><p>  (3) 確認(rèn)號(hào)字段:占4字節(jié),是期望收到對(duì)方的下一個(gè)報(bào)文

57、段的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào),也就是期望收到的下一個(gè)報(bào)文段首部的序號(hào)字段的值。TCP流特有的,TCP對(duì)每個(gè)數(shù)據(jù)字節(jié)進(jìn)行編號(hào)。順序號(hào)標(biāo)志本分組的編號(hào),確認(rèn)號(hào)指示希望接收的下一個(gè)分組編號(hào)。</p><p>  (4) TCP頭長(zhǎng):占4bit,表明TCP報(bào)文段首部的長(zhǎng)度,以4字節(jié)為單位。這條信息對(duì)于定位確切的數(shù)據(jù)信息十分重要,因?yàn)檫x項(xiàng)字段的長(zhǎng)度是不固定的,只有通過(guò)TCP頭長(zhǎng)的內(nèi)容才能確認(rèn)選項(xiàng)字段的長(zhǎng)度。由于Obit能夠表

58、示的最大十進(jìn)制數(shù)字是15,因此報(bào)文段首部長(zhǎng)度最大值是60字節(jié)。</p><p>  (5) 保留:占6bit,保留為今后使用,但目前應(yīng)置為0。</p><p>  (6) 碼位:占6bit,包括URG,ACK,PSH,RST,SYN,FIN 等字段,標(biāo)志了該分組的控制功能。碼位各字段如圖1.3</p><p><b>  圖1.3 碼位</b&g

59、t;</p><p>  (7)窗口大小字段:占2字節(jié)。窗口字段用來(lái)控制對(duì)方發(fā)送的數(shù)據(jù)量,單位為字節(jié)。計(jì)算機(jī)網(wǎng)絡(luò)用接收能力的大小來(lái)控制發(fā)送端的數(shù)據(jù)發(fā)送量。TCP連接的一端根據(jù)自己緩存的空間大小確定自己的接收窗口大小,然后通知對(duì)方來(lái)確定對(duì)方的發(fā)送窗口。</p><p>  (8) 校驗(yàn)和:占2字節(jié),為了確保高可靠性而設(shè)置的。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分。</p>

60、<p>  (9)選項(xiàng):長(zhǎng)度可變。TCP只規(guī)定了一種選項(xiàng),即最大報(bào)文段長(zhǎng)度MSS( Maximum Segment Size)。MSS是TCP報(bào)文段中的數(shù)據(jù)字段的最大長(zhǎng)度。數(shù)據(jù)字段加上TCP首部才等于整個(gè)的TCP報(bào)文段。</p><p>  UDP數(shù)據(jù)包的報(bào)頭十分簡(jiǎn)單,固定為8Bit,內(nèi)容分別為2Bit的源端口、目的端口、UDP長(zhǎng)度和UDP校驗(yàn)和。其中UDP長(zhǎng)度標(biāo)志的是包括8Bit的報(bào)頭及后面的報(bào)文在內(nèi)

61、的數(shù)據(jù)包長(zhǎng)度;UDP校驗(yàn)和校驗(yàn)的是全部UDP數(shù)據(jù)包的內(nèi)容。UDP數(shù)據(jù)包的格式如圖1.4。</p><p>  圖1.4 UDP數(shù)據(jù)包的報(bào)頭格式</p><p>  1.3 WinPcap原理</p><p>  1.3.1 WinPcap概述</p><p>  WinPcap是windows平臺(tái)下一個(gè)免費(fèi)、公共的網(wǎng)絡(luò)訪問(wèn)系統(tǒng),是為L(zhǎng)inu

62、x 下的libpcap移植到windows平臺(tái)下實(shí)現(xiàn)數(shù)據(jù)包捕獲而設(shè)計(jì)的函數(shù)庫(kù),在設(shè)計(jì)WinPcap時(shí)參照了libpcap,使用方法也與libpcap相似,基于libpcap的程序可以很容易的移植到windows平臺(tái)下。它提供了以下的便利:</p><p><b>  捕獲原始數(shù)據(jù)包;</b></p><p>  在這些原始數(shù)據(jù)包被轉(zhuǎn)發(fā)到應(yīng)用程序前按照用戶要求進(jìn)行過(guò)濾;

63、</p><p>  把原始數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)上;</p><p><b>  收集網(wǎng)絡(luò)統(tǒng)計(jì)數(shù)據(jù)。</b></p><p>  下圖是WinPcap的組件圖。</p><p>  圖1.5 WinPcap的組件圖</p><p>  為了獲得網(wǎng)絡(luò)上的原始數(shù)據(jù),一個(gè)捕獲系統(tǒng)需要繞過(guò)操作系統(tǒng)協(xié)議棧。這

64、就需要有一段程序運(yùn)行在操作系統(tǒng)內(nèi)核中直接同網(wǎng)絡(luò)驅(qū)動(dòng)程序交互。這一段程序是系統(tǒng)獨(dú)立的,在WinPcap中實(shí)現(xiàn)為設(shè)備驅(qū)動(dòng)程序,叫做Netgroup Packet Filter(NPF)。NPF提供基本的特征如數(shù)據(jù)包捕獲和發(fā)送,以及更高級(jí)的特征如可編程過(guò)濾系統(tǒng)和監(jiān)聽引擎。可編程過(guò)濾系統(tǒng)可以減少捕獲的網(wǎng)絡(luò)流量,例如它可以只捕獲由特定主機(jī)發(fā)出的FTP流量。監(jiān)聽引擎提供了一個(gè)強(qiáng)大的但簡(jiǎn)單的獲得網(wǎng)絡(luò)統(tǒng)計(jì)信息的機(jī)制,例如可以獲得網(wǎng)絡(luò)負(fù)載或兩臺(tái)主機(jī)交換的

65、數(shù)據(jù)量。</p><p>  一個(gè)捕獲系統(tǒng)必須提供接口給用戶應(yīng)用程序來(lái)調(diào)用內(nèi)核功能。WinPcap提供了兩種不同的庫(kù):packet.dll和wpcap.ll。packet.dll提供了一個(gè)低層的獨(dú)立于操作系統(tǒng)的可編程API用來(lái)獲得驅(qū)動(dòng)程序功能。Wpacp.dll提供了高層的同libpcap兼容的捕獲接口集。這些接口是包捕獲以一種獨(dú)立于底層網(wǎng)絡(luò)硬件和操作系統(tǒng)的方式進(jìn)行。</p><p>  

66、1.3.2 WinPcap內(nèi)核層NPF</p><p>  NPF(Netgroup Packet Filter)是WinPcap的內(nèi)核組件,用于處理在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包以及給用戶層提供包捕獲接口。NPF的一些設(shè)計(jì)目標(biāo)或原則是:盡量減少數(shù)據(jù)包的丟失,在應(yīng)用程序忙時(shí)把數(shù)據(jù)包存儲(chǔ)在緩沖區(qū):減少上下文切換的次數(shù),在一次系統(tǒng)調(diào)用中傳遞多個(gè)數(shù)據(jù)包;傳遞用戶需要的數(shù)據(jù)包。圖 1.6 展示了NPF驅(qū)動(dòng)的結(jié)構(gòu)。</p>

67、;<p>  圖1.6 NPF設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)</p><p>  現(xiàn)代網(wǎng)卡(NlC) 都只有有限的內(nèi)存。這些內(nèi)存用于在高連接速度下接收和發(fā)送數(shù)據(jù)包,而不依賴于主機(jī)。而且,網(wǎng)卡執(zhí)行預(yù)先檢查,比如CRC校驗(yàn),短以太網(wǎng)幀檢查,這些數(shù)據(jù)包被存儲(chǔ)在網(wǎng)卡板上,無(wú)效的數(shù)據(jù)包能被馬上丟棄。</p><p>  一個(gè)設(shè)計(jì)良好的設(shè)備驅(qū)動(dòng)程序ISR只需做很少的事。首先它檢查這個(gè)中斷是否與它相關(guān)

68、(一個(gè)單一中斷在X86機(jī)器上能被多個(gè)設(shè)備共享)。接著,ISR調(diào)度一個(gè)低優(yōu)先級(jí)功能(Deferred Procddure Call,DPC),它將處理硬件請(qǐng)求并通知上層驅(qū)動(dòng)程序(比如數(shù)據(jù)包捕獲驅(qū)動(dòng)程序,協(xié)議層驅(qū)動(dòng)程序)數(shù)據(jù)包已被接收。CPU會(huì)在沒(méi)有中斷請(qǐng)求在等待時(shí)處理DPC例程。如果網(wǎng)卡中斷程序正在執(zhí)行操作,從網(wǎng)卡到來(lái)的中斷就會(huì)被取消,這是因?yàn)閿?shù)據(jù)包的處理需要在另一個(gè)包被處理之前完成。而且,由于中斷開銷很大,現(xiàn)代網(wǎng)卡允許在一個(gè)中斷上下文中

69、傳遞多個(gè)數(shù)據(jù)包,這樣,上層驅(qū)動(dòng)能一次處理多個(gè)數(shù)據(jù)包。</p><p>  如圖1.7 所示是從網(wǎng)卡到應(yīng)用程序的數(shù)據(jù)包傳遞路徑</p><p>  圖1.7 網(wǎng)卡到應(yīng)用程序途徑</p><p>  數(shù)據(jù)包捕獲組件通常對(duì)于其它軟件組件如協(xié)議棧透明,因此并不影響標(biāo)準(zhǔn)系統(tǒng)行為。它們僅僅在系統(tǒng)中插入一個(gè)鉤子(hook),使得它們能被通知,通常是通過(guò)一個(gè)回調(diào)函數(shù)(tap())

70、。在Win32中數(shù)據(jù)包捕獲組件通常實(shí)現(xiàn)為網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)程序。</p><p>  Tap()首先執(zhí)行的是過(guò)濾:數(shù)據(jù)包被判斷是否滿足用戶需要。從BPF繼承的NPF過(guò)濾引擎是一個(gè)具有簡(jiǎn)單指令集的虛擬機(jī)。WinPcap提供了用戶層API把過(guò)濾表達(dá)式轉(zhuǎn)換為虛擬機(jī)指令。當(dāng)數(shù)據(jù)包仍在網(wǎng)卡驅(qū)動(dòng)程序緩沖區(qū)時(shí)就執(zhí)行過(guò)濾以避免對(duì)不需要的數(shù)據(jù)包的拷貝,不過(guò)由于它們已被傳輸?shù)街鞔嬷?,所以這些數(shù)據(jù)包已經(jīng)消耗了總線資源。</p>

71、<p>  被過(guò)濾器接受的數(shù)據(jù)包被添加一些信息,如數(shù)據(jù)包長(zhǎng)度和接收時(shí)間戮,這些信息對(duì)于應(yīng)用程序處理數(shù)據(jù)包很有用。需要的數(shù)據(jù)包被拷貝到內(nèi)核緩沖區(qū),并等待被傳輸?shù)接脩魧?。緩沖區(qū)的大小和結(jié)構(gòu)都會(huì)對(duì)系統(tǒng)性能產(chǎn)生影響。一個(gè)大的設(shè)計(jì)得好的緩沖區(qū)能在網(wǎng)絡(luò)流量很大時(shí)降低用戶應(yīng)用程序緩慢執(zhí)行產(chǎn)生的代價(jià)并減少系統(tǒng)調(diào)用數(shù)。</p><p>  用戶層應(yīng)用程序通過(guò)讀系統(tǒng)調(diào)用把數(shù)據(jù)包從內(nèi)核緩沖區(qū)拷貝到用戶緩沖區(qū),一旦數(shù)據(jù)被拷貝

72、到用戶層,應(yīng)用程序馬上被喚醒進(jìn)行數(shù)據(jù)包的處理。</p><p>  1.3.3 WinPcap的數(shù)據(jù)結(jié)構(gòu)和主要功能函數(shù)</p><p> ?。?)WinPcap的數(shù)據(jù)結(jié)構(gòu)</p><p>  由于 winpcap的設(shè)計(jì)是基于Libpcap的,所以它使用了與Libpcap相同的數(shù)據(jù)結(jié)構(gòu),這里只介紹幾個(gè)WinPcap核心的數(shù)據(jù)結(jié)構(gòu)。</p><p&g

73、t;  1) 網(wǎng)絡(luò)接口的地址</p><p>  struct pcap_addr{</p><p>  struct sockaddr*next; /*指向下一個(gè)地址節(jié)點(diǎn)*/</p><p>  struct sockaddr*addr; /*網(wǎng)絡(luò)接口地址*/</p><p>  struct sockaddr*netmas

74、k; /*掩碼*/</p><p>  struct sockaddr*broadaddr;/*廣播地址*/</p><p>  struct sockaddr*dstaddr; /*目標(biāo)地址*/</p><p><b>  }</b></p><p>  2) WinPcap存儲(chǔ)文件類型</p>&l

75、t;p>  struct pcap_file_header{</p><p>  bpf_u_int32magic; /*文件類型*/</p><p>  u_short version_major; /*主版本號(hào)*/</p><p> ?。?)主要函數(shù)及相關(guān)功能</p><p>  l)pcap_t* pcap

76、_open_live(); 用于打開一個(gè)網(wǎng)絡(luò)接口進(jìn)行數(shù)據(jù)包捕獲。</p><p>  2)char * peap_lookupdev(); 功能是獲得本機(jī)的網(wǎng)絡(luò)接口</p><p>  3)int pcap_lookupnet(); 功能是獲取的網(wǎng)絡(luò)地址和掩碼。</p><p>  4)int pcap_dispatch();功能是(循環(huán))獲取網(wǎng)絡(luò)數(shù)據(jù)包。<

77、/p><p>  5)void pcap_dump(); 用于將包內(nèi)容輸出到由pcap_open_live()打開的文件中。</p><p>  6)int pcap_compile();用于將過(guò)濾規(guī)則字符串編譯成一個(gè)BPF內(nèi)核過(guò)濾程序。</p><p>  7)int pcap_setfilter(); 功能是設(shè)置BPF過(guò)濾規(guī)則。</p><p&g

78、t;  8)int pcap_datalink(); 功能是獲取數(shù)據(jù)鏈路層類型,如10M以太網(wǎng)、SLIP、PPP、FDDI、ATM、IEEE802.3等。</p><p>  9)void pcap_close0; 功能是關(guān)閉WinPcap關(guān)聯(lián)文件操作并回收資源。</p><p>  1.3.4 WinPcap優(yōu)化方法</p><p> ?。?) 設(shè)置適當(dāng)大小的內(nèi)核

79、緩存</p><p>  NPF中使用動(dòng)態(tài)的循環(huán)緩沖區(qū)作為內(nèi)核緩存。這是和BPF顯著的區(qū)別之一。內(nèi)核緩存在包捕獲開始時(shí)被分配,在結(jié)束時(shí)被釋放。利用循環(huán)緩存,NPF可以從核心態(tài)向用戶態(tài)一次傳送多個(gè)數(shù)據(jù)包,并且由于在傳送的過(guò)程中緩存中被已傳輸?shù)臄?shù)據(jù)占用的部分不停的被釋放,又可以存儲(chǔ)新捕獲的數(shù)據(jù)包,所以緩存的利用率很高。內(nèi)核緩存的默認(rèn)大小為1MB,因?yàn)檩^大的內(nèi)核緩存可以在應(yīng)用程序讀數(shù)據(jù)的速度跟不上NPF捕獲數(shù)據(jù)的速度時(shí)

80、減少丟包現(xiàn)象。</p><p>  可以通過(guò)調(diào)用wpcap.dll中的pcap_setbuf()函數(shù)或packet.dll中的packersetbuff()函數(shù)來(lái)改變內(nèi)核緩存的大小。一般來(lái)說(shuō)。較大的內(nèi)核緩存會(huì)提供較好的性能。</p><p>  (2)設(shè)置適當(dāng)大小的用戶級(jí)緩存</p><p>  用戶級(jí)緩存用來(lái)接收來(lái)自內(nèi)核緩存的數(shù)據(jù)包,它對(duì)于應(yīng)用程序是透明的,其默認(rèn)

81、大小為256KB。用戶級(jí)緩存的大小決定了在一個(gè)系統(tǒng)調(diào)用下能夠從內(nèi)核緩存接收來(lái)的數(shù)據(jù)包的最大數(shù)目。該數(shù)目越大,單位時(shí)間內(nèi)由于包拷貝而引起的系統(tǒng)調(diào)用就越少,從而使得用戶態(tài)和核心態(tài)間的上下文切換次數(shù)減少。但用戶級(jí)緩存也不宜過(guò)大,否則會(huì)造成不必要的內(nèi)存浪費(fèi)。內(nèi)核緩存和用戶級(jí)緩存的大小都可由用戶進(jìn)行調(diào)整。</p><p>  在wpcap.dll中必須通過(guò)修改pcap_open_live()函數(shù)的源代碼并重新編譯才能調(diào)整用

82、戶級(jí)緩存的大小。在packet.dll中則可通過(guò)packerinitpacket()函數(shù)來(lái)調(diào)整。經(jīng)測(cè)試,當(dāng)用戶級(jí)緩存和內(nèi)核緩存大小相等時(shí),整個(gè)系統(tǒng)可獲得最佳性能。但一般情況下將用戶級(jí)緩存設(shè)為內(nèi)核緩存的112或114大小即可。</p><p> ?。?)設(shè)置最為嚴(yán)格的過(guò)濾條件</p><p>  網(wǎng)絡(luò)信息監(jiān)控將獲取所有的網(wǎng)絡(luò)信息,但在實(shí)際應(yīng)用中,其中存在若干用戶不關(guān)心的數(shù)據(jù),或者稱為垃圾數(shù)據(jù)

83、,垃圾數(shù)據(jù)比重極大,嚴(yán)重影響了系統(tǒng)工作效率。事實(shí)上,網(wǎng)絡(luò)監(jiān)聽模塊過(guò)濾功能的效率是該網(wǎng)絡(luò)監(jiān)聽的關(guān)鍵,因?yàn)閷?duì)于網(wǎng)絡(luò)上的每一數(shù)據(jù)包都會(huì)使用該模塊處理,判斷是否符合過(guò)濾條件。低效率的過(guò)濾程序會(huì)導(dǎo)致數(shù)據(jù)包丟失、來(lái)不及分析處理等。</p><p>  WinPcap 中的NPF過(guò)濾機(jī)事實(shí)上是一個(gè)BPF虛擬機(jī)。而BPF提供了一種新的流量監(jiān)控結(jié)構(gòu),性能比其他工具有顯著提高。其主要原因如下:</p><p>

84、;  BPF使用基于寄存器的過(guò)濾機(jī),而類似的工具CSPF使用基于內(nèi)存堆棧的過(guò)濾機(jī)。在現(xiàn)代計(jì)算機(jī)中,內(nèi)存操作是系統(tǒng)的瓶頸所在。</p><p>  BPF使用簡(jiǎn)單的不共享方式緩存模型,充分利用現(xiàn)代計(jì)算機(jī)的大地址空間。</p><p>  BPF過(guò)濾器的過(guò)濾功能是通過(guò)虛擬機(jī)執(zhí)行過(guò)濾程序來(lái)實(shí)現(xiàn)的。過(guò)濾機(jī)主要由累加器、索引寄存器、數(shù)據(jù)存儲(chǔ)器和隱含的程序計(jì)數(shù)器幾部分組成。過(guò)濾程序(Filter Pr

85、ogram)實(shí)際上是一組過(guò)濾規(guī)則。過(guò)濾規(guī)則由用戶定義,以決定是否接收數(shù)據(jù)包和需要接收多少數(shù)據(jù)。每一條規(guī)則執(zhí)行一組操作,具體操作可以分為指令裝載、指令存儲(chǔ)、執(zhí)行算術(shù)指令、執(zhí)行跳轉(zhuǎn)指令、執(zhí)行返回指令等幾個(gè)類別。網(wǎng)絡(luò)監(jiān)測(cè)應(yīng)用可能只關(guān)心網(wǎng)絡(luò)數(shù)據(jù)流中的一個(gè)子集,因此數(shù)據(jù)包的過(guò)濾將大大提高系統(tǒng)的性能。為了減少內(nèi)存操作,以盡量避開瓶頸,包過(guò)濾應(yīng)該在數(shù)據(jù)包的原始位置進(jìn)行過(guò)濾,而不是首先拷貝數(shù)據(jù)。</p><p>  所以應(yīng)該設(shè)置

86、最為嚴(yán)格的過(guò)濾條件從而使NPF只NIC驅(qū)動(dòng)的緩存中拷貝盡可能少的數(shù)據(jù)包。如果不需要查看數(shù)據(jù)包的內(nèi)容,還可以進(jìn)一步設(shè)置過(guò)濾條件,使得只拷貝數(shù)據(jù)包的首部。這樣做消耗的系統(tǒng)資源少。在wpcap.dll中可調(diào)用pcap_setfilter()函數(shù)實(shí)現(xiàn)這一點(diǎn)。如果只是做流量統(tǒng)計(jì),則可以把內(nèi)核緩存設(shè)為0,并使用pcap_setmode()函數(shù)將NPF設(shè)為統(tǒng)計(jì)模式以獲得最佳性能。</p><p>  第2章 網(wǎng)絡(luò)數(shù)據(jù)流分析器

87、的設(shè)計(jì)</p><p><b>  2.1 需求分析</b></p><p>  2.1.1 功能需求</p><p>  現(xiàn)在人們對(duì)計(jì)算機(jī)信息安全要求越來(lái)越高,隨著計(jì)算機(jī)網(wǎng)絡(luò)的資源共享進(jìn)一步加強(qiáng),隨之而來(lái)的網(wǎng)絡(luò)安全問(wèn)題也日益突出,容易收到一些惡意主機(jī)的攻擊,當(dāng)受到攻擊時(shí),主機(jī)就會(huì)受到許多來(lái)自同一源地址的數(shù)據(jù)包,通過(guò)數(shù)據(jù)包的分析就可以進(jìn)行有效的

88、防范,所以現(xiàn)實(shí)中越來(lái)越需要對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行分析監(jiān)控。若要實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)數(shù)據(jù)流的分析,必須要捕獲流經(jīng)本主機(jī)的數(shù)據(jù)包,將數(shù)據(jù)包保存到文件,然后對(duì)捕獲的數(shù)據(jù)包進(jìn)行分析然后對(duì)數(shù)據(jù)包進(jìn)行分析,比如發(fā)送數(shù)據(jù)包的主機(jī)地址、目的地址、長(zhǎng)度、協(xié)議類型以及到達(dá)主機(jī)的時(shí)間等等。 </p><p>  雖然在以太網(wǎng)中,我們可以對(duì)流經(jīng)主機(jī)的數(shù)據(jù)包進(jìn)行捕獲,但是這種做法需要消耗系統(tǒng)資源非常多,另一方面流經(jīng)主機(jī)的網(wǎng)絡(luò)數(shù)據(jù)流非常多,我們不可能也沒(méi)有

89、必要捕獲所有的數(shù)據(jù)包,所以在設(shè)計(jì)系統(tǒng)是需要考慮對(duì)捕獲數(shù)據(jù)包的過(guò)程設(shè)置一些過(guò)濾條件,減小捕獲數(shù)據(jù)包的數(shù)量,只捕獲我們感興趣的數(shù)據(jù)包就可以了,其它數(shù)據(jù)包就可以都丟掉,比如設(shè)置過(guò)濾條件只捕獲從某一主機(jī)法向另一主機(jī)的數(shù)據(jù)包,這樣就可以節(jié)省系統(tǒng)資源,同時(shí)也能更有效的對(duì)網(wǎng)絡(luò)數(shù)據(jù)流進(jìn)行分析。</p><p>  2.1.2 開發(fā)環(huán)境</p><p> ?。?) Visual C++簡(jiǎn)介</p>

90、;<p>  Visual C++ 6.0編程語(yǔ)言是由Microsoft公司推出的目前極為廣泛的可視化開發(fā)工具,利用Visual C++ 6.0可以開發(fā)基于Widnows平臺(tái)的32位應(yīng)用程序,依靠強(qiáng)大的編譯器以及網(wǎng)絡(luò)與數(shù)據(jù)庫(kù)的開發(fā)能力,用Visual C++ 6.0可以開發(fā)出功能強(qiáng)大的應(yīng)用程序。本書是在面向?qū)ο缶幊趟枷氲幕A(chǔ)上,融合了利用Visual C++ 6.0開發(fā)Windows下應(yīng)用程序的理論和實(shí)踐,全面和深入的介紹

91、了利用Visual C++ 6.0開發(fā)應(yīng)用程序的常用方法和技巧,內(nèi)容涵蓋了Visual C++ 6.0編制應(yīng)用程序的一些基礎(chǔ)知識(shí)、圖形和圖像處理技術(shù)、MFC編程及異常處理、模式和非模式對(duì)話、線程、ActiveX及其控件設(shè)計(jì)、多媒體程序設(shè)計(jì)、SDI和MDI等窗體的編程技巧、數(shù)據(jù)庫(kù)與網(wǎng)絡(luò)程序設(shè)計(jì)。在介紹各種編程方法和常用技巧的同時(shí),擯棄了繁冗的文字平鋪直敘,而是通過(guò)程序設(shè)計(jì)實(shí)例的方法向讀者介紹VC++編程的常見思路和它的高級(jí)應(yīng)用。</

92、p><p><b> ?。?) MFC簡(jiǎn)介</b></p><p>  MFC,微軟基礎(chǔ)類(Microsoft Foundation Classes),實(shí)際上是微軟提供的,用于在C++環(huán)境下編寫應(yīng)用程序的一個(gè)框架和引擎,VC++是WinOS下開發(fā)人員使用的專業(yè)C++ SDK(SDK,Standard SoftWare Develop Kit,專業(yè)軟件開發(fā)平臺(tái)),MFC就是

93、掛在它之上的一個(gè)輔助軟件開發(fā)包,MFC作為與VC++血肉相連的部分,MFC同BC++集成的VCL一樣是一個(gè)非外掛式的軟件包,類庫(kù),只不過(guò)MFC類是微軟為VC++專配的。</p><p>  MFC是微軟封裝了的API。windows作為一個(gè)提供功能強(qiáng)大的應(yīng)用程序接口編程的操作系統(tǒng),的確方便了許多程序員,傳統(tǒng)的win32開發(fā)(直接使用windows的接口函數(shù)API)對(duì)于程序員來(lái)說(shuō)非常的困難,因?yàn)锳PI函數(shù)實(shí)在太多了

94、,而且名稱很亂,從零構(gòu)架一個(gè)窗口動(dòng)輒就是上百行的代碼。MFC是面向?qū)ο蟪绦蛟O(shè)計(jì)與Application framework的完美結(jié)合,他將傳統(tǒng)的API進(jìn)行了分類封裝,并且為你創(chuàng)建了程序的一般框架,MFC,微軟基礎(chǔ)類(Microsoft Foundation Classes),同VCL類似,是一種Application Framework,隨微軟Visual C++ 開發(fā)工具發(fā)布。目前最新版本為8.0(截止2007年初)。該類庫(kù)提供一組通

95、用的可重用的類庫(kù)供開發(fā)人員使用。大部分類均從CObject 直接或間接派生,只有少部分類例外。MFC 應(yīng)用程序的總體結(jié)構(gòu)通常由由開發(fā)人員從MFC類派生的幾個(gè)類和一個(gè)CWinApp類對(duì)象(應(yīng)用程序?qū)ο螅┙M成。MFC 提供了MFC AppWizard 自動(dòng)生成框架。</p><p>  此外MFC的部分類為MFC/ATL 通用,可以在Win32 應(yīng)用程序中單獨(dú)包含并使用這些類。MFC的使用只能提高某些情況下的開發(fā)效率

96、,只起到輔助作用,而不能替代整個(gè)Win32 程序設(shè)計(jì)。</p><p><b>  2.2 系統(tǒng)設(shè)計(jì)</b></p><p>  此設(shè)計(jì)框架采用MFC向?qū)?chuàng)建,是基于對(duì)話框的應(yīng)用程序。主要設(shè)計(jì)了以下幾個(gè)模塊:數(shù)據(jù)包捕獲模塊、數(shù)據(jù)包過(guò)濾模塊、數(shù)據(jù)包分析模塊。</p><p>  以下具體介紹各個(gè)模塊:</p><p>  

97、2.2.1 數(shù)據(jù)包捕獲模塊</p><p>  這是整個(gè)系統(tǒng)的基礎(chǔ)模塊。它專門負(fù)責(zé)從網(wǎng)絡(luò)上抓取數(shù)據(jù)包,提供給上層應(yīng)用程序分析處理。對(duì)系統(tǒng)緩存的調(diào)整可由用戶態(tài)程序完成。由于現(xiàn)在計(jì)算機(jī)的內(nèi)存都較大,所以我為系統(tǒng)緩存開辟了2M的空間,這對(duì)于暫存數(shù)據(jù)包來(lái)說(shuō)已足夠了。而對(duì)用戶級(jí)緩存的調(diào)整必須通過(guò)重新修改并編譯 pcap_open_live() 函數(shù)的源代碼來(lái)完成。為了使系統(tǒng)達(dá)到最佳性能,用戶空間也設(shè)為2M。</p&g

98、t;<p>  在當(dāng)用戶向應(yīng)用程序界面發(fā)送“開始捕獲”的命令后,捕獲進(jìn)程即啟動(dòng),隨后捕獲進(jìn)程一直循環(huán)捕獲數(shù)據(jù)包,將之放入緩存供應(yīng)用程序使用。每次捕獲還應(yīng)同時(shí)記錄下抓獲該數(shù)據(jù)幀的時(shí)間、大小等信息,以備后續(xù)統(tǒng)計(jì)模塊等查詢使用。用戶通過(guò)發(fā)送“停止捕獲”的命令來(lái)結(jié)束捕獲進(jìn)程。</p><p>  具體的編程思想和流程如下:</p><p>  (1) 找到本機(jī)所有的網(wǎng)絡(luò)端口并決定用哪

99、一個(gè)網(wǎng)絡(luò)端口進(jìn)行捕獲??梢杂靡粋€(gè)字符串 (char*)來(lái)定義這個(gè)設(shè)備或者采用用戶在命令行直接指定用來(lái)提供的端口名來(lái)定義。</p><p>  (2) 初始化捕獲程序。要設(shè)置程序?qū)κ裁丛O(shè)備進(jìn)行捕獲,在捕獲多個(gè)設(shè)備時(shí),可以使用文件句柄(handle)區(qū)分不同的設(shè)備。接下來(lái)就要對(duì)選定的網(wǎng)卡進(jìn)行設(shè)置,將捕獲的包長(zhǎng)度,等待時(shí)間,網(wǎng)卡工作模式作為命令的參數(shù)記錄下來(lái)。</p><p>  (3) 設(shè)置過(guò)

100、濾器。如果只想捕獲特定的傳輸,就必須創(chuàng)建一個(gè)過(guò)濾規(guī)則集合編譯并且加載到WinPcap引擎上,這是編寫數(shù)據(jù)包捕獲應(yīng)用程序最主要的步驟。過(guò)濾規(guī)則集合被保存在一個(gè)字符串內(nèi)并且被轉(zhuǎn)換成能被winPcap引擎識(shí)別的格式才能被編譯,然后可以通知WinPcap引擎應(yīng)用編譯的規(guī)則作為捕獲和過(guò)濾的規(guī)則。</p><p>  (4) 捕獲數(shù)據(jù)。通過(guò)使捕獲功能模塊進(jìn)入它的主體循環(huán)來(lái)實(shí)現(xiàn)數(shù)據(jù)包的捕獲。有兩種方法可以用來(lái)捕獲數(shù)據(jù)包:要么一

101、次捕獲一個(gè)滿足條件的數(shù)據(jù)包,要么進(jìn)入一個(gè)循環(huán)過(guò)程捕獲指定數(shù)量數(shù)據(jù)包然后退出。</p><p>  (5) 解析數(shù)據(jù)包。捕獲到的數(shù)據(jù)包的頭部包含有關(guān)的協(xié)議信息和有關(guān)包的地址信息,這部分的程序就是來(lái)分析和解釋已經(jīng)捕獲的數(shù)據(jù)包的協(xié)議結(jié)構(gòu)。</p><p>  WinPcap的工作原理示意圖如圖2.1所示。</p><p>  2.2.2 數(shù)據(jù)包過(guò)濾模塊</p>

102、<p>  本模塊負(fù)責(zé)設(shè)置過(guò)濾條件,從而驅(qū)動(dòng)NPF的過(guò)濾機(jī)來(lái)對(duì)尚在NIC緩存中的數(shù)據(jù)包進(jìn)行過(guò)濾,這樣就使得只有用戶真正需要的數(shù)據(jù)包被復(fù)制到NPF的系統(tǒng)緩存,大大提高了軟件的效率。</p><p>  過(guò)濾條件設(shè)置的界面要靈活,要能讓用戶任意選擇需要的協(xié)議數(shù)據(jù)包,還要讓用戶能夠根據(jù)數(shù)據(jù)包的地址或是主機(jī)名進(jìn)行過(guò)濾。用戶通過(guò)在程序界面上選擇需要的協(xié)議以及指</p><p>  圖2

103、.1 數(shù)據(jù)包捕獲流程</p><p>  定數(shù)據(jù)幀IP地址或主機(jī)名后,過(guò)濾模塊將獲得該過(guò)濾條件字符串,并驗(yàn)證它的有效性。如果是按規(guī)則生成的字符串,則對(duì)它進(jìn)行編譯,然后將其設(shè)置為NPF過(guò)濾機(jī)的過(guò)濾規(guī)則。數(shù)據(jù)包過(guò)濾模塊的實(shí)現(xiàn)基于NPP的過(guò)濾機(jī)。</p><p>  在此界面中,用戶可以通過(guò)樹型列表選擇自己想要捕獲的協(xié)議,或者規(guī)定源 (目的)IP地址,或者是源(目的)主機(jī)名。然后系統(tǒng)根據(jù)用戶的

104、選擇自動(dòng)產(chǎn)生一個(gè)符合過(guò)濾表達(dá)式書寫規(guī)則的字符串,將其編譯后設(shè)置為NPF的過(guò)濾條件。此后,系統(tǒng)捕獲的就只有符合過(guò)濾規(guī)則的數(shù)據(jù)包了。</p><p>  2.2.3 數(shù)據(jù)包分析模塊</p><p>  本模塊是對(duì)由數(shù)據(jù)包捕獲模塊得到的數(shù)據(jù)包進(jìn)行分析,解析出其各層協(xié)議的協(xié)議頭(header),分析各個(gè)域的內(nèi)容,并獲得該數(shù)據(jù)幀的源或目的地址,從而達(dá)到網(wǎng)絡(luò)監(jiān)控的目的。在數(shù)據(jù)包分析模塊中,將有一個(gè)協(xié)議

105、分析類,由它來(lái)發(fā)起對(duì)數(shù)據(jù)幀的分析命令,然后逐層對(duì)其按照所屬的協(xié)議進(jìn)行分析,再將分析的結(jié)果以及協(xié)議的數(shù)據(jù)內(nèi)容存放入相應(yīng)的協(xié)議對(duì)象中。該模塊將在一個(gè)循環(huán)中對(duì)捕獲來(lái)的一系列數(shù)據(jù)包依次進(jìn)行協(xié)議分析,并將它們實(shí)例化為相應(yīng)協(xié)議對(duì)象保存起來(lái)。最后將分析的結(jié)果向用戶顯現(xiàn)。</p><p>  數(shù)據(jù)包解碼:主要是調(diào)用各種解碼函數(shù)對(duì)獲取的報(bào)文進(jìn)行分析,主要支持ICMP、TCP、UDP、IP等協(xié)議。將數(shù)據(jù)包解碼后,通過(guò)指針連接到系統(tǒng)預(yù)

106、定義的存儲(chǔ)包解碼結(jié)果的結(jié)構(gòu)Packet中,以統(tǒng)一的Packet結(jié)構(gòu)將解碼后數(shù)據(jù)傳輸?shù)揭?guī)則解析、模式匹配以及系統(tǒng)響應(yīng)功能塊中去,以避免內(nèi)存復(fù)制造成不必要的開銷。數(shù)據(jù)包分析流程如圖2.2。</p><p>  圖2.2 數(shù)據(jù)包分析流程</p><p>  第3章 網(wǎng)絡(luò)數(shù)據(jù)流分析器的實(shí)現(xiàn)</p><p>  3.1 網(wǎng)絡(luò)數(shù)據(jù)流分析器的實(shí)現(xiàn)</p>&l

107、t;p>  此設(shè)計(jì)框架采用MFC向?qū)?chuàng)建,是基于對(duì)話框的應(yīng)用程序。主要設(shè)計(jì)了以下幾個(gè)模塊:數(shù)據(jù)包捕獲模塊、數(shù)據(jù)包過(guò)濾模塊、數(shù)據(jù)包分析模塊。</p><p>  以下具體介紹各個(gè)模塊的實(shí)現(xiàn):</p><p>  3.1.1 數(shù)據(jù)包捕獲模塊的實(shí)現(xiàn)</p><p>  數(shù)據(jù)包捕獲的代碼主要在CPktCptDlg對(duì)話框中實(shí)現(xiàn)。當(dāng)點(diǎn)擊對(duì)話框中的"Start&q

溫馨提示

  • 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ù)僅提供信息存儲(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)論