網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計(jì)開發(fā)—畢業(yè)設(shè)計(jì)論文_第1頁
網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計(jì)開發(fā)—畢業(yè)設(shè)計(jì)論文_第2頁
網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計(jì)開發(fā)—畢業(yè)設(shè)計(jì)論文_第3頁
網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計(jì)開發(fā)—畢業(yè)設(shè)計(jì)論文_第4頁
網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計(jì)開發(fā)—畢業(yè)設(shè)計(jì)論文_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、畢畢 業(yè)業(yè) 設(shè)設(shè) 計(jì)計(jì)( 論論 文文)網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計(jì)開發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計(jì)開發(fā)論論文作者姓名:文作者姓名:申申請(qǐng)請(qǐng)學(xué)位學(xué)位專業(yè)專業(yè): :申申請(qǐng)請(qǐng)學(xué)位學(xué)位類別類別: :指指導(dǎo)導(dǎo)教教師師姓姓名名( (職職稱稱) ): :論論文提交日期:文提交日期:網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計(jì)開發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計(jì)開發(fā)摘摘 要要本文設(shè)計(jì)與實(shí)現(xiàn)了一個(gè)基于Linux下Libpcap庫函數(shù)的網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序。程序的主要功能包括網(wǎng)絡(luò)數(shù)據(jù)包捕獲和常用網(wǎng)絡(luò)協(xié)議分析。程序由輸入/輸出模塊、規(guī)則匹配模塊、數(shù)據(jù)捕獲模塊、協(xié)議分析模塊組成。其中數(shù)據(jù)捕獲模塊和協(xié)議分析模塊是本程序最關(guān)鍵、最

2、主要的模塊。本文的主要內(nèi)容如下:首先介紹了網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的背景和概念。其次進(jìn)行了程序的總體設(shè)計(jì):確定了程序的功能,給出了程序的結(jié)構(gòu)圖和層次圖,描述了程序的工作流程,對(duì)實(shí)現(xiàn)程序的關(guān)鍵技術(shù)做出了分析。接著,介紹完數(shù)據(jù)包捕獲的相關(guān)背景和Libpcap函數(shù)庫后,闡述了如何利用Libpcap函數(shù)庫實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包捕獲模塊。然后對(duì)協(xié)議分析流程進(jìn)行了詳細(xì)的講解,分析了常用網(wǎng)絡(luò)協(xié)議。最后進(jìn)行了程序的測試與運(yùn)行:測試了程序能否按照預(yù)期的效果正確執(zhí)行,印證了預(yù)期結(jié)果。關(guān)鍵詞:關(guān)鍵詞:Libpcap;Linux;數(shù)據(jù)包捕獲;應(yīng)用層;協(xié)議識(shí)別The Design and Development of Netwo

3、rk Packet Protocol Analyzing ProgramAbstractThe thesis is an attempt to introduce an implementation of network protocol analyzing program which is based on Libpcap, a famous network packet capture library on Linux. It has a rich feature set which includes capturing network packets and analyzing popu

4、lar network protocols on Internet. The program is made up of an input/output module, a rules matching module, a packet capturing module and a protocol analyzing module. And the last two modules are key modules.The research work was described as followed. firstly, we introduce the background and conc

5、epts about network protocol analyzing programs; and we make an integrated design on the program, define functions of it, figure out its structure and hierarchical graphs, describe the workflow of it, and analyze the key techniques used in it; Secondly, after elaborating on the background of packet c

6、apture and the Libpcap library, we state a approach to implement a packet capture module with Libpcap; Thirdly, we explain the workflow about protocol analysis, and analyze common network protocols; Finally, we test our program to see whether it works as expected, fortunately, it does.Key words: Lib

7、pcap; Linux; Network packet capturing; Application layer; Protocol identification 目目 錄錄論文總頁數(shù):23 頁1引言.11.1課題背景.11.2網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序簡介.21.3國內(nèi)外研究現(xiàn)狀.22網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的總體設(shè)計(jì).32.1網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的功能分析.32.2系統(tǒng)的組成結(jié)構(gòu)和工作流程.32.2.1系統(tǒng)的結(jié)構(gòu)框圖.32.2.2系統(tǒng)的結(jié)構(gòu)和功能.42.2.3程序的工作流程.52.3系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)分析.63網(wǎng)絡(luò)數(shù)據(jù)包捕獲模塊的實(shí)現(xiàn).73.1網(wǎng)絡(luò)數(shù)據(jù)包捕獲簡介.73.2基于 LIBPCAP的

8、網(wǎng)絡(luò)數(shù)據(jù)包捕獲的實(shí)現(xiàn).83.2.1Libpcap 安裝.83.2.2Libpcap 中基本的數(shù)據(jù)結(jié)構(gòu)和函數(shù).83.3數(shù)據(jù)捕獲模塊的實(shí)現(xiàn).114協(xié)議分析模塊的實(shí)現(xiàn).114.1網(wǎng)絡(luò)協(xié)議分析的總體流程.124.2對(duì) TCP/IP 模型中各層協(xié)議的分析.144.2.1以太網(wǎng)首部的分析與提取.144.2.2IP 首部的分析與提取.154.2.3TCP/UDP 首部的分析與提取.164.2.4應(yīng)用層協(xié)議的識(shí)別與分析.185程序運(yùn)行與測試.205.1測試環(huán)境.205.1.1硬件環(huán)境.205.1.2程序運(yùn)行環(huán)境.205.2測試步驟.205.3測試結(jié)果評(píng)價(jià).20結(jié) 論.20參考文獻(xiàn).21致 謝.22聲 明.23

9、1 1 引言引言1.11.1 課題背景課題背景隨著計(jì)算機(jī)網(wǎng)絡(luò)的不斷發(fā)展,全球信息化已成為當(dāng)今社會(huì)發(fā)展的趨勢。但由于計(jì)算機(jī)網(wǎng)絡(luò)自身所特具有的特點(diǎn),比如聯(lián)結(jié)形式多樣性和網(wǎng)絡(luò)的開放性、互連性等特征,所以導(dǎo)致網(wǎng)絡(luò)易受黑客還有一些病毒的攻擊。所以網(wǎng)上信息的安全和保密是一個(gè)至關(guān)重要的問題。對(duì)于軍用的自動(dòng)化指揮網(wǎng)絡(luò)和銀行等傳輸敏感數(shù)據(jù)的計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)而言,其網(wǎng)上信息的安全和保密尤為重要。因此,網(wǎng)絡(luò)必須有足夠強(qiáng)的安全措施,否則該網(wǎng)絡(luò)將是個(gè)無用、甚至?xí)<皣野踩木W(wǎng)絡(luò)。在計(jì)算機(jī)網(wǎng)絡(luò)的世界里,存在著很多潛在的威脅,因此網(wǎng)絡(luò)的安全措施應(yīng)能全方位地應(yīng)對(duì)各種不同的威脅,這樣才可以真正的做到網(wǎng)絡(luò)服務(wù)于社會(huì),體現(xiàn)網(wǎng)絡(luò)的先

10、進(jìn)性。計(jì)算機(jī)網(wǎng)絡(luò)所面臨的威脅大體可分為兩種:一是對(duì)網(wǎng)絡(luò)中信息的威脅;二是對(duì)網(wǎng)絡(luò)中設(shè)備的威脅。影響計(jì)算機(jī)網(wǎng)絡(luò)的因素很多,有些因素可能是有意的,也可能是無意的;可能是人為的,也可能是非人為的;可能是外來黑客對(duì)網(wǎng)絡(luò)系統(tǒng)資源的非法使有,歸結(jié)起來,針對(duì)網(wǎng)絡(luò)安全的威脅主要有三種:(1)人為的無意失誤:如操作員安全配置不當(dāng)造成的安全漏洞,用戶安全意識(shí)不強(qiáng),用戶口令選擇不慎,用戶將自己的帳號(hào)隨意轉(zhuǎn)借他人或與別人共享等都會(huì)對(duì)網(wǎng)絡(luò)安全帶來威脅。(2)人為的惡意攻擊:這是計(jì)算機(jī)網(wǎng)絡(luò)所面臨的最大威脅,敵手的攻擊和計(jì)算機(jī)犯罪就屬于這一類。此類攻擊又可以分為以下兩種:一種是主動(dòng)攻擊,它以各種方式有選擇地破壞信息的有效性和

