2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  畢 業(yè) 設(shè) 計</p><p>  題 目: 基于WinPcap的網(wǎng)絡(luò)數(shù)據(jù)流 </p><p>  分析器的設(shè)計與實現(xiàn) </p><p>  系: 計算機科學(xué)與技術(shù)系 </p><p>  專

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

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

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

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

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

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

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

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

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

11、<p>  第14~15周 撰寫畢業(yè)論文(說明書),完成畢業(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è)計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è)計18</p><p>  2.2.1 數(shù)據(jù)包捕獲模塊18</p><p>  2.2.2 數(shù)據(jù)包過濾模塊19</p><p>  2.2.3 數(shù)據(jù)包分析模塊20</p>&l

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

17、2 系統(tǒng)測試31</p><p>  3.2.1 運行環(huán)境31</p><p>  3.2.2 系統(tǒng)測試結(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è)計與實現(xiàn)</p><p>  摘要:本課題針對網(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)基本實現(xiàn)機理、方法和手段,還列舉了當(dāng)前正在應(yīng)用的網(wǎng)絡(luò)分析系統(tǒng)。接

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

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

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

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

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

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

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

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

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

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

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

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

35、、分析等機制進(jìn)行詳細(xì)討論。本課題實現(xiàn)一個網(wǎng)絡(luò)數(shù)據(jù)流分析的應(yīng)用程序來展示、驗證、實現(xiàn)論文中討論的概念、原理、機制。</p><p>  第1章 數(shù)據(jù)包的捕獲原理</p><p>  1.1 網(wǎng)卡工作原理</p><p>  網(wǎng)卡是插在個人計算機或服務(wù)器擴展槽內(nèi)的擴展卡,其功能主要是充當(dāng)計算機和網(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)卡具有一組配置選項以保證網(wǎng)卡能與工作站中其他外部設(shè)備共存,并且正確地響應(yīng)操作系統(tǒng)。支配網(wǎng)卡操作的兩個重要的參數(shù)是它的端口地址和中斷。端口地址與網(wǎng)卡地址是不同的。網(wǎng)卡地址是指網(wǎng)卡在整個網(wǎng)絡(luò)中唯一的標(biāo)識值,而端口地址即IP地址是工作站使用的十六進(jìn)制數(shù),常用的缺省地址是300H。工作站的端口地址必須配置成能正確發(fā)送

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

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

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

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

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

42、監(jiān)聽以太網(wǎng)中其他計算機之間的通訊。</p><p>  網(wǎng)卡的“混雜模式”使得采用普通網(wǎng)卡作為網(wǎng)絡(luò)探針,實現(xiàn)網(wǎng)絡(luò)的監(jiān)聽變得非常容易。一方面方便了網(wǎng)絡(luò)管理,另一方面普通用戶能容易的偵聽網(wǎng)絡(luò)通訊,對用戶的數(shù)據(jù)通訊保密是一個很大的威脅。</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ù)鏈路層四個層次。無論TCP/IP應(yīng)用怎么封裝數(shù)據(jù),數(shù)據(jù)包在網(wǎng)絡(luò)中都將以MAC幀的形式出現(xiàn)。在同一網(wǎng)絡(luò)中的兩臺主機通信時,源主機在傳輸層將應(yīng)用層數(shù)據(jù)加上報頭形成傳輸層數(shù)據(jù)包,傳給網(wǎng)絡(luò)層;網(wǎng)絡(luò)層將傳輸層的數(shù)據(jù)包(例如TCP數(shù)據(jù)包和UDP數(shù)據(jù)包)加上IP報頭,形成IP數(shù)據(jù)包,傳給數(shù)據(jù)鏈路層,數(shù)據(jù)鏈路層將IP數(shù)據(jù)包加上MAC報頭,形成MAC幀。MAC幀最終將被發(fā)送到網(wǎng)卡,發(fā)送到網(wǎng)絡(luò)中。MA

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

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

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

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

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

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

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

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

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

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