11、完整性;另一類是被動(dòng)攻擊,它是在不影響網(wǎng)絡(luò)正常工作的情況下,進(jìn)行截獲、竊取、破譯以獲得重要機(jī)密信息。這兩種攻擊均可對(duì)計(jì)算機(jī)網(wǎng)絡(luò)造成極大的危害,并導(dǎo)致機(jī)密數(shù)據(jù)的泄漏。(3)網(wǎng)絡(luò)軟件的漏洞和“后門”:網(wǎng)絡(luò)軟件不可能是百分之百的無缺陷和無漏洞的,然而,這些漏洞和缺陷恰恰是黑客進(jìn)行攻擊的首選目標(biāo),曾經(jīng)出現(xiàn)過黑客攻入網(wǎng)絡(luò)內(nèi)部的事件,這些事件的大部分就是因?yàn)榘踩胧┎煌晟扑兄碌目喙?。另外,軟件的“后門”都是軟件公司的設(shè)計(jì)編程人員為了自便而設(shè)置的,一般不為外人所知,但一旦“后門”洞開,其造成的后果將不堪設(shè)想。為了及早發(fā)現(xiàn)并制止網(wǎng)絡(luò)上的各種攻擊,我們需要通過對(duì)網(wǎng)絡(luò)上的數(shù)據(jù)進(jìn)行分析來發(fā)現(xiàn)并找出問題,提前預(yù)防。

12、這也是本論文的一個(gè)重要目的。網(wǎng)絡(luò)安全管理員運(yùn)用網(wǎng)絡(luò)封包截獲技術(shù),抓取網(wǎng)絡(luò)中有用的數(shù)據(jù)包,然后通過對(duì)數(shù)據(jù)包內(nèi)容進(jìn)行分析,確定哪些是有害的或者含有攻擊企圖的包,以此來達(dá)到對(duì)網(wǎng)絡(luò)攻擊的預(yù)防。同時(shí)許多防火墻也是基于包過濾技術(shù)的。本文將介紹網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的工作原理以及它的實(shí)現(xiàn)。1.21.2 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序簡介網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序簡介網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序是一種用于收集網(wǎng)絡(luò)中有用數(shù)據(jù)的程序,這些數(shù)據(jù)可以是用戶的帳號(hào)和密碼,也可以是一些商用機(jī)密數(shù)據(jù)等。它是利用計(jì)算機(jī)的網(wǎng)絡(luò)接口截獲目的地為其他計(jì)算機(jī)的數(shù)據(jù)報(bào)文的一種工具。網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的正當(dāng)用處主要是分析網(wǎng)絡(luò)的流量,以便找出所關(guān)心的網(wǎng)

13、絡(luò)中潛在的問題。例如,假設(shè)網(wǎng)絡(luò)的某一段運(yùn)行得不是很好,報(bào)文的發(fā)送比較慢,而我們又不知道問題出在什么地方,此時(shí)就可以用網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序來作出精確的問題判斷。在合理的網(wǎng)絡(luò)中,網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的存在對(duì)系統(tǒng)管理員是至關(guān)重要的,系統(tǒng)管理員通過網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序可以診斷出大量的不可見模糊問題,這些問題涉及兩臺(tái)乃至多臺(tái)計(jì)算機(jī)之間的異常通訊,有些甚至牽涉到各種的協(xié)議,借助于網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序系統(tǒng)管理員可以方便的確定出多少的通訊量屬于哪個(gè)網(wǎng)絡(luò)協(xié)議、占主要通訊協(xié)議的主機(jī)是哪一臺(tái)、大多數(shù)通訊目的地是哪臺(tái)主機(jī)、報(bào)文發(fā)送占用多少時(shí)間、或著相互主機(jī)的報(bào)文傳送間隔時(shí)間等等,這些信息為管理員判斷網(wǎng)絡(luò)問題、

14、管理網(wǎng)絡(luò)區(qū)域提供了非常寶貴的信息。1.31.3 國內(nèi)外研究現(xiàn)狀國內(nèi)外研究現(xiàn)狀現(xiàn)在國內(nèi)外已經(jīng)有很多成熟并且功能強(qiáng)大的網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析軟件。比較著名的網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析軟件有:開源軟件:Wireshark、TcpDump。商用軟件:EtherPeek 下面對(duì)這幾種軟件進(jìn)行簡要的介紹:WiresharkWireshark: Wireshark 是一個(gè)開放源碼的網(wǎng)絡(luò)分析系統(tǒng),也是是目前最好的開放源碼的網(wǎng)絡(luò)協(xié)議分析器,支持 Linux 和 Windows 平臺(tái)。Wireshark 起初由 Gerald Combs 開發(fā),隨后由一個(gè)松散的 Wireshark 團(tuán)隊(duì)組織進(jìn)行維護(hù)開發(fā)。它目前所提供的強(qiáng)大的協(xié)

15、議分析功能完全可以媲美商業(yè)的網(wǎng)絡(luò)分析系統(tǒng),自從1998 年發(fā)布最早的 0.2 版本至今,大量的志愿者為 Wireshark 添加新的協(xié)議解析器,如今 Wireshark 已經(jīng)支持五百多種協(xié)議解析。很難想象如此多的人開發(fā)的代碼可以很好的融入系統(tǒng)中;并且在系統(tǒng)中加入一個(gè)新的協(xié)議解析器很簡單,一個(gè)不了解系統(tǒng)的結(jié)構(gòu)的新手也可以根據(jù)留出的接口進(jìn)行自己的協(xié)議開發(fā)。這都?xì)w功于 Wireshark 良好的設(shè)計(jì)結(jié)構(gòu)。事實(shí)上由于網(wǎng)絡(luò)上各種協(xié)議種類繁多,各種新的協(xié)議層出不窮。一個(gè)好的協(xié)議分析器必需有很好的可擴(kuò)展性和結(jié)構(gòu)。這樣才能適應(yīng)網(wǎng)絡(luò)發(fā)展的需要不斷加入新的協(xié)議解析器。TcpDumpTcpDump:顧名思義,Tcp

16、Dump 可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包的“頭”完全截獲下來提供分析。它支持針對(duì)網(wǎng)絡(luò)層、協(xié)議、主機(jī)、網(wǎng)絡(luò)或端口的過濾,并提供 and、or、not 等邏輯語句來幫助你去掉無用的信息。用盡量簡單的話來定義TcpDump,就是:dump the traffic on a network,根據(jù)使用者的定義對(duì)網(wǎng)絡(luò)上的數(shù)據(jù)包進(jìn)行截獲的包分析工具。TcpDump 以其強(qiáng)大的功能,靈活的截取策略,成為每個(gè)高級(jí)的系統(tǒng)管理員分析網(wǎng)絡(luò),排查問題等所必備的工具之一。EtherPeekEtherPeek:這個(gè)工具軟件開始只是一個(gè)網(wǎng)絡(luò)分析器型的數(shù)據(jù)包監(jiān)測軟件,經(jīng)過這些年的發(fā)展已經(jīng)成為一個(gè)真正的網(wǎng)絡(luò)管理工具并具有網(wǎng)站監(jiān)視和分析

17、等新的功能,被美國聯(lián)邦調(diào)查局用來追蹤逃犯、販賣毒品的人、電腦黑客和一些被懷疑為外國間諜的人。是一個(gè)直觀,功能強(qiáng)大的以太網(wǎng)網(wǎng)絡(luò)和協(xié)議分析器。支持 Macintosh 和 Windows 平臺(tái)。EtherPeek 把查找和修復(fù)多平臺(tái)上的復(fù)雜網(wǎng)絡(luò)任務(wù)變得簡單化。EtherPeek 采用工業(yè)標(biāo)準(zhǔn),非常容易使用,提供解碼、過濾和診斷網(wǎng)絡(luò)的功能。以友好圖形界面出名,EtherPeek 提供非常詳細(xì)且多樣化的網(wǎng)絡(luò)使用信息,網(wǎng)絡(luò)結(jié)點(diǎn)的會(huì)話和數(shù)據(jù)包內(nèi)容。在有問題的局域網(wǎng)絡(luò)中使用EtherPeek 執(zhí)行一個(gè)自定的診斷測試,監(jiān)控網(wǎng)絡(luò)的通信和事件,跟蹤非法的網(wǎng)絡(luò)活動(dòng),測試和調(diào)試網(wǎng)絡(luò)軟硬件。2 2 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程

18、序的總體設(shè)計(jì)網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的總體設(shè)計(jì)2.12.1 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的功能分析網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的功能分析對(duì)于網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序進(jìn)行功能分析的第一步是要確立程序所要實(shí)現(xiàn)的目標(biāo),也就是程序最終要解決的問題。本程序所要實(shí)現(xiàn)的目標(biāo)就是在共享式以太網(wǎng)中捕獲根據(jù)過濾規(guī)則設(shè)置的流經(jīng)本地網(wǎng)卡的數(shù)據(jù)包,并且對(duì)數(shù)據(jù)包中的信息進(jìn)行分析。網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序必須完成對(duì)常用協(xié)議的識(shí)別和分析:要求至少實(shí)現(xiàn)TCP/IP協(xié)議簇幾個(gè)基本協(xié)議的分析(ARP、RARP、TCP、UDP),以及應(yīng)用層的常用協(xié)議分析。為了減少設(shè)計(jì)的復(fù)雜度,程序采用字符界面。對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲、規(guī)則過濾和對(duì)數(shù)據(jù)包的分析是本程序的主

19、要功能。2.22.2 系統(tǒng)的組成結(jié)構(gòu)和工作流程系統(tǒng)的組成結(jié)構(gòu)和工作流程.1 系統(tǒng)的結(jié)構(gòu)框圖系統(tǒng)的結(jié)構(gòu)框圖基于以上分析,本文設(shè)計(jì)了網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序,圖2-1是程序的結(jié)構(gòu)框圖。圖 2-1 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序結(jié)構(gòu)框圖下面對(duì)該程序的整體結(jié)構(gòu)進(jìn)行一下描述:該程序的運(yùn)行環(huán)境是Fedora Core 4 linux。Fedora Core是linux的一個(gè)發(fā)行版,他的前身是Redhat linux。本程序通過調(diào)用安裝在linux上的Libpcap函數(shù)庫抓取經(jīng)過本地網(wǎng)卡的數(shù)據(jù)包,從而完成數(shù)據(jù)包的捕獲。然后將捕獲后的數(shù)據(jù)包交給上層的數(shù)據(jù)處理模塊,進(jìn)行協(xié)議分析。最后將分析后的數(shù)據(jù)顯示在用

20、戶界面上。.2 系統(tǒng)的結(jié)構(gòu)和功能系統(tǒng)的結(jié)構(gòu)和功能網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序是一個(gè)基于Libpcap開發(fā)庫,應(yīng)用與共享以太網(wǎng)的網(wǎng)絡(luò)分析程序如圖2-2所示,系統(tǒng)主要包括4大模塊:圖 2-2 網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的層次圖1、數(shù)據(jù)輸入模塊。該模塊主要功能是接收用戶輸入用于捕獲數(shù)據(jù)包的信息。其中包括選擇用于捕獲的網(wǎng)絡(luò)接口和需要過濾的內(nèi)容。Fedora Core Linux 4數(shù)據(jù)包捕獲應(yīng)用程序接口數(shù)據(jù)包處理網(wǎng)絡(luò)數(shù)據(jù)報(bào)協(xié)議分析程序輸入數(shù)據(jù)捕獲規(guī)則匹配數(shù)據(jù)處理協(xié)議分析輸出2、數(shù)據(jù)捕獲模塊。該模塊的主要功能是捕獲流經(jīng)本地網(wǎng)卡的所有數(shù)據(jù)。其原理是通過把網(wǎng)卡設(shè)置為混雜模式,使得網(wǎng)卡對(duì)所有流經(jīng)它的

21、數(shù)據(jù)包都交給上層程序處理。3、規(guī)則匹配模塊,該模塊的主要功能是根據(jù)用戶的需求對(duì)需要捕獲的數(shù)據(jù)包進(jìn)行過濾設(shè)置。因?yàn)椴皇撬薪?jīng)過本地網(wǎng)卡的數(shù)據(jù)報(bào)都對(duì)我們分析網(wǎng)絡(luò)有用,而且如果將所有經(jīng)過網(wǎng)卡的數(shù)據(jù)捕獲會(huì)增加系統(tǒng)的開銷。因此我們?cè)O(shè)置了一個(gè)規(guī)則匹配模塊,當(dāng)所捕獲的信息與我們?cè)O(shè)置的規(guī)則相符時(shí)我們就把它交給數(shù)據(jù)處理模塊,否則就丟棄。4、數(shù)據(jù)處理模塊。該模塊的主要功能是對(duì)捕獲的數(shù)據(jù)進(jìn)行分析顯示處理。主要是調(diào)用協(xié)議分析模塊和顯示模塊。41 協(xié)議分析模塊。該模塊的主要功能是對(duì)捕獲的數(shù)據(jù)包進(jìn)行協(xié)議分析。把數(shù)據(jù)包捕獲下來后,我們需要對(duì)其分析才能知道網(wǎng)絡(luò)中存在的安全問題。該模塊主要是對(duì)TCP/IP各層的協(xié)議進(jìn)行分析。4

22、2 顯示模塊。該模塊的主要功能是將分析的結(jié)果顯示給用戶。對(duì)數(shù)據(jù)包進(jìn)行協(xié)議分析后要把結(jié)果顯示給用戶本程序才結(jié)束。因?yàn)閿?shù)據(jù)包中包含的信息太多,如果全部顯示給用戶有所不便,所以我們挑選其中比較重要的信息輸出給用戶。.3 程序的工作流程程序的工作流程圖2-3為本程序的流程圖,下面其進(jìn)行簡要的敘述:1、程序開始時(shí)首先查找計(jì)算機(jī)上所有可用的網(wǎng)卡,并讓用戶選擇用于捕獲數(shù)據(jù)包的網(wǎng)卡。2、用戶輸入用于捕獲數(shù)據(jù)包的網(wǎng)卡和過濾規(guī)則。只過濾用戶所關(guān)心的信息。3、程序判斷該網(wǎng)卡所在的網(wǎng)絡(luò)是否為以太網(wǎng),不是則中止,是則繼續(xù)。因?yàn)楸境绦蛑荒茉诠蚕硪蕴W(wǎng)中進(jìn)行數(shù)據(jù)捕獲。4、編譯用戶設(shè)置的過濾規(guī)則。5、開始進(jìn)行

23、捕獲,并分析數(shù)據(jù),將數(shù)據(jù)顯示給用戶。當(dāng)用戶停止時(shí)就結(jié)束程序,否則繼續(xù)捕獲。圖2-3 網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的流程圖2.32.3 系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)分析系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)分析前面給出了網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的總體結(jié)構(gòu)、功能模塊和工作流程。要實(shí)現(xiàn)程序預(yù)定的功能,就必須解決實(shí)現(xiàn)程序的關(guān)鍵技術(shù)。網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序要實(shí)現(xiàn)的關(guān)鍵技術(shù)包括:數(shù)據(jù)包捕獲技術(shù)、對(duì)TCP/IP各層基本協(xié)議進(jìn)行分析的技術(shù)、協(xié)議識(shí)別技術(shù)。1、數(shù)據(jù)包捕獲技術(shù):本程序要對(duì)網(wǎng)絡(luò)中的數(shù)據(jù)進(jìn)行分析,首先就要將網(wǎng)絡(luò)中的數(shù)據(jù)包捕獲下來。因此實(shí)現(xiàn)數(shù)據(jù)包捕獲是本程序設(shè)計(jì)的基礎(chǔ)也是首先要解決的技術(shù)問題。要實(shí)現(xiàn)共享以太網(wǎng)中的數(shù)據(jù)捕獲,各個(gè)平臺(tái)有不同的