54、地址:該數(shù)據(jù)包的來源和去向。這是首部中最重要的字段。對于TCP/IP數(shù)據(jù)包而言,僅僅掌握IP數(shù)據(jù)包的格式,還不能將數(shù)據(jù)正文從數(shù)據(jù)包中完全分離出來,還不能完全理解這個數(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è)計用于在不可靠的網(wǎng)絡(luò)上提供可靠的、端到端的字節(jié)流通信的協(xié)議。TCP的數(shù)據(jù)包結(jié)構(gòu)與IP數(shù)據(jù)包結(jié)構(gòu)相似,也有一個不少于20字節(jié)的可變長度的報頭,其結(jié)構(gòu)如圖1.2所示。</p><p>  圖1.2 TCP報頭結(jié)構(gòu)</p><p>  (1) 源端口和目的端口字段:標(biāo)志出本地和遠(yuǎn)端的連接端口。16bit的端口號加上32bit的IP地址,構(gòu)成了插口(socket),它相當(dāng)

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

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

58、示的最大十進(jìn)制數(shù)字是15,因此報文段首部長度最大值是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é)。窗口字段用來控制對方發(fā)送的數(shù)據(jù)量,單位為字節(jié)。計算機網(wǎng)絡(luò)用接收能力的大小來控制發(fā)送端的數(shù)據(jù)發(fā)送量。TCP連接的一端根據(jù)自己緩存的空間大小確定自己的接收窗口大小,然后通知對方來確定對方的發(fā)送窗口。</p><p>  (8) 校驗和:占2字節(jié),為了確保高可靠性而設(shè)置的。檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分。</p>

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

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

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

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

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

65、數(shù)據(jù)量。</p><p>  一個捕獲系統(tǒng)必須提供接口給用戶應(yīng)用程序來調(diào)用內(nèi)核功能。WinPcap提供了兩種不同的庫:packet.dll和wpcap.ll。packet.dll提供了一個低層的獨立于操作系統(tǒng)的可編程API用來獲得驅(qū)動程序功能。Wpacp.dll提供了高層的同libpcap兼容的捕獲接口集。這些接口是包捕獲以一種獨立于底層網(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è)計目標(biāo)或原則是:盡量減少數(shù)據(jù)包的丟失,在應(yīng)用程序忙時把數(shù)據(jù)包存儲在緩沖區(qū):減少上下文切換的次數(shù),在一次系統(tǒng)調(diào)用中傳遞多個數(shù)據(jù)包;傳遞用戶需要的數(shù)據(jù)包。圖 1.6 展示了NPF驅(qū)動的結(jié)構(gòu)。</p>

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

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

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

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

71、<p>  被過濾器接受的數(shù)據(jù)包被添加一些信息,如數(shù)據(jù)包長度和接收時間戮,這些信息對于應(yīng)用程序處理數(shù)據(jù)包很有用。需要的數(shù)據(jù)包被拷貝到內(nèi)核緩沖區(qū),并等待被傳輸?shù)接脩魧?。緩沖區(qū)的大小和結(jié)構(gòu)都會對系統(tǒng)性能產(chǎn)生影響。一個大的設(shè)計得好的緩沖區(qū)能在網(wǎng)絡(luò)流量很大時降低用戶應(yīng)用程序緩慢執(zhí)行產(chǎn)生的代價并減少系統(tǒng)調(diào)用數(shù)。</p><p>  用戶層應(yīng)用程序通過讀系統(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è)計是基于Libpcap的,所以它使用了與Libpcap相同的數(shù)據(jù)結(jié)構(gòu),這里只介紹幾個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; /*指向下一個地址節(jié)點*/</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存儲文件類型</p>&l

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

76、_open_live(); 用于打開一個網(wǎng)絡(luò)接口進(jìn)行數(shù)據(jù)包捕獲。</p><p>  2)char * peap_lookupdev(); 功能是獲得本機的網(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ī)則字符串編譯成一個BPF內(nèi)核過濾程序。</p><p>  7)int pcap_setfilter(); 功能是設(shè)置BPF過濾規(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>  (1) 設(shè)置適當(dāng)大小的內(nèi)核

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

94、,而且名稱很亂,從零構(gòu)架一個窗口動輒就是上百行的代碼。MFC是面向?qū)ο蟪绦蛟O(shè)計與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年初)。該類庫提供一組通

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

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

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

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

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

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

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

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

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

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

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

106、定義的存儲包解碼結(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ù)流分析器的實現(xiàn)</p><p>  3.1 網(wǎng)絡(luò)數(shù)據(jù)流分析器的實現(xiàn)</p>&l

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

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論