24、技術(shù)。在Linux有一個(gè)專門為程序員編寫數(shù)據(jù)包捕獲程序而開發(fā)的庫:Libpcap。Libpcap是用戶態(tài)的數(shù)據(jù)包截獲API,具有獨(dú)立性和可移植性,支持BPF過濾機(jī)制等。通查找所有可用的網(wǎng)卡是否是以太網(wǎng)編譯并且設(shè)置過濾規(guī)則開始捕獲數(shù)據(jù)并分析顯示結(jié)果結(jié)束程序用戶中止嗎?選擇用于捕獲的網(wǎng)卡和過濾規(guī)則開始NYNY過調(diào)用Libpcap庫函數(shù)可以輕易的實(shí)現(xiàn)共享以太網(wǎng)中數(shù)據(jù)包的截獲,而且實(shí)時(shí)性相當(dāng)?shù)膹?qiáng),因?yàn)長ibpcap是處于用戶態(tài)所以減少了系統(tǒng)的開銷。Libpcap是一個(gè)基于BPF的開放源碼的捕包函數(shù)庫。現(xiàn)有的大部分Linux捕包系統(tǒng)都是基于這套函數(shù)庫或者是在它基礎(chǔ)上做一些針對(duì)性的改進(jìn)。2、對(duì)TCP/IP

25、各層基本協(xié)議分析的技術(shù):要對(duì)TCP/IP各層的基本協(xié)議進(jìn)行分析,主要是要對(duì)所要分析的協(xié)議有充分的了解,特別是對(duì)各種協(xié)議的報(bào)頭格式要有深入的了解。對(duì)各種協(xié)議進(jìn)行分析時(shí)主要是將報(bào)頭中的重要信息顯示給用戶,還有可能對(duì)數(shù)據(jù)包的正文信息解碼。3、協(xié)議識(shí)別技術(shù):由于 OSI 的 7 層協(xié)議模型,協(xié)議數(shù)據(jù)是從上到下封裝后發(fā)送的。對(duì)于協(xié)議的識(shí)別需要從下至上進(jìn)行。例如,首先對(duì)網(wǎng)絡(luò)層的協(xié)議識(shí)別后進(jìn)行脫去網(wǎng)絡(luò)層協(xié)議頭。將里面的數(shù)據(jù)交給傳輸層分析,這樣一直進(jìn)行下去直到應(yīng)用層。應(yīng)用層以下的各種協(xié)議一般都可以通過下一層的協(xié)議中的關(guān)鍵信息來識(shí)別。但是應(yīng)用層的協(xié)議種類相當(dāng)多,無法從下層協(xié)議中識(shí)別。對(duì)于應(yīng)用層協(xié)議識(shí)別的方法目前

26、有幾種技術(shù):基于特征串的應(yīng)用層協(xié)議識(shí)別、Venus Fast Protocol Recognition、以及端口識(shí)別。在本程序中我們采用的是端口識(shí)別技術(shù)。端口識(shí)別的原理是常用協(xié)議使用固定端口來進(jìn)行通信。端口識(shí)別的優(yōu)點(diǎn)是:簡單、容易實(shí)現(xiàn)。缺點(diǎn)是:一些不常用協(xié)議不能被識(shí)別,常用協(xié)議修改端口后也無法識(shí)別。3 3網(wǎng)絡(luò)數(shù)據(jù)包捕獲模塊的實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包捕獲模塊的實(shí)現(xiàn)3.13.1 網(wǎng)絡(luò)數(shù)據(jù)包捕獲簡介網(wǎng)絡(luò)數(shù)據(jù)包捕獲簡介網(wǎng)絡(luò)數(shù)據(jù)包截獲一般指通過截獲整個(gè)網(wǎng)絡(luò)的所有信息流量,根據(jù)信息源主機(jī),目標(biāo)主機(jī),服務(wù)協(xié)議端口等信息簡單過濾掉不關(guān)心的數(shù)據(jù),再將用戶感興趣的數(shù)據(jù)發(fā)送給更高層的應(yīng)用程序進(jìn)行分析。一方面要,網(wǎng)絡(luò)截取模塊要

27、能保證截取到所有網(wǎng)絡(luò)上的數(shù)據(jù)包,尤其是檢測到被分片的數(shù)據(jù)包(這可能蘊(yùn)涵著攻擊) 。另方面,數(shù)據(jù)截取模塊截取數(shù)據(jù)包的效率也是很重要的。它直接影響整個(gè)入侵檢測系統(tǒng)的運(yùn)行速度。從廣義的角度上看,一個(gè)包捕獲機(jī)制包含三個(gè)主要部分:最底層是針對(duì)特定操作系統(tǒng)的包捕獲機(jī)制,最高層是針對(duì)用戶程序的接口,第三部分是包過濾機(jī)制。不同的操作系統(tǒng)實(shí)現(xiàn)的底層包捕獲機(jī)制可能是不一樣的,但從形式上看大同小異。數(shù)據(jù)包常規(guī)的傳輸路徑依次為網(wǎng)卡、設(shè)備驅(qū)動(dòng)層、數(shù)據(jù)鏈路層、IP層、傳輸層、最后到達(dá)應(yīng)用程序。而數(shù)據(jù)包捕獲機(jī)制是在數(shù)據(jù)鏈路層增加一個(gè)旁路處理,對(duì)發(fā)送和接收到的數(shù)據(jù)包做過濾/緩沖等相關(guān)處理,最后直接傳遞到應(yīng)用程序。值得注意的是

28、,包捕獲機(jī)制并不影響操作系統(tǒng)對(duì)數(shù)據(jù)包的網(wǎng)絡(luò)棧處理。對(duì)用戶程序而言,包捕獲機(jī)制提供了一個(gè)統(tǒng)一的接口,使用戶程序只需要簡單的調(diào)用若干函數(shù)就能獲得所期望的數(shù)據(jù)包。這樣一來,針對(duì)特定操作系統(tǒng)的捕獲機(jī)制對(duì)用戶透明,使用戶程序有比較好的可移植性。包過濾機(jī)制是對(duì)所捕獲到的數(shù)據(jù)包根據(jù)用戶的要求進(jìn)行篩選,最終只把滿足過濾條件的數(shù)據(jù)包傳遞給用戶程序。3.23.2 基于基于 LibpcapLibpcap 的網(wǎng)絡(luò)數(shù)據(jù)包捕獲的實(shí)現(xiàn)的網(wǎng)絡(luò)數(shù)據(jù)包捕獲的實(shí)現(xiàn).1 LibpcapLibpcap 安裝安裝Libpcap提供了系統(tǒng)獨(dú)立的用戶級(jí)別網(wǎng)絡(luò)數(shù)據(jù)包捕獲接口,并充分考慮到應(yīng)用程序的可移植性。Libpcap可以在

29、絕大多數(shù)類unix平臺(tái)下工作。在windows平臺(tái)下,一個(gè)與Libpcap很類似的函數(shù)包winpcap提供捕獲功能,其官方網(wǎng)站是http:/winpcap.polito.it/ Libpcap軟件包可從/下載,解壓后依此執(zhí)行下列三條命令即可安裝。./configure./configuremakemakemakemake installinstall但如果希望Libpcap能在linux上正常工作,則必須使內(nèi)核支持“packet”協(xié)議,也即在編譯內(nèi)核時(shí)打開配置選項(xiàng)CONFIG_PACKET(選項(xiàng)缺省為打開)。.2 LibpcapLibp

30、cap 中基本的數(shù)據(jù)結(jié)構(gòu)和函數(shù)中基本的數(shù)據(jù)結(jié)構(gòu)和函數(shù)主要函數(shù)主要函數(shù):int pcap_findalldevs(pcap_if_t *alldevsp, char *errbuf)功能:枚舉系統(tǒng)所有網(wǎng)絡(luò)設(shè)備的信息參數(shù):alldevsp:是一個(gè) pcap_if_t 結(jié)構(gòu)體的指針,如果函數(shù)pcap_findalldevs 函數(shù)執(zhí)行成功,將獲得一個(gè)可用網(wǎng)卡的列表,而里面存儲(chǔ)的就是第一個(gè)元素的指針。Errbuf:存儲(chǔ)錯(cuò)誤信息的字符串。返回值:int,如果返回 0 則執(zhí)行成功,錯(cuò)誤返回-1。pcap_t *pcap_open_live(char *device, int snaplen, int pro

31、misc, int to_ms, char *ebuf)功能:設(shè)置一個(gè)抓包描述符參數(shù):其第一個(gè)參數(shù)是我們?cè)谏弦还?jié)中指定的設(shè)備,snaplen 是整形的,它定義了將被 pcap 捕獲的最大字節(jié)數(shù)。當(dāng) promisc 設(shè)為 true 時(shí)將置指定接口為混雜模式(然而,當(dāng)它置為 false 時(shí)接口仍處于混雜模式的特殊情況也是有可能的) 。to_ms 是讀取時(shí)的超時(shí)值,單位是毫秒(如果為 0 則一直嗅探直到錯(cuò)誤發(fā)生,為-1 則不確定)。最后,ebuf 是一個(gè)我們可以存入任何錯(cuò)誤信息的字符串(就像上面的 errbuf) 。int pcap_compile(pcap_t *p, struct bpf_pro

32、gram *fp, char *str, int optimize, bpf_u_int32 netmask)功能:編譯過濾規(guī)則參數(shù):第一個(gè)參數(shù)是會(huì)話句柄(pcap_t *handle 在前一節(jié)的示例中) 。接下來的是我們存儲(chǔ)被編譯的過濾器版本的地址的引用。再接下來的則是表達(dá)式本身,存儲(chǔ)在規(guī)定的字符串格式里。再下邊是一個(gè)定義表達(dá)式是否被優(yōu)化的整形量(0 為 false,1 為 true,標(biāo)準(zhǔn)規(guī)定) 。最后,我們必須指定應(yīng)用此過濾器的網(wǎng)絡(luò)掩碼。函數(shù)返回-1 為失敗,其他的任何值都表明是成功的。int pcap_setfilter(pcap_t *p, struct bpf_program *fp

33、)功能:設(shè)置過濾規(guī)則。參數(shù):這非常直觀,第一個(gè)參數(shù)是會(huì)話句柄,第二個(gè)參數(shù)是被編譯表達(dá)式版本的引用(可推測出它與 pcap_compile()的第二個(gè)參數(shù)相同) 。int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)功能:循環(huán)抓包直到用戶中止。參數(shù):第一個(gè)參數(shù)是會(huì)話句柄,接下來是一個(gè)整型,它告訴 pcap_loop()在返回前應(yīng)捕獲多少個(gè)數(shù)據(jù)包(若為負(fù)值則表示應(yīng)該一直工作直至錯(cuò)誤發(fā)生) 。第三個(gè)參數(shù)是回調(diào)函數(shù)的名稱(正像其標(biāo)識(shí)符所指,無括號(hào)) 。最后一個(gè)參數(shù)在有些應(yīng)用里有用,但更多時(shí)候則置為 NULL。數(shù)據(jù)結(jié)

34、構(gòu):數(shù)據(jù)結(jié)構(gòu):struct pcap_ifstruct pcap_if *next;char *name;char *description;struct pcap_addr *addresses;u_int flags;pcap_if *next; 如果非空,指向鏈的下一個(gè)元素。如果為空是鏈的最后一個(gè)元素。char *name; 指向一個(gè)字符串,該字符串是傳給 pcap_open_live()函數(shù)的設(shè)備名;char *description; 如果非空,指向一個(gè)對(duì)設(shè)備的人性化的描述字符串。pcap_addr *addresses; 指向網(wǎng)卡地址鏈中的第一個(gè)元素。u_int flags; PC

35、AP_IF_網(wǎng)卡的標(biāo)志。現(xiàn)在唯一可用的標(biāo)識(shí)是PCAP_IF_LOOKBACK,它被用來標(biāo)識(shí)網(wǎng)卡是不是 lookback 網(wǎng)卡。struct pcap_pkthdr struct timeval ts;/*time stamp*/bpf_u_int32 caplen; /*length of portion present*/bpf_u_int32 len; /*length this packet(off wire)*/;timeval ts; 數(shù)據(jù)報(bào)時(shí)間戳;bpf_u_int32 caplen; 當(dāng)前分片的長度;dpf_u_int32 len; 這個(gè)數(shù)據(jù)報(bào)的長度;細(xì)節(jié)描述:在 dump 文件

36、中的每個(gè)數(shù)據(jù)報(bào)都有這樣一個(gè)報(bào)頭。它用來處理不同數(shù)據(jù)報(bào)網(wǎng)卡的不同報(bào)頭問題。struct pcap_stat u_int ps_recv; /* number of packets received */u_int ps_drop; /* number of packets dropped */u_int ps_ifdrop; /* drops by interface XXX not yet supported */;u_int ps_recv; 接受數(shù)據(jù)報(bào)的數(shù)目;u_int ps_drop; 被驅(qū)動(dòng)程序丟棄的數(shù)據(jù)報(bào)的數(shù)目;u_int ps_ifdrop; 被網(wǎng)卡丟棄的數(shù)據(jù)報(bào)的數(shù)目;struct

37、 pcap_addrpcap_addr * next;sockaddr * addr;sockaddr * netmask;sockaddr *broadaddr;sockaddr *dstaddr;pcap_addr * next; 如果非空,指向鏈表中一個(gè)元素的指針;空表示鏈表中的最后一個(gè)元素。sockaddr * addr; 指向包含一個(gè)地址的 sockaddr 的結(jié)構(gòu)的指針。sockaddr * netmask; 如果非空,指向包含相對(duì)于 addr 指向的地址的一個(gè)網(wǎng)絡(luò)掩碼的結(jié)構(gòu)。sockaddr * broadaddr; 如果非空,指向包含相對(duì)于 addr 指向的地址的一個(gè)廣播地址,

38、如果網(wǎng)絡(luò)不支持廣播可能為空。sockaddr * dstaddr; 如果非空,指向一個(gè)相對(duì)于 addr 指向的源地址的目的地址,如果網(wǎng)絡(luò)不支持點(diǎn)對(duì)點(diǎn)通訊,則為空。3.33.3 數(shù)據(jù)捕獲模塊的實(shí)現(xiàn)數(shù)據(jù)捕獲模塊的實(shí)現(xiàn)第一步調(diào)用pcap_findalldevs查找出所有可用的網(wǎng)卡,顯示出來,并接收用戶選擇網(wǎng)卡。第二步用戶輸入用于捕獲數(shù)據(jù)包的網(wǎng)卡后,調(diào)用pcap_open_live生成一個(gè)抓包描述符。第三步通過調(diào)用pcap_datalink檢查該網(wǎng)卡所在網(wǎng)絡(luò)是不是以太網(wǎng),如果不是則中止程序。第四步接收用戶輸入的過濾條件,調(diào)用pcap_compile和pcap_setfilter生成過濾規(guī)則。第五步調(diào)用

39、pcap_loop進(jìn)行循環(huán)捕獲數(shù)據(jù)包,直到用戶中止。具體流程入下圖所示:圖3-1數(shù)據(jù)捕獲模塊流程圖pcap_findalldevs ()pcap_open_live ()pcap_datalink ()pcap_compile()pcap_setfilter()pcap_loop()endBeginNY4 4 協(xié)議分析模塊的實(shí)現(xiàn)協(xié)議分析模塊的實(shí)現(xiàn)雖然到此為止已經(jīng)可以順利完成數(shù)據(jù)包的監(jiān)聽工作,但這并不意味著己經(jīng)大功告成了,因?yàn)閺那懊娴臄?shù)據(jù)包監(jiān)聽的原理中可以知道,數(shù)據(jù)包捕獲程序工作在網(wǎng)絡(luò)底層,將網(wǎng)卡設(shè)置為混雜模式以后,從網(wǎng)絡(luò)底層捕獲到的數(shù)據(jù)包會(huì)直接往上發(fā)給應(yīng)用程序進(jìn)行處理,而不再像普通的數(shù)據(jù)包那樣

40、經(jīng)過操作系統(tǒng)的層層過濾。這樣一來,應(yīng)用程序收到的數(shù)據(jù)包是最原始的數(shù)據(jù)包,也就是說監(jiān)聽主機(jī)接收到的數(shù)據(jù)包中,除了數(shù)據(jù)包本身的內(nèi)容之外,還帶有從對(duì)方主機(jī)中的傳輸層、網(wǎng)絡(luò)層以及數(shù)據(jù)鏈路層的數(shù)據(jù)包頭信息,所以要想獲得數(shù)據(jù)包里的應(yīng)用數(shù)據(jù),是需要我們自己來按照每一層的協(xié)議剝離數(shù)據(jù)包頭中的每一層首部內(nèi)容的,這就是協(xié)議分析需要完成的工作。4.14.1 網(wǎng)絡(luò)協(xié)議分析的總體流程網(wǎng)絡(luò)協(xié)議分析的總體流程網(wǎng)絡(luò)功能的分層帶來了網(wǎng)絡(luò)協(xié)議的層次結(jié)構(gòu),網(wǎng)絡(luò)數(shù)據(jù)在傳送時(shí),同樣也是被分解成一個(gè)個(gè)的數(shù)據(jù)報(bào)逐層傳送的,在兩臺(tái)主機(jī)的實(shí)際通信過程中,從邏輯上講,是兩臺(tái)主機(jī)的對(duì)等層直接通信。而實(shí)際上,數(shù)據(jù)包并不是從某一計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)的第N層

41、直接傳導(dǎo)另一計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)的第N層的,而是從這臺(tái)計(jì)算機(jī)的某一層直接傳送N十1層,直至到達(dá)物理層最后分解為比特流流經(jīng)物理介質(zhì)到達(dá)另一臺(tái)計(jì)算機(jī),然后在從另一臺(tái)計(jì)算機(jī)中的底層逐層向上傳送的。當(dāng)數(shù)據(jù)包被傳輸?shù)侥骋粚拥臅r(shí)候,該層都會(huì)對(duì)數(shù)據(jù)包進(jìn)行加工,在發(fā)送方通常是加上一個(gè)與該層協(xié)議有關(guān)的控制或標(biāo)志信息,即數(shù)據(jù)包的包頭或包尾;而在接受方則是需要逐層拆下本層標(biāo)志,即去掉數(shù)據(jù)包的包頭或包尾,根據(jù)控制信息進(jìn)行相應(yīng)的處理,將分解后的數(shù)據(jù)報(bào)逐層上傳,直至應(yīng)用程序獲得最終數(shù)據(jù)。比如發(fā)送方在數(shù)據(jù)鏈路層通常會(huì)在包頭加上目的MAC地址、源MAC地址、其他一些具體網(wǎng)絡(luò)信息及幀定界符,在包尾加上循環(huán)冗余碼,并使用字節(jié)填充或位填

42、充,由接收方數(shù)據(jù)鏈路層去掉包頭與包尾進(jìn)行相關(guān)解釋工作。數(shù)據(jù)包的加工工作如圖4-1所示:用戶數(shù)據(jù)用戶數(shù)據(jù)APP 首部應(yīng)用數(shù)據(jù)TCP 首部應(yīng)用數(shù)據(jù)TCP 首部IP 首部應(yīng)用數(shù)據(jù)TCP 首部IP 首部以太網(wǎng)頭以太網(wǎng)尾應(yīng)用程序TCPIP以太網(wǎng)驅(qū)動(dòng)程序圖4-1 數(shù)據(jù)封裝示意TCP傳給IP的數(shù)據(jù)單元稱作TCP報(bào)文段或簡稱為TCP段(TCP Segment);IP傳給網(wǎng)絡(luò)接口層的數(shù)據(jù)單元稱作IP數(shù)據(jù)報(bào)(IP datagram);通過以太網(wǎng)傳輸?shù)谋忍亓鞣Q作幀,分組既可以是一個(gè)IP數(shù)據(jù)報(bào)也可以是IP數(shù)據(jù)報(bào)的一個(gè)片(fragment)。協(xié)議分析就是數(shù)據(jù)封裝的逆過程。協(xié)議分析的流程圖如圖4-2所示:圖 4-2 網(wǎng)絡(luò)

43、協(xié)議分析流程圖從圖可以看到,對(duì)于監(jiān)聽程序捕獲到的數(shù)據(jù)報(bào),需要按以下步驟分層次進(jìn)行協(xié)議分析:(1)首先是讀取數(shù)據(jù)鏈路層的報(bào)頭,從報(bào)頭中可以得到:計(jì)算機(jī)的源MAC地址和目的MAC地址、數(shù)據(jù)包的長度以及上層協(xié)議的類型。(2)然后需要去掉數(shù)據(jù)鏈層的報(bào)頭,此時(shí)可以獲得IP數(shù)據(jù)報(bào)、arp、rarp數(shù)據(jù)包,在這一層中可以對(duì)IP數(shù)據(jù)報(bào)做一定的統(tǒng)計(jì)和分析等等;對(duì)arp、rarp數(shù)據(jù)包可以獲得發(fā)送端IP和目的IP等重要信息。開始讀取原始數(shù)據(jù)報(bào)文提取并分析鏈路層報(bào)頭提取并分析 IP 地址信息提取并分析 TCP/UDP 地址信息根據(jù)端口判斷應(yīng)用層協(xié)議顯示提取報(bào)頭中的主要信息結(jié)束顯示(3)對(duì)于IP數(shù)據(jù)報(bào)去除網(wǎng)絡(luò)層的報(bào)頭

44、以后,可以獲得傳輸層數(shù)據(jù)報(bào),對(duì)TCP/UDP數(shù)據(jù)包的報(bào)頭進(jìn)行分析在這一層中還可以獲得數(shù)據(jù)報(bào)的端口號(hào)信息,根據(jù)端口號(hào)進(jìn)一步判斷數(shù)據(jù)報(bào)屬于何種應(yīng)用層協(xié)議。(4)對(duì)數(shù)傳輸層數(shù)據(jù)報(bào)去除掉傳輸層報(bào)頭以后,就獲得了應(yīng)用層數(shù)據(jù)報(bào),在應(yīng)用層進(jìn)行協(xié)議分析的工作就是按照應(yīng)用層的工作原理、協(xié)議規(guī)范,還原獲得應(yīng)用層的內(nèi)容,如SMTF/POP3協(xié)議分析可以還原出正在傳輸?shù)泥]件信息,F(xiàn)TP協(xié)議分析可以還原出傳輸中的文件名以及用戶名口令密碼等信息,HTTP協(xié)議分析可以還原出目標(biāo)主機(jī)瀏覽網(wǎng)頁的原貌等等。(5)對(duì)所有的數(shù)據(jù)報(bào)頭分析處理后,取出其中的主要信息然后顯示給用戶。4.24.2 對(duì)對(duì) TCP/IPTCP/IP 模型中各層

45、協(xié)議的分析模型中各層協(xié)議的分析前面的內(nèi)容已經(jīng)提到過,我們?cè)趯?duì)數(shù)據(jù)包根據(jù)應(yīng)用層協(xié)議進(jìn)行分析的時(shí)候都需要首先剝離數(shù)據(jù)包中的包頭并且需要根據(jù)包頭信息判斷是何種應(yīng)用層協(xié)議。下面就按照數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層到傳輸層再到應(yīng)用層的順序詳細(xì)的講解每層包頭的結(jié)構(gòu)以及如何對(duì)每層的數(shù)據(jù)報(bào)進(jìn)行協(xié)議分析。.1 以太網(wǎng)首部的分析與提取以太網(wǎng)首部的分析與提取因?yàn)槊恳粋€(gè)使用Libpcap捕獲的數(shù)據(jù)包,都會(huì)有一個(gè)指向原始報(bào)文頭的指針。假設(shè)這個(gè)指針為p。把這個(gè)指針強(qiáng)制轉(zhuǎn)換為以太幀格式:(struct ether_header *) p。我們就得到了以太幀的報(bào)文頭,就可以對(duì)該層協(xié)議進(jìn)行分析和處理。由于在定義IEEE 8

46、02.3以前,以太網(wǎng)就存在,因?yàn)橛卸鄠€(gè)以太網(wǎng)標(biāo)準(zhǔn),所以TCP/IP可以支持多種不同的鏈路層協(xié)議,如以太網(wǎng)、令牌環(huán)網(wǎng)、FDDI(光纖分布式數(shù)據(jù)接口)等。以太網(wǎng)是當(dāng)今TCP/IP采用的主要的局域網(wǎng)技術(shù),它采用一種稱作CSMA/CD的媒體接入方法,其意思是帶沖突檢測的載波偵聽多路接入(Carrier Sense Multiple Access with Collision Detection),發(fā)送端在傳輸之前要偵聽信道。在以太網(wǎng)內(nèi)的IP和ARP數(shù)據(jù)報(bào)或者使用以太網(wǎng)II的或者使用IEEE:802.3子網(wǎng)訪問協(xié)議(SNAP)來封裝數(shù)據(jù)。這里我們只討論最為常用的以太網(wǎng)II數(shù)據(jù)報(bào)格式,這是在RFC894中

47、定義的,如圖4-3所示,這是以太網(wǎng)II的封裝格式:字節(jié) 6 6 2 461500 4目的地址源地址類型數(shù)據(jù)FCS圖4-3以太網(wǎng)II的封裝格式其中每個(gè)字段的含義如下:(1)幀初始同步(Preamble):8字節(jié)長,提供接收端的同步和分隔幀的功能。需要注意的是,幀初始同步字段在網(wǎng)絡(luò)監(jiān)視器中是不可見的。(2)目的地址(Destination Address):6字節(jié)長,指明目的地址。目的地址可以是單播、多播或者以太網(wǎng)的廣播地址。其中,單播地址也稱為MAC地址。(3)源地址(Source Address):6字節(jié)長,指明發(fā)送節(jié)點(diǎn)的單播地址。(4)以太網(wǎng)類型(Ether Type):2字節(jié)長,指明在以太

48、網(wǎng)幀中上層協(xié)議的類型。這個(gè)字段被用來將以太網(wǎng)的有效載荷傳給正確的上層協(xié)議實(shí)體。如果在該字段中未注明有上層協(xié)議實(shí)體接收有效載荷幀。該幀將被丟棄。比如,對(duì)于IP數(shù)據(jù)報(bào),這個(gè)字段的值為0 x0800;對(duì)于ARP消息,該字段的值被設(shè)置為0 x0806。(5)有效載荷(Payload):以太網(wǎng)II的幀的有效載荷由上層協(xié)議的協(xié)議數(shù)據(jù)單元組成,是數(shù)據(jù)包本身的具體內(nèi)容。以太網(wǎng)II能發(fā)送最大1500字節(jié)的有效載荷。因?yàn)橐蕴W(wǎng)具有沖突檢測機(jī)制,以太網(wǎng)II的最小幀有效載荷為46字節(jié)。如果上層的協(xié)議數(shù)據(jù)單元小于46字節(jié),則必須填充到46字節(jié)。(6)幀校驗(yàn)序列(Frame Check Sequence, FCS):4字

49、節(jié)長,提供位級(jí)別的完整性校驗(yàn),也被稱為循環(huán)冗余校驗(yàn)(CRC)。本子段對(duì)于網(wǎng)絡(luò)監(jiān)視器來說同樣是不可見的。.2 IPIP 首部的分析與提取首部的分析與提取因?yàn)橐蕴珟瑘?bào)頭的長度都是一樣的。所以在提取IP包頭的時(shí)候可以將指針P加上以太幀包頭的長度后,把格式強(qiáng)制轉(zhuǎn)化為IP包頭格式即:(struct ip *) (p + sizeof (struct ether_header)。就得到了指向IP報(bào)頭的指針,我們就可以進(jìn)行相應(yīng)的分析了。IP網(wǎng)絡(luò)上的主機(jī)是通過IP數(shù)據(jù)報(bào)來交換數(shù)據(jù)的,IP數(shù)據(jù)報(bào)包括數(shù)據(jù)單元和首部字段,其中,數(shù)據(jù)單元包含要交換的所有信息,首部字段描述這個(gè)信息和數(shù)據(jù)報(bào)本身。只要設(shè)備

50、需要通過IP網(wǎng)絡(luò)向其他網(wǎng)絡(luò)發(fā)送數(shù)據(jù),它就會(huì)創(chuàng)建一個(gè)數(shù)據(jù)報(bào)來發(fā)送數(shù)據(jù)。實(shí)際上,IP數(shù)據(jù)報(bào)是作為IP包來發(fā)送的,IP包將IP數(shù)據(jù)報(bào)通過交換設(shè)備一跳一跳地中繼到目的系統(tǒng)。雖然很多時(shí)候一個(gè)IP數(shù)據(jù)報(bào)就是一個(gè)IP包,但它們?cè)诟拍钌鲜遣煌膶?shí)體。如圖4-4是IP數(shù)據(jù)報(bào)在RFC791中定義的封裝格式:比特 0 4 8 16 20 24 31版本報(bào)頭長服務(wù)類型數(shù)據(jù)包總長標(biāo)識(shí)符標(biāo)志片偏移生存時(shí)間協(xié)議號(hào)報(bào)頭校驗(yàn)和源IP地址目的IP地址選項(xiàng)填充碼數(shù)據(jù)圖4-4 IP數(shù)據(jù)報(bào)格式其中每個(gè)字段的含義如下:(1)版本(version):長度為4位,顯示IP報(bào)頭的版本。目前在所有互聯(lián)網(wǎng)絡(luò)和Internet中使用的標(biāo)準(zhǔn)IP版本號(hào)

51、是4(即IPv4)。(2)報(bào)頭長(header length):長度為4位,表示IP頭的長度。典型的IP頭不包括任何選項(xiàng),長度為20字節(jié)。(3)服務(wù)類型(type of service):長度為8位,表示按照優(yōu)先權(quán)、安全性以及吞吐量等數(shù)據(jù)包的服務(wù)類型。(4)數(shù)據(jù)包總長(total length):長度為2位,表示IP數(shù)據(jù)報(bào)總的字節(jié)數(shù),包括IP頭和有效載荷。(5)標(biāo)識(shí)(identifier):長度為2位,作為分割以及組裝數(shù)據(jù)包時(shí)的識(shí)別標(biāo)志來使用,被分割的數(shù)據(jù)包被分配有同一數(shù)值標(biāo)識(shí)。(6)標(biāo)志(flags):長度為3位,包含兩個(gè)用于分片的標(biāo)志。其中一個(gè)標(biāo)志是用于表示IP有效載荷是否符合分片的標(biāo)準(zhǔn),

52、而另一個(gè)是表示對(duì)于已分片的IP數(shù)據(jù)報(bào)是否還有更多的分片。(7)片偏移(fragment offset):長度為13位,表示分片相對(duì)于原始IP數(shù)據(jù)報(bào)有效載荷的偏移量。(8)生存時(shí)間(time to live):長度為1字節(jié),表示IP數(shù)據(jù)包的壽命,目的是廢棄掉在網(wǎng)絡(luò)中循環(huán)著的IP數(shù)據(jù)包,一般地,每通過一次路由器,生存時(shí)間就被減去1,當(dāng)生存時(shí)間為0時(shí),數(shù)據(jù)包將被拋棄。(9)協(xié)議(protocol):長度為1字節(jié),表示包含在有效載荷中的上層協(xié)議。IP協(xié)議字段的一般值有:1表示ICMP,2表示IGMP,6表示TCP,17表示UDP等等。(10)報(bào)頭校驗(yàn)和(header checksum):長度為2字節(jié),

53、是用于確認(rèn)IP數(shù)據(jù)包是否己毀壞的字段。(11)源目的IP地址(source/destination address):長度為4字節(jié),包含源/目的主機(jī)的IP地址。(12)選項(xiàng)和填充:此字段跟在IP頭之后,但必須是以4個(gè)字節(jié)為增量單位,以使IP頭的大小能用報(bào)頭長度字段表示。.3 TCP/UDPTCP/UDP 首部的分析與提取首部的分析與提取TCP/UDP報(bào)文頭部的獲取跟IP報(bào)文頭部的獲取類似,將P指針的位置向后移IP報(bào)文長度個(gè)位置即可(struct tcphdr *) (p + sizeof (struct ether_header) + 4 * iph-ip_hl)。然后就可以對(duì)

54、TCP/UDP數(shù)據(jù)包進(jìn)行分析了。TCP(傳輸控制協(xié)議)為面向事務(wù)的應(yīng)用提供了可靠的面向連接的傳輸協(xié)議。TCP正為目前Intemet上幾乎所有的應(yīng)用協(xié)議所利用,這是因?yàn)榇蟛糠謶?yīng)用程序都需要可靠的、可糾錯(cuò)的傳輸協(xié)議以保證不丟失或破壞數(shù)據(jù)。盡管IP已經(jīng)做了大部分的搜集工作,并且根據(jù)需要在Internet上發(fā)送數(shù)據(jù)報(bào)和數(shù)據(jù)包,但是IP是不可靠的協(xié)議,并不能保證數(shù)據(jù)報(bào)或者數(shù)據(jù)包能夠原封不動(dòng)的到達(dá)其目的地,TCP作為IP的上層協(xié)議,為IP提供了可靠性服務(wù),確保了IP數(shù)據(jù)報(bào)中的數(shù)據(jù)的正確性。如圖4-5所示,是TCP段的封裝結(jié)構(gòu)。比特0 8 16 24 31 源端口目的端口順序號(hào)確認(rèn)號(hào)數(shù)據(jù)偏移保留標(biāo)志窗口校驗(yàn)

55、和緊急指示符選項(xiàng)(長度可變)填充數(shù)據(jù)圖4-5 TCP數(shù)據(jù)報(bào)格式其中,每一段的含義如下:(1)源端口(source port):指示發(fā)送TCP段的源應(yīng)用層協(xié)議,是一個(gè)2字節(jié)的字段。IP頭中的源地址和TCP頭中的源端口聯(lián)合起來提供一個(gè)源套接字。TCP端口為TCP連接數(shù)據(jù)的傳送定義了一種位置,表明段被發(fā)送至的應(yīng)用層進(jìn)程的一個(gè)目的端口。在一般情況下,應(yīng)用層協(xié)議的服務(wù)器端在己知的端口上偵聽。表4-1顯示了常用的應(yīng)用層協(xié)議對(duì)應(yīng)的端口號(hào)。(2)目的端口(destination port):指示目的應(yīng)用層協(xié)議,是一個(gè)2字節(jié)字段。IP頭中的目的IP地址和TCP頭中的端口聯(lián)合起來提供一個(gè)目的套接字。(3)序列號(hào)(

56、sequence number):指示段的第一個(gè)8位組的輸出字節(jié)流的序列號(hào),是一個(gè)4字節(jié)字段。用于保證數(shù)據(jù)的到達(dá)順序與可靠性。利用隨機(jī)值確定初始值,以字節(jié)為單位表示所發(fā)送數(shù)據(jù)的位置。(4)確認(rèn)號(hào)(acknowledgment number):一個(gè)4位的字段,指示接收方希望收到的輸入字節(jié)流中下一個(gè)8位組的序列號(hào)。是用于保證可靠性的確認(rèn)號(hào)碼。(5)數(shù)據(jù)偏移(data offset):表示TCP數(shù)據(jù)的起始位置,以4字節(jié)的整數(shù)倍表示,數(shù)據(jù)偏移字段也是TCP頭的大小。在不包括選項(xiàng)的情況下,TCP報(bào)頭是20個(gè)字節(jié),offset的值為5。(6)保留(reserved):一個(gè)6字節(jié)字段,為了未來的使用而保留。

57、(7)標(biāo)志(flags):一個(gè)6字節(jié)字段,指示6個(gè)TCP標(biāo)志。這6個(gè)標(biāo)志是:URG(緊急)、ACK(確訓(xùn))、PSH(推)、RST(復(fù)句)、SYN(同步)、FIN(結(jié)束)。(8)窗口(window):一個(gè)2字節(jié)的字段,表明該段的發(fā)送方的接收緩沖區(qū)中可供使用的空間有多少字節(jié)數(shù)。窗口大小的廣告是一種實(shí)現(xiàn)接收流流控制的方式。(9)校驗(yàn)和(checksum):一個(gè)2字節(jié)的字段,為TCP段提供位級(jí)別的完整性校驗(yàn)。(10)緊急指針(urgent pointer):一個(gè)2字節(jié)字段,它表明段中緊急數(shù)據(jù)的位置。(11)選項(xiàng)(option):為提高利用TCP的通信性能所準(zhǔn)備的選項(xiàng)。用戶數(shù)據(jù)報(bào)協(xié)議(UDP)是定義用來

58、在互連網(wǎng)絡(luò)環(huán)境中提供包交換的計(jì)算機(jī)通信的協(xié)議。此協(xié)議默認(rèn)認(rèn)為網(wǎng)路協(xié)議(IP)是其下層協(xié)議。此協(xié)議提供了向另一用戶程序發(fā)送信息的最簡便的協(xié)議機(jī)制。此協(xié)議是面向操作的,未提供提交和復(fù)制保護(hù)。以下是UDP協(xié)議的報(bào)文頭格式:比特0 16 31圖4-6 TCP數(shù)據(jù)包格式(1)源端口16 位。源端口是可選字段。當(dāng)使用時(shí),它表示發(fā)送程序的端口,同時(shí)它還被認(rèn)為是沒有其它信息的情況下需要被尋址的答復(fù)端口。如果不使用,設(shè)置值為 0。(2)目的端口16 位。目標(biāo)端口在特殊因特網(wǎng)目標(biāo)地址的情況下具有意義。(3)長度16 位。該用戶數(shù)據(jù)報(bào)的八位長度,包括協(xié)議頭和數(shù)據(jù)。長度最小值為 8。(4)校驗(yàn)和16 位。IP 協(xié)議頭

59、、UDP 協(xié)議頭和數(shù)據(jù)位,最后用 0 填補(bǔ)的信息假協(xié)議頭總和。如果必要的話,可以由兩個(gè)八位復(fù)合而成。.4 應(yīng)用層協(xié)議的應(yīng)用層協(xié)議的識(shí)別與分析識(shí)別與分析對(duì)于應(yīng)用層協(xié)議本程序采用的是端口識(shí)別技術(shù)。端口是應(yīng)用程序在網(wǎng)絡(luò)通源端口目的端口長度校驗(yàn)和信上使用的數(shù)據(jù)輸入輸出口。端口分為兩種。一種為公認(rèn)端口,另一種為短暫端口。公認(rèn)端口被分配給網(wǎng)絡(luò)上的服務(wù)程序。當(dāng)某一網(wǎng)絡(luò)客戶端利用其他計(jì)算機(jī)上的服務(wù)程序時(shí),在根據(jù)IP地址指定服務(wù)計(jì)算機(jī)的同時(shí),也指定了被分配的服務(wù)程序的公認(rèn)端口號(hào)。由此,可以利用與端口號(hào)對(duì)應(yīng)的特定的網(wǎng)絡(luò)服務(wù)。公認(rèn)端口號(hào)有很多,工人端口號(hào)被定義在unix類操作系統(tǒng)下的/etc/ser

60、vices文件中下表列出了其中的一部分。表4-1 常用協(xié)議和對(duì)應(yīng)的端口號(hào)上層協(xié)議端口號(hào)/協(xié)議上層協(xié)議的意義Echo7/dup回應(yīng)請(qǐng)求ftp-data20/tcp,20/udp在ftp上數(shù)據(jù)傳送路徑ftp21/tcp,21/udp在ftp上控制數(shù)據(jù)通信路徑telnet23/tcp,23/udp用于遠(yuǎn)程終端連接的標(biāo)準(zhǔn)Smtp25/tcp,25/udp郵件發(fā)送服務(wù)Time37/tcp,37/udp計(jì)時(shí)服務(wù)器Nameserver42/tcp,42/udp主機(jī)名服務(wù)器Nicname43/tcp,43/udpWhois服務(wù)Domain53/tcp,53/udp域名服務(wù)器Tftp69/tcp,69/udp小

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論