版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計開發(fā)</p><p><b> 摘 要</b></p><p> 本文設(shè)計與實現(xiàn)了一個基于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、、最主要的模塊。</p><p> 本文的主要內(nèi)容如下:首先介紹了網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的背景和概念。其次進(jìn)行了程序的總體設(shè)計:確定了程序的功能,給出了程序的結(jié)構(gòu)圖和層次圖,描述了程序的工作流程,對實現(xiàn)程序的關(guān)鍵技術(shù)做出了分析。接著,介紹完數(shù)據(jù)包捕獲的相關(guān)背景和Libpcap函數(shù)庫后,闡述了如何利用Libpcap函數(shù)庫實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包捕獲模塊。然后對協(xié)議分析流程進(jìn)行了詳細(xì)的講解,分析了常用網(wǎng)絡(luò)協(xié)議。最后進(jìn)行了程序
3、的測試與運行:測試了程序能否按照預(yù)期的效果正確執(zhí)行,印證了預(yù)期結(jié)果。</p><p> 關(guān)鍵詞:Libpcap;Linux;數(shù)據(jù)包捕獲;應(yīng)用層;協(xié)議識別</p><p> The Design and Development of Network Packet Protocol Analyzing Program</p><p><b> Abstr
4、act</b></p><p> The 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
5、 feature set which includes capturing network packets and analyzing popular network protocols on Internet. The program is made up of an input/output module, a rules matching module, a packet capturing module and a protoc
6、ol analyzing module. And the last two modules are key modules.</p><p> The research work was described as followed. firstly, we introduce the background and concepts about network protocol analyzing program
7、s; 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 elabor
8、ating on the background of packet capture and the Libpcap library, we state a approach to implement a packet capture module with Libpcap; Thirdly</p><p> Key words: Libpcap; Linux; Network packet capturing;
9、 Application layer; Protocol identification </p><p><b> 目 錄</b></p><p><b> 論文總頁數(shù):23頁</b></p><p><b> 1引言1</b></p><p> 1.1課題背景
10、1</p><p> 1.2網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序簡介2</p><p> 1.3國內(nèi)外研究現(xiàn)狀2</p><p> 2網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的總體設(shè)計3</p><p> 2.1網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的功能分析3</p><p> 2.2系統(tǒng)的組成結(jié)構(gòu)和工作流程3</p>
11、<p> 2.2.1系統(tǒng)的結(jié)構(gòu)框圖3</p><p> 2.2.2系統(tǒng)的結(jié)構(gòu)和功能4</p><p> 2.2.3程序的工作流程5</p><p> 2.3系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)分析6</p><p> 3網(wǎng)絡(luò)數(shù)據(jù)包捕獲模塊的實現(xiàn)7</p><p> 3.1網(wǎng)絡(luò)數(shù)據(jù)包捕獲簡介
12、7</p><p> 3.2基于Libpcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲的實現(xiàn)8</p><p> 3.2.1Libpcap安裝8</p><p> 3.2.2Libpcap中基本的數(shù)據(jù)結(jié)構(gòu)和函數(shù)8</p><p> 3.3數(shù)據(jù)捕獲模塊的實現(xiàn)11</p><p> 4協(xié)議分析模塊的實現(xiàn)11</
13、p><p> 4.1網(wǎng)絡(luò)協(xié)議分析的總體流程12</p><p> 4.2對TCP/IP模型中各層協(xié)議的分析14</p><p> 4.2.1以太網(wǎng)首部的分析與提取14</p><p> 4.2.2IP首部的分析與提取15</p><p> 4.2.3TCP/UDP首部的分析與提取16</
14、p><p> 4.2.4應(yīng)用層協(xié)議的識別與分析18</p><p> 5程序運行與測試20</p><p> 5.1測試環(huán)境20</p><p> 5.1.1硬件環(huán)境20</p><p> 5.1.2程序運行環(huán)境20</p><p> 5.2測試步驟20</
15、p><p> 5.3測試結(jié)果評價20</p><p><b> 結(jié) 論20</b></p><p><b> 參考文獻(xiàn)21</b></p><p><b> 致 謝22</b></p><p><b> 聲 明
16、23</b></p><p><b> 引言</b></p><p><b> 課題背景</b></p><p> 隨著計算機網(wǎng)絡(luò)的不斷發(fā)展,全球信息化已成為當(dāng)今社會發(fā)展的趨勢。但由于計算機網(wǎng)絡(luò)自身所特具有的特點,比如聯(lián)結(jié)形式多樣性和網(wǎng)絡(luò)的開放性、互連性等特征,所以導(dǎo)致網(wǎng)絡(luò)易受黑客還有一些病毒的攻擊。所
17、以網(wǎng)上信息的安全和保密是一個至關(guān)重要的問題。對于軍用的自動化指揮網(wǎng)絡(luò)和銀行等傳輸敏感數(shù)據(jù)的計算機網(wǎng)絡(luò)系統(tǒng)而言,其網(wǎng)上信息的安全和保密尤為重要。因此,網(wǎng)絡(luò)必須有足夠強的安全措施,否則該網(wǎng)絡(luò)將是個無用、甚至?xí)<皣野踩木W(wǎng)絡(luò)。在計算機網(wǎng)絡(luò)的世界里,存在著很多潛在的威脅,因此網(wǎng)絡(luò)的安全措施應(yīng)能全方位地應(yīng)對各種不同的威脅,這樣才可以真正的做到網(wǎng)絡(luò)服務(wù)于社會,體現(xiàn)網(wǎng)絡(luò)的先進(jìn)性。</p><p> 計算機網(wǎng)絡(luò)所面臨的威脅
18、大體可分為兩種:一是對網(wǎng)絡(luò)中信息的威脅;二是對網(wǎng)絡(luò)中設(shè)備的威脅。影響計算機網(wǎng)絡(luò)的因素很多,有些因素可能是有意的,也可能是無意的;可能是人為的,也可能是非人為的;可能是外來黑客對網(wǎng)絡(luò)系統(tǒng)資源的非法使有,歸結(jié)起來,針對網(wǎng)絡(luò)安全的威脅主要有三種:</p><p> (1)人為的無意失誤:如操作員安全配置不當(dāng)造成的安全漏洞,用戶安全意識不強,用戶口令選擇不慎,用戶將自己的帳號隨意轉(zhuǎn)借他人或與別人共享等都會對網(wǎng)絡(luò)安全帶來
19、威脅。</p><p> (2)人為的惡意攻擊:這是計算機網(wǎng)絡(luò)所面臨的最大威脅,敵手的攻擊和計算機犯罪就屬于這一類。此類攻擊又可以分為以下兩種:一種是主動攻擊,它以各種方式有選擇地破壞信息的有效性和完整性;另一類是被動攻擊,它是在不影響網(wǎng)絡(luò)正常工作的情況下,進(jìn)行截獲、竊取、破譯以獲得重要機密信息。這兩種攻擊均可對計算機網(wǎng)絡(luò)造成極大的危害,并導(dǎo)致機密數(shù)據(jù)的泄漏。</p><p> (3)
20、網(wǎng)絡(luò)軟件的漏洞和“后門”:網(wǎng)絡(luò)軟件不可能是百分之百的無缺陷和無漏洞的,然而,這些漏洞和缺陷恰恰是黑客進(jìn)行攻擊的首選目標(biāo),曾經(jīng)出現(xiàn)過黑客攻入網(wǎng)絡(luò)內(nèi)部的事件,這些事件的大部分就是因為安全措施不完善所招致的苦果。另外,軟件的“后門”都是軟件公司的設(shè)計編程人員為了自便而設(shè)置的,一般不為外人所知,但一旦“后門”洞開,其造成的后果將不堪設(shè)想。</p><p> 為了及早發(fā)現(xiàn)并制止網(wǎng)絡(luò)上的各種攻擊,我們需要通過對網(wǎng)絡(luò)上的數(shù)據(jù)
21、進(jìn)行分析來發(fā)現(xiàn)并找出問題,提前預(yù)防。這也是本論文的一個重要目的。網(wǎng)絡(luò)安全管理員運用網(wǎng)絡(luò)封包截獲技術(shù),抓取網(wǎng)絡(luò)中有用的數(shù)據(jù)包,然后通過對數(shù)據(jù)包內(nèi)容進(jìn)行分析,確定哪些是有害的或者含有攻擊企圖的包,以此來達(dá)到對網(wǎng)絡(luò)攻擊的預(yù)防。同時許多防火墻也是基于包過濾技術(shù)的。本文將介紹網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的工作原理以及它的實現(xiàn)。</p><p> 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序簡介</p><p> 網(wǎng)絡(luò)數(shù)據(jù)包
22、協(xié)議分析程序是一種用于收集網(wǎng)絡(luò)中有用數(shù)據(jù)的程序,這些數(shù)據(jù)可以是用戶的帳號和密碼,也可以是一些商用機密數(shù)據(jù)等。它是利用計算機的網(wǎng)絡(luò)接口截獲目的地為其他計算機的數(shù)據(jù)報文的一種工具。</p><p> 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的正當(dāng)用處主要是分析網(wǎng)絡(luò)的流量,以便找出所關(guān)心的網(wǎng)絡(luò)中潛在的問題。例如,假設(shè)網(wǎng)絡(luò)的某一段運行得不是很好,報文的發(fā)送比較慢,而我們又不知道問題出在什么地方,此時就可以用網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序來作出精
23、確的問題判斷。在合理的網(wǎng)絡(luò)中,網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的存在對系統(tǒng)管理員是至關(guān)重要的,系統(tǒng)管理員通過網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序可以診斷出大量的不可見模糊問題,這些問題涉及兩臺乃至多臺計算機之間的異常通訊,有些甚至牽涉到各種的協(xié)議,借助于網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序系統(tǒng)管理員可以方便的確定出多少的通訊量屬于哪個網(wǎng)絡(luò)協(xié)議、占主要通訊協(xié)議的主機是哪一臺、大多數(shù)通訊目的地是哪臺主機、報文發(fā)送占用多少時間、或著相互主機的報文傳送間隔時間等等,這些信息為管理員
24、判斷網(wǎng)絡(luò)問題、管理網(wǎng)絡(luò)區(qū)域提供了非常寶貴的信息。</p><p><b> 國內(nèi)外研究現(xiàn)狀</b></p><p> 現(xiàn)在國內(nèi)外已經(jīng)有很多成熟并且功能強大的網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析軟件。比較著名的網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析軟件有:開源軟件:Wireshark、TcpDump。商用軟件:EtherPeek下面對這幾種軟件進(jìn)行簡要的介紹:</p><p>
25、 Wireshark: Wireshark是一個開放源碼的網(wǎng)絡(luò)分析系統(tǒng),也是是目前最好的開放源碼的網(wǎng)絡(luò)協(xié)議分析器,支持Linux和Windows平臺。Wireshark起初由Gerald Combs開發(fā),隨后由一個松散的Wireshark團隊組織進(jìn)行維護開發(fā)。它目前所提供的強大的協(xié)議分析功能完全可以媲美商業(yè)的網(wǎng)絡(luò)分析系統(tǒng),自從1998年發(fā)布最早的0.2版本至今,大量的志愿者為Wireshark添加新的協(xié)議解析器,如今Wireshark已
26、經(jīng)支持五百多種協(xié)議解析。很難想象如此多的人開發(fā)的代碼可以很好的融入系統(tǒng)中;并且在系統(tǒng)中加入一個新的協(xié)議解析器很簡單,一個不了解系統(tǒng)的結(jié)構(gòu)的新手也可以根據(jù)留出的接口進(jìn)行自己的協(xié)議開發(fā)。這都?xì)w功于Wireshark良好的設(shè)計結(jié)構(gòu)。事實上由于網(wǎng)絡(luò)上各種協(xié)議種類繁多,各種新的協(xié)議層出不窮。一個好的協(xié)議分析器必需有很好的可擴展性和結(jié)構(gòu)。這樣才能適應(yīng)網(wǎng)絡(luò)發(fā)展的需要不斷加入新的協(xié)議解析器。</p><p> TcpDump:
27、顧名思義,TcpDump可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包的“頭”完全截獲下來提供分析。它支持針對網(wǎng)絡(luò)層、協(xié)議、主機、網(wǎng)絡(luò)或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的信息。用盡量簡單的話來定義TcpDump,就是:dump the traffic on a network,根據(jù)使用者的定義對網(wǎng)絡(luò)上的數(shù)據(jù)包進(jìn)行截獲的包分析工具。TcpDump以其強大的功能,靈活的截取策略,成為每個高級的系統(tǒng)管理員分析網(wǎng)絡(luò),排查問題等所必備的
28、工具之一。</p><p> EtherPeek:這個工具軟件開始只是一個網(wǎng)絡(luò)分析器型的數(shù)據(jù)包監(jiān)測軟件,經(jīng)過這些年的發(fā)展已經(jīng)成為一個真正的網(wǎng)絡(luò)管理工具并具有網(wǎng)站監(jiān)視和分析等新的功能,被美國聯(lián)邦調(diào)查局用來追蹤逃犯、販賣毒品的人、電腦黑客和一些被懷疑為外國間諜的人。是一個直觀,功能強大的以太網(wǎng)網(wǎng)絡(luò)和協(xié)議分析器。支持Macintosh和Windows平臺。EtherPeek把查找和修復(fù)多平臺上的復(fù)雜網(wǎng)絡(luò)任務(wù)變得簡單化
29、。EtherPeek采用工業(yè)標(biāo)準(zhǔn),非常容易使用,提供解碼、過濾和診斷網(wǎng)絡(luò)的功能。以友好圖形界面出名,EtherPeek提供非常詳細(xì)且多樣化的網(wǎng)絡(luò)使用信息,網(wǎng)絡(luò)結(jié)點的會話和數(shù)據(jù)包內(nèi)容。在有問題的局域網(wǎng)絡(luò)中使用EtherPeek執(zhí)行一個自定的診斷測試,監(jiān)控網(wǎng)絡(luò)的通信和事件,跟蹤非法的網(wǎng)絡(luò)活動,測試和調(diào)試網(wǎng)絡(luò)軟硬件。</p><p> 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的總體設(shè)計</p><p> 網(wǎng)絡(luò)
30、數(shù)據(jù)包協(xié)議分析程序的功能分析</p><p> 對于網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序進(jìn)行功能分析的第一步是要確立程序所要實現(xiàn)的目標(biāo),也就是程序最終要解決的問題。本程序所要實現(xiàn)的目標(biāo)就是在共享式以太網(wǎng)中捕獲根據(jù)過濾規(guī)則設(shè)置的流經(jīng)本地網(wǎng)卡的數(shù)據(jù)包,并且對數(shù)據(jù)包中的信息進(jìn)行分析。</p><p> 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序必須完成對常用協(xié)議的識別和分析:要求至少實現(xiàn)TCP/IP協(xié)議簇幾個基本協(xié)議的分析(
31、ARP、RARP、TCP、UDP),以及應(yīng)用層的常用協(xié)議分析。為了減少設(shè)計的復(fù)雜度,程序采用字符界面。對網(wǎng)絡(luò)數(shù)據(jù)包的捕獲、規(guī)則過濾和對數(shù)據(jù)包的分析是本程序的主要功能。</p><p> 系統(tǒng)的組成結(jié)構(gòu)和工作流程</p><p><b> 系統(tǒng)的結(jié)構(gòu)框圖</b></p><p> 基于以上分析,本文設(shè)計了網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序,圖2-1是程
32、序的結(jié)構(gòu)框圖。</p><p> 圖2-1網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序結(jié)構(gòu)框圖</p><p> 下面對該程序的整體結(jié)構(gòu)進(jìn)行一下描述:該程序的運行環(huán)境是Fedora Core 4 linux。Fedora Core是linux的一個發(fā)行版,他的前身是Redhat linux。本程序通過調(diào)用安裝在linux上的Libpcap函數(shù)庫抓取經(jīng)過本地網(wǎng)卡的數(shù)據(jù)包,從而完成數(shù)據(jù)包的捕獲。然后將捕獲后的數(shù)
33、據(jù)包交給上層的數(shù)據(jù)處理模塊,進(jìn)行協(xié)議分析。最后將分析后的數(shù)據(jù)顯示在用戶界面上。</p><p><b> 系統(tǒng)的結(jié)構(gòu)和功能</b></p><p> 網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序是一個基于Libpcap開發(fā)庫,應(yīng)用與共享以太網(wǎng)的網(wǎng)絡(luò)分析程序如圖2-2所示,系統(tǒng)主要包括4大模塊:</p><p> 圖2-2網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的層次圖<
34、;/p><p> 1、數(shù)據(jù)輸入模塊。該模塊主要功能是接收用戶輸入用于捕獲數(shù)據(jù)包的信息。其中包括選擇用于捕獲的網(wǎng)絡(luò)接口和需要過濾的內(nèi)容。</p><p> 2、數(shù)據(jù)捕獲模塊。該模塊的主要功能是捕獲流經(jīng)本地網(wǎng)卡的所有數(shù)據(jù)。其原理是通過把網(wǎng)卡設(shè)置為混雜模式,使得網(wǎng)卡對所有流經(jīng)它的數(shù)據(jù)包都交給上層程序處理。</p><p> 3、規(guī)則匹配模塊,該模塊的主要功能是根據(jù)用戶的
35、需求對需要捕獲的數(shù)據(jù)包進(jìn)行過濾設(shè)置。因為不是所有經(jīng)過本地網(wǎng)卡的數(shù)據(jù)報都對我們分析網(wǎng)絡(luò)有用,而且如果將所有經(jīng)過網(wǎng)卡的數(shù)據(jù)捕獲會增加系統(tǒng)的開銷。因此我們設(shè)置了一個規(guī)則匹配模塊,當(dāng)所捕獲的信息與我們設(shè)置的規(guī)則相符時我們就把它交給數(shù)據(jù)處理模塊,否則就丟棄。</p><p> 4、數(shù)據(jù)處理模塊。該模塊的主要功能是對捕獲的數(shù)據(jù)進(jìn)行分析顯示處理。主要是調(diào)用協(xié)議分析模塊和顯示模塊。</p><p>
36、4.1 協(xié)議分析模塊。該模塊的主要功能是對捕獲的數(shù)據(jù)包進(jìn)行協(xié)議分析。把數(shù)據(jù)包捕獲下來后,我們需要對其分析才能知道網(wǎng)絡(luò)中存在的安全問題。該模塊主要是對TCP/IP各層的協(xié)議進(jìn)行分析。</p><p> 4.2 顯示模塊。該模塊的主要功能是將分析的結(jié)果顯示給用戶。對數(shù)據(jù)包進(jìn)行協(xié)議分析后要把結(jié)果顯示給用戶本程序才結(jié)束。因為數(shù)據(jù)包中包含的信息太多,如果全部顯示給用戶有所不便,所以我們挑選其中比較重要的信息輸出給用戶。&
37、lt;/p><p><b> 程序的工作流程</b></p><p> 圖2-3為本程序的流程圖,下面其進(jìn)行簡要的敘述:</p><p> 1、程序開始時首先查找計算機上所有可用的網(wǎng)卡,并讓用戶選擇用于捕獲數(shù)據(jù)包的網(wǎng)卡。</p><p> 2、用戶輸入用于捕獲數(shù)據(jù)包的網(wǎng)卡和過濾規(guī)則。只過濾用戶所關(guān)心的信息。</
38、p><p> 3、程序判斷該網(wǎng)卡所在的網(wǎng)絡(luò)是否為以太網(wǎng),不是則中止,是則繼續(xù)。因為本程序只能在共享以太網(wǎng)中進(jìn)行數(shù)據(jù)捕獲。</p><p> 4、編譯用戶設(shè)置的過濾規(guī)則。</p><p> 5、開始進(jìn)行捕獲,并分析數(shù)據(jù),將數(shù)據(jù)顯示給用戶。當(dāng)用戶停止時就結(jié)束程序,否則繼續(xù)捕獲。</p><p> 圖2-3 網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的流程圖&l
39、t;/p><p> 系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)分析</p><p> 前面給出了網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的總體結(jié)構(gòu)、功能模塊和工作流程。要實現(xiàn)程序預(yù)定的功能,就必須解決實現(xiàn)程序的關(guān)鍵技術(shù)。網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序要實現(xiàn)的關(guān)鍵技術(shù)包括:數(shù)據(jù)包捕獲技術(shù)、對TCP/IP各層基本協(xié)議進(jìn)行分析的技術(shù)、協(xié)議識別技術(shù)。</p><p> 1、數(shù)據(jù)包捕獲技術(shù):本程序要對網(wǎng)絡(luò)中的數(shù)據(jù)進(jìn)行分析,
40、首先就要將網(wǎng)絡(luò)中的數(shù)據(jù)包捕獲下來。因此實現(xiàn)數(shù)據(jù)包捕獲是本程序設(shè)計的基礎(chǔ)也是首先要解決的技術(shù)問題。要實現(xiàn)共享以太網(wǎng)中的數(shù)據(jù)捕獲,各個平臺有不同的技術(shù)。在Linux有一個專門為程序員編寫數(shù)據(jù)包捕獲程序而開發(fā)的庫:Libpcap。Libpcap是用戶態(tài)的數(shù)據(jù)包截獲API,具有獨立性和可移植性,支持BPF過濾機制等。通過調(diào)用Libpcap庫函數(shù)可以輕易的實現(xiàn)共享以太網(wǎng)中數(shù)據(jù)包的截獲,而且實時性相當(dāng)?shù)膹?,因為Libpcap是處于用戶態(tài)所以減少了系
41、統(tǒng)的開銷。Libpcap是一個基于BPF的開放源碼的捕包函數(shù)庫。現(xiàn)有的大部分Linux捕包系統(tǒng)都是基于這套函數(shù)庫或者是在它基礎(chǔ)上做一些針對性的改進(jìn)。</p><p> 2、對TCP/IP各層基本協(xié)議分析的技術(shù):要對TCP/IP各層的基本協(xié)議進(jìn)行分析,主要是要對所要分析的協(xié)議有充分的了解,特別是對各種協(xié)議的報頭格式要有深入的了解。對各種協(xié)議進(jìn)行分析時主要是將報頭中的重要信息顯示給用戶,還有可能對數(shù)據(jù)包的正文信息解
42、碼。</p><p> 3、協(xié)議識別技術(shù):由于OSI的7層協(xié)議模型,協(xié)議數(shù)據(jù)是從上到下封裝后發(fā)送的。對于協(xié)議的識別需要從下至上進(jìn)行。例如,首先對網(wǎng)絡(luò)層的協(xié)議識別后進(jìn)行脫去網(wǎng)絡(luò)層協(xié)議頭。將里面的數(shù)據(jù)交給傳輸層分析,這樣一直進(jìn)行下去直到應(yīng)用層。應(yīng)用層以下的各種協(xié)議一般都可以通過下一層的協(xié)議中的關(guān)鍵信息來識別。但是應(yīng)用層的協(xié)議種類相當(dāng)多,無法從下層協(xié)議中識別。對于應(yīng)用層協(xié)議識別的方法目前有幾種技術(shù):基于特征串的應(yīng)用層
43、協(xié)議識別、Venus Fast Protocol Recognition、以及端口識別。在本程序中我們采用的是端口識別技術(shù)。端口識別的原理是常用協(xié)議使用固定端口來進(jìn)行通信。端口識別的優(yōu)點是:簡單、容易實現(xiàn)。缺點是:一些不常用協(xié)議不能被識別,常用協(xié)議修改端口后也無法識別。</p><p> 網(wǎng)絡(luò)數(shù)據(jù)包捕獲模塊的實現(xiàn)</p><p><b> 網(wǎng)絡(luò)數(shù)據(jù)包捕獲簡介</b>
44、;</p><p> 網(wǎng)絡(luò)數(shù)據(jù)包截獲一般指通過截獲整個網(wǎng)絡(luò)的所有信息流量,根據(jù)信息源主機,目標(biāo)主機,服務(wù)協(xié)議端口等信息簡單過濾掉不關(guān)心的數(shù)據(jù),再將用戶感興趣的數(shù)據(jù)發(fā)送給更高層的應(yīng)用程序進(jìn)行分析。一方面要,網(wǎng)絡(luò)截取模塊要能保證截取到所有網(wǎng)絡(luò)上的數(shù)據(jù)包,尤其是檢測到被分片的數(shù)據(jù)包(這可能蘊涵著攻擊)。另方面,數(shù)據(jù)截取模塊截取數(shù)據(jù)包的效率也是很重要的。它直接影響整個入侵檢測系統(tǒng)的運行速度。</p>&l
45、t;p> 從廣義的角度上看,一個包捕獲機制包含三個主要部分:最底層是針對特定操作系統(tǒng)的包捕獲機制,最高層是針對用戶程序的接口,第三部分是包過濾機制。不同的操作系統(tǒng)實現(xiàn)的底層包捕獲機制可能是不一樣的,但從形式上看大同小異。數(shù)據(jù)包常規(guī)的傳輸路徑依次為網(wǎng)卡、設(shè)備驅(qū)動層、數(shù)據(jù)鏈路層、IP層、傳輸層、最后到達(dá)應(yīng)用程序。而數(shù)據(jù)包捕獲機制是在數(shù)據(jù)鏈路層增加一個旁路處理,對發(fā)送和接收到的數(shù)據(jù)包做過濾/緩沖等相關(guān)處理,最后直接傳遞到應(yīng)用程序。值得
46、注意的是,包捕獲機制并不影響操作系統(tǒng)對數(shù)據(jù)包的網(wǎng)絡(luò)棧處理。對用戶程序而言,包捕獲機制提供了一個統(tǒng)一的接口,使用戶程序只需要簡單的調(diào)用若干函數(shù)就能獲得所期望的數(shù)據(jù)包。這樣一來,針對特定操作系統(tǒng)的捕獲機制對用戶透明,使用戶程序有比較好的可移植性。包過濾機制是對所捕獲到的數(shù)據(jù)包根據(jù)用戶的要求進(jìn)行篩選,最終只把滿足過濾條件的數(shù)據(jù)包傳遞給用戶程序。</p><p> 基于Libpcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲的實現(xiàn)</p&
47、gt;<p><b> Libpcap安裝</b></p><p> Libpcap提供了系統(tǒng)獨立的用戶級別網(wǎng)絡(luò)數(shù)據(jù)包捕獲接口,并充分考慮到應(yīng)用程序的可移植性。Libpcap可以在絕大多數(shù)類unix平臺下工作。在windows平臺下,一個與Libpcap很類似的函數(shù)包winpcap提供捕獲功能,其官方網(wǎng)站是http://winpcap.polito.it/ Libpcap軟
48、件包可從http://www.tcpdump.org/下載,解壓后依此執(zhí)行下列三條命令即可安裝。</p><p> ./configure</p><p><b> make</b></p><p> make install</p><p> 但如果希望Libpcap能在linux上正常工作,則必須使內(nèi)核支持“
49、packet”協(xié)議,也即在編譯內(nèi)核時打開配置選項CONFIG_PACKET(選項缺省為打開)。</p><p> Libpcap中基本的數(shù)據(jù)結(jié)構(gòu)和函數(shù)</p><p><b> 主要函數(shù):</b></p><p> int pcap_findalldevs(pcap_if_t *alldevsp, char *errbuf)</p&
50、gt;<p> 功能:枚舉系統(tǒng)所有網(wǎng)絡(luò)設(shè)備的信息</p><p> 參數(shù):alldevsp:是一個pcap_if_t結(jié)構(gòu)體的指針,如果函數(shù)pcap_findalldevs函數(shù)執(zhí)行成功,將獲得一個可用網(wǎng)卡的列表,而里面存儲的就是第一個元素的指針。Errbuf:存儲錯誤信息的字符串。返回值:int,如果返回0則執(zhí)行成功,錯誤返回-1。</p><p> pcap_t *pc
51、ap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)</p><p> 功能:設(shè)置一個抓包描述符</p><p> 參數(shù):其第一個參數(shù)是我們在上一節(jié)中指定的設(shè)備,snaplen是整形的,它定義了將被pcap捕獲的最大字節(jié)數(shù)。當(dāng)promisc設(shè)為true時將置指定接口為混雜模式(然而,當(dāng)它置
52、為false時接口仍處于混雜模式的特殊情況也是有可能的)。to_ms是讀取時的超時值,單位是毫秒(如果為0則一直嗅探直到錯誤發(fā)生,為-1則不確定)。最后,ebuf是一個我們可以存入任何錯誤信息的字符串(就像上面的errbuf)。</p><p> int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_
53、int32 netmask)</p><p><b> 功能:編譯過濾規(guī)則</b></p><p> 參數(shù):第一個參數(shù)是會話句柄(pcap_t *handle在前一節(jié)的示例中)。接下來的是我們存儲被編譯的過濾器版本的地址的引用。再接下來的則是表達(dá)式本身,存儲在規(guī)定的字符串格式里。再下邊是一個定義表達(dá)式是否被優(yōu)化的整形量(0為false,1為true,標(biāo)準(zhǔn)規(guī)定)。最
54、后,我們必須指定應(yīng)用此過濾器的網(wǎng)絡(luò)掩碼。函數(shù)返回-1為失敗,其他的任何值都表明是成功的。</p><p> int pcap_setfilter(pcap_t *p, struct bpf_program *fp)</p><p> 功能:設(shè)置過濾規(guī)則。</p><p> 參數(shù):這非常直觀,第一個參數(shù)是會話句柄,第二個參數(shù)是被編譯表達(dá)式版本的引用(可推測出它與
55、pcap_compile()的第二個參數(shù)相同)。</p><p> int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)</p><p> 功能:循環(huán)抓包直到用戶中止。</p><p> 參數(shù):第一個參數(shù)是會話句柄,接下來是一個整型,它告訴pcap_loop()在返回前應(yīng)捕
56、獲多少個數(shù)據(jù)包(若為負(fù)值則表示應(yīng)該一直工作直至錯誤發(fā)生)。第三個參數(shù)是回調(diào)函數(shù)的名稱(正像其標(biāo)識符所指,無括號)。最后一個參數(shù)在有些應(yīng)用里有用,但更多時候則置為NULL。</p><p><b> 數(shù)據(jù)結(jié)構(gòu):</b></p><p> struct pcap_if{</p><p> struct pcap_if *next;</p
57、><p> char *name;</p><p> char *description;</p><p> struct pcap_addr *addresses;</p><p> u_int flags;</p><p><b> };</b></p><p>
58、 pcap_if *next; 如果非空,指向鏈的下一個元素。如果為空是鏈的最后一個元素。</p><p> char *name; 指向一個字符串,該字符串是傳給pcap_open_live()函數(shù)的設(shè)備名;</p><p> char *description; 如果非空,指向一個對設(shè)備的人性化的描述字符串。</p><p> pcap_addr *ad
59、dresses; 指向網(wǎng)卡地址鏈中的第一個元素。</p><p> u_int flags; PCAP_IF_網(wǎng)卡的標(biāo)志?,F(xiàn)在唯一可用的標(biāo)識是PCAP_IF_LOOKBACK,它被用來標(biāo)識網(wǎng)卡是不是lookback網(wǎng)卡。</p><p> struct pcap_pkthdr { </p><p> struct timeval ts;/*time stamp
60、*/</p><p> bpf_u_int32 caplen; /*length of portion present*/</p><p> bpf_u_int32 len; /*length this packet(off wire)*/</p><p><b> };</b></p><p> timeval
61、 ts; 數(shù)據(jù)報時間戳;</p><p> bpf_u_int32 caplen; 當(dāng)前分片的長度;</p><p> dpf_u_int32 len; 這個數(shù)據(jù)報的長度;</p><p> 細(xì)節(jié)描述:在dump文件中的每個數(shù)據(jù)報都有這樣一個報頭。它用來處理不同數(shù)據(jù)報網(wǎng)卡的不同報頭問題。</p><p> struct pcap_st
62、at {</p><p> u_int ps_recv; /* number of packets received */</p><p> u_int ps_drop; /* number of packets dropped */</p><p> u_int ps_ifdrop; /* drops by interface XXX not yet sup
63、ported */</p><p><b> };</b></p><p> u_int ps_recv; 接受數(shù)據(jù)報的數(shù)目;</p><p> u_int ps_drop; 被驅(qū)動程序丟棄的數(shù)據(jù)報的數(shù)目;</p><p> u_int ps_ifdrop; 被網(wǎng)卡丟棄的數(shù)據(jù)報的數(shù)目;</p>&l
64、t;p> struct pcap_addr{</p><p> pcap_addr * next;</p><p> sockaddr * addr;</p><p> sockaddr * netmask;</p><p> sockaddr *broadaddr;</p><p> sockadd
65、r *dstaddr;</p><p><b> };</b></p><p> pcap_addr * next; 如果非空,指向鏈表中一個元素的指針;空表示鏈表中的最后一個元素。</p><p> sockaddr * addr; 指向包含一個地址的sockaddr的結(jié)構(gòu)的指針。</p><p> socka
66、ddr * netmask; 如果非空,指向包含相對于addr指向的地址的一個網(wǎng)絡(luò)掩碼的結(jié)構(gòu)。</p><p> sockaddr * broadaddr; 如果非空,指向包含相對于addr指向的地址的一個廣播地址,如果網(wǎng)絡(luò)不支持廣播可能為空。</p><p> sockaddr * dstaddr; 如果非空,指向一個相對于addr指向的源地址的目的地址,如果網(wǎng)絡(luò)不支持點對點通訊,則
67、為空。</p><p><b> 數(shù)據(jù)捕獲模塊的實現(xiàn)</b></p><p> 第一步調(diào)用pcap_findalldevs查找出所有可用的網(wǎng)卡,顯示出來,并接收用戶選擇網(wǎng)卡。</p><p> 第二步用戶輸入用于捕獲數(shù)據(jù)包的網(wǎng)卡后,調(diào)用pcap_open_live生成一個抓包描述符。</p><p> 第三步通過
68、調(diào)用pcap_datalink檢查該網(wǎng)卡所在網(wǎng)絡(luò)是不是以太網(wǎng),如果不是則中止程序。</p><p> 第四步接收用戶輸入的過濾條件,調(diào)用pcap_compile和pcap_setfilter生成過濾規(guī)則。</p><p> 第五步調(diào)用pcap_loop進(jìn)行循環(huán)捕獲數(shù)據(jù)包,直到用戶中止。</p><p> 具體流程入下圖所示:</p><p&
69、gt; 圖3-1數(shù)據(jù)捕獲模塊流程圖</p><p><b> 協(xié)議分析模塊的實現(xiàn)</b></p><p> 雖然到此為止已經(jīng)可以順利完成數(shù)據(jù)包的監(jiān)聽工作,但這并不意味著己經(jīng)大功告成了,因為從前面的數(shù)據(jù)包監(jiān)聽的原理中可以知道,數(shù)據(jù)包捕獲程序工作在網(wǎng)絡(luò)底層,將網(wǎng)卡設(shè)置為混雜模式以后,從網(wǎng)絡(luò)底層捕獲到的數(shù)據(jù)包會直接往上發(fā)給應(yīng)用程序進(jìn)行處理,而不再像普通的數(shù)據(jù)包那樣經(jīng)過
70、操作系統(tǒng)的層層過濾。這樣一來,應(yīng)用程序收到的數(shù)據(jù)包是最原始的數(shù)據(jù)包,也就是說監(jiān)聽主機接收到的數(shù)據(jù)包中,除了數(shù)據(jù)包本身的內(nèi)容之外,還帶有從對方主機中的傳輸層、網(wǎng)絡(luò)層以及數(shù)據(jù)鏈路層的數(shù)據(jù)包頭信息,所以要想獲得數(shù)據(jù)包里的應(yīng)用數(shù)據(jù),是需要我們自己來按照每一層的協(xié)議剝離數(shù)據(jù)包頭中的每一層首部內(nèi)容的,這就是協(xié)議分析需要完成的工作。</p><p> 網(wǎng)絡(luò)協(xié)議分析的總體流程</p><p> 網(wǎng)絡(luò)功
71、能的分層帶來了網(wǎng)絡(luò)協(xié)議的層次結(jié)構(gòu),網(wǎng)絡(luò)數(shù)據(jù)在傳送時,同樣也是被分解成一個個的數(shù)據(jù)報逐層傳送的,在兩臺主機的實際通信過程中,從邏輯上講,是兩臺主機的對等層直接通信。而實際上,數(shù)據(jù)包并不是從某一計算機網(wǎng)絡(luò)系統(tǒng)的第N層直接傳導(dǎo)另一計算機網(wǎng)絡(luò)系統(tǒng)的第N層的,而是從這臺計算機的某一層直接傳送N十1層,直至到達(dá)物理層最后分解為比特流流經(jīng)物理介質(zhì)到達(dá)另一臺計算機,然后在從另一臺計算機中的底層逐層向上傳送的。</p><p>
72、 當(dāng)數(shù)據(jù)包被傳輸?shù)侥骋粚拥臅r候,該層都會對數(shù)據(jù)包進(jìn)行加工,在發(fā)送方通常是加上一個與該層協(xié)議有關(guān)的控制或標(biāo)志信息,即數(shù)據(jù)包的包頭或包尾;而在接受方則是需要逐層拆下本層標(biāo)志,即去掉數(shù)據(jù)包的包頭或包尾,根據(jù)控制信息進(jìn)行相應(yīng)的處理,將分解后的數(shù)據(jù)報逐層上傳,直至應(yīng)用程序獲得最終數(shù)據(jù)。比如發(fā)送方在數(shù)據(jù)鏈路層通常會在包頭加上目的MAC地址、源MAC地址、其他一些具體網(wǎng)絡(luò)信息及幀定界符,在包尾加上循環(huán)冗余碼,并使用字節(jié)填充或位填充,由接收方數(shù)據(jù)鏈路層
73、去掉包頭與包尾進(jìn)行相關(guān)解釋工作。數(shù)據(jù)包的加工工作如圖4-1所示:</p><p> 圖4-1 數(shù)據(jù)封裝示意</p><p> TCP傳給IP的數(shù)據(jù)單元稱作TCP報文段或簡稱為TCP段(TCP Segment);IP傳給網(wǎng)絡(luò)接口層的數(shù)據(jù)單元稱作IP數(shù)據(jù)報(IP datagram);通過以太網(wǎng)傳輸?shù)谋忍亓鞣Q作幀,分組既可以是一個IP數(shù)據(jù)報也可以是IP數(shù)據(jù)報的一個片(fragment)。協(xié)議
74、分析就是數(shù)據(jù)封裝的逆過程。協(xié)議分析的流程圖如圖4-2所示:</p><p> 圖4-2 網(wǎng)絡(luò)協(xié)議分析流程圖</p><p> 從圖可以看到,對于監(jiān)聽程序捕獲到的數(shù)據(jù)報,需要按以下步驟分層次進(jìn)行協(xié)議分析:</p><p> (1)首先是讀取數(shù)據(jù)鏈路層的報頭,從報頭中可以得到:計算機的源MAC地址和目的MAC地址、數(shù)據(jù)包的長度以及上層協(xié)議的類型。</p>
75、;<p> (2)然后需要去掉數(shù)據(jù)鏈層的報頭,此時可以獲得IP數(shù)據(jù)報、arp、rarp數(shù)據(jù)包,在這一層中可以對IP數(shù)據(jù)報做一定的統(tǒng)計和分析等等;對arp、rarp數(shù)據(jù)包可以獲得發(fā)送端IP和目的IP等重要信息。</p><p> (3)對于IP數(shù)據(jù)報去除網(wǎng)絡(luò)層的報頭以后,可以獲得傳輸層數(shù)據(jù)報,對TCP/UDP數(shù)據(jù)包的報頭進(jìn)行分析在這一層中還可以獲得數(shù)據(jù)報的端口號信息,根據(jù)端口號進(jìn)一步判斷數(shù)據(jù)報屬于
76、何種應(yīng)用層協(xié)議。</p><p> (4)對數(shù)傳輸層數(shù)據(jù)報去除掉傳輸層報頭以后,就獲得了應(yīng)用層數(shù)據(jù)報,在應(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)主機瀏覽網(wǎng)頁的原貌等等。</p><p> (5)
77、對所有的數(shù)據(jù)報頭分析處理后,取出其中的主要信息然后顯示給用戶。</p><p> 對TCP/IP模型中各層協(xié)議的分析</p><p> 前面的內(nèi)容已經(jīng)提到過,我們在對數(shù)據(jù)包根據(jù)應(yīng)用層協(xié)議進(jìn)行分析的時候都需要首先剝離數(shù)據(jù)包中的包頭并且需要根據(jù)包頭信息判斷是何種應(yīng)用層協(xié)議。下面就按照數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層到傳輸層再到應(yīng)用層的順序詳細(xì)的講解每層包頭的結(jié)構(gòu)以及如何對每層的數(shù)據(jù)報進(jìn)行協(xié)議分析。<
78、;/p><p> 以太網(wǎng)首部的分析與提取</p><p> 因為每一個使用Libpcap捕獲的數(shù)據(jù)包,都會有一個指向原始報文頭的指針。假設(shè)這個指針為p。把這個指針強制轉(zhuǎn)換為以太幀格式:(struct ether_header *) p。我們就得到了以太幀的報文頭,就可以對該層協(xié)議進(jìn)行分析和處理。</p><p> 由于在定義IEEE 802.3以前,以太網(wǎng)就存在,
79、因為有多個以太網(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ù)報或者使用以太網(wǎng)II
80、的或者使用IEEE:802.3子網(wǎng)訪問協(xié)議(SNAP)來封裝數(shù)據(jù)。這里我們只討論最為常用的以太網(wǎng)II數(shù)據(jù)報格式,這是在RFC894中定義的,如圖4-3所示,這是以太網(wǎng)II的封裝格式:</p><p> 字節(jié) 6 6 2 46~1500 4</p><p> 圖4-
81、3以太網(wǎng)II的封裝格式</p><p> 其中每個字段的含義如下:</p><p> (1)幀初始同步((Preamble):8字節(jié)長,提供接收端的同步和分隔幀的功能。需要注意的是,幀初始同步字段在網(wǎng)絡(luò)監(jiān)視器中是不可見的。</p><p> (2)目的地址(Destination Address):6字節(jié)長,指明目的地址。目的地址可以是單播、多播或者以太網(wǎng)的廣
82、播地址。其中,單播地址也稱為MAC地址。</p><p> (3)源地址((Source Address):6字節(jié)長,指明發(fā)送節(jié)點的單播地址。</p><p> (4)以太網(wǎng)類型(Ether Type):2字節(jié)長,指明在以太網(wǎng)幀中上層協(xié)議的類型。這個字段被用來將以太網(wǎng)的有效載荷傳給正確的上層協(xié)議實體。如果在該字段中未注明有上層協(xié)議實體接收有效載荷幀。該幀將被丟棄。比如,對于IP數(shù)據(jù)報,
83、這個字段的值為0x0800;對于ARP消息,該字段的值被設(shè)置為0x0806。</p><p> (5)有效載荷(Payload):以太網(wǎng)II的幀的有效載荷由上層協(xié)議的協(xié)議數(shù)據(jù)單元組成,是數(shù)據(jù)包本身的具體內(nèi)容。以太網(wǎng)II能發(fā)送最大1500字節(jié)的有效載荷。因為以太網(wǎng)具有沖突檢測機制,以太網(wǎng)II的最小幀有效載荷為46字節(jié)。如果上層的協(xié)議數(shù)據(jù)單元小于46字節(jié),則必須填充到46字節(jié)。</p><p&g
84、t; (6)幀校驗序列(Frame Check Sequence, FCS):4字節(jié)長,提供位級別的完整性校驗,也被稱為循環(huán)冗余校驗(CRC)。本子段對于網(wǎng)絡(luò)監(jiān)視器來說同樣是不可見的。</p><p> IP首部的分析與提取</p><p> 因為以太幀報頭的長度都是一樣的。所以在提取IP包頭的時候可以將指針P加上以太幀包頭的長度后,把格式強制轉(zhuǎn)化為IP包頭格式即:(struct i
85、p *) (p + sizeof (struct ether_header))。就得到了指向IP報頭的指針,我們就可以進(jìn)行相應(yīng)的分析了。</p><p> IP網(wǎng)絡(luò)上的主機是通過IP數(shù)據(jù)報來交換數(shù)據(jù)的,IP數(shù)據(jù)報包括數(shù)據(jù)單元和首部字段,其中,數(shù)據(jù)單元包含要交換的所有信息,首部字段描述這個信息和數(shù)據(jù)報本身。只要設(shè)備需要通過IP網(wǎng)絡(luò)向其他網(wǎng)絡(luò)發(fā)送數(shù)據(jù),它就會創(chuàng)建一個數(shù)據(jù)報來發(fā)送數(shù)據(jù)。</p><
86、p> 實際上,IP數(shù)據(jù)報是作為IP包來發(fā)送的,IP包將IP數(shù)據(jù)報通過交換設(shè)備一跳一跳地中繼到目的系統(tǒng)。雖然很多時候一個IP數(shù)據(jù)報就是一個IP包,但它們在概念上是不同的實體。如圖4-4是IP數(shù)據(jù)報在RFC791中定義的封裝格式:</p><p><b> 比特</b></p><p> 0 4 8
87、 16 20 24 31</p><p> 圖4-4 IP數(shù)據(jù)報格式</p><p> 其中每個字段的含義如下:</p><p> (1)版本(version):長度為4位,顯示IP報頭的版本。目前在所有互聯(lián)網(wǎng)絡(luò)和Internet中使用的標(biāo)準(zhǔn)IP版本號是4(即IPv4)。&l
88、t;/p><p> (2)報頭長(header length):長度為4位,表示IP頭的長度。典型的IP頭不包括任何選項,長度為20字節(jié)。</p><p> (3)服務(wù)類型(type of service):長度為8位,表示按照優(yōu)先權(quán)、安全性以及吞吐量等數(shù)據(jù)包的服務(wù)類型。</p><p> (4)數(shù)據(jù)包總長(total length):長度為2位,表示IP數(shù)據(jù)報總
89、的字節(jié)數(shù),包括IP頭和有效載荷。</p><p> (5)標(biāo)識(identifier):長度為2位,作為分割以及組裝數(shù)據(jù)包時的識別標(biāo)志來使用,被分割的數(shù)據(jù)包被分配有同一數(shù)值標(biāo)識。</p><p> (6)標(biāo)志(flags):長度為3位,包含兩個用于分片的標(biāo)志。其中一個標(biāo)志是用于表示IP有效載荷是否符合分片的標(biāo)準(zhǔn),而另一個是表示對于已分片的IP數(shù)據(jù)報是否還有更多的分片。</p>
90、;<p> (7)片偏移(fragment offset):長度為13位,表示分片相對于原始IP數(shù)據(jù)報有效載荷的偏移量。</p><p> (8)生存時間(time to live):長度為1字節(jié),表示IP數(shù)據(jù)包的壽命,目的是廢棄掉在網(wǎng)絡(luò)中循環(huán)著的IP數(shù)據(jù)包,一般地,每通過一次路由器,生存時間就被減去1,當(dāng)生存時間為0時,數(shù)據(jù)包將被拋棄。</p><p> (9)協(xié)議(
91、protocol):長度為1字節(jié),表示包含在有效載荷中的上層協(xié)議。IP協(xié)議字段的一般值有:1表示ICMP,2表示IGMP,6表示TCP,17表示UDP等等。</p><p> (10)報頭校驗和(header checksum):長度為2字節(jié),是用于確認(rèn)IP數(shù)據(jù)包是否己毀壞的字段。</p><p> (11)源目的IP地址(source/destination address):長度為
92、4字節(jié),包含源/目的主機的IP地址。</p><p> (12)選項和填充:此字段跟在IP頭之后,但必須是以4個字節(jié)為增量單位,以使IP頭的大小能用報頭長度字段表示。</p><p> TCP/UDP首部的分析與提取</p><p> TCP/UDP報文頭部的獲取跟IP報文頭部的獲取類似,將P指針的位置向后移IP報文長度個位置即可(struct tcphdr
93、*) (p + sizeof (struct ether_header) + 4 * iph->ip_hl)。然后就可以對TCP/UDP數(shù)據(jù)包進(jìn)行分析了。</p><p> TCP(傳輸控制協(xié)議)為面向事務(wù)的應(yīng)用提供了可靠的面向連接的傳輸協(xié)議。TCP正為目前Intemet上幾乎所有的應(yīng)用協(xié)議所利用,這是因為大部分應(yīng)用程序都需要可靠的、可糾錯的傳輸協(xié)議以保證不丟失或破壞數(shù)據(jù)。盡管IP已經(jīng)做了大部分的搜集工作
94、,并且根據(jù)需要在Internet上發(fā)送數(shù)據(jù)報和數(shù)據(jù)包,但是IP是不可靠的協(xié)議,并不能保證數(shù)據(jù)報或者數(shù)據(jù)包能夠原封不動的到達(dá)其目的地,TCP作為IP的上層協(xié)議,為IP提供了可靠性服務(wù),確保了IP數(shù)據(jù)報中的數(shù)據(jù)的正確性。如圖4-5所示,是TCP段的封裝結(jié)構(gòu)。</p><p><b> 比特</b></p><p> 0 8
95、 16 24 31 </p><p> 圖4-5 TCP數(shù)據(jù)報格式</p><p> 其中,每一段的含義如下:</p><p> (1)源端口(source port):指示發(fā)送TCP段的源應(yīng)用層協(xié)議,是一個2字節(jié)的字段。IP頭中的源地址和TCP頭
96、中的源端口聯(lián)合起來提供一個源套接字。TCP端口為TCP連接數(shù)據(jù)的傳送定義了一種位置,表明段被發(fā)送至的應(yīng)用層進(jìn)程的一個目的端口。在一般情況下,應(yīng)用層協(xié)議的服務(wù)器端在己知的端口上偵聽。表4-1顯示了常用的應(yīng)用層協(xié)議對應(yīng)的端口號。</p><p> (2)目的端口(destination port):指示目的應(yīng)用層協(xié)議,是一個2字節(jié)字段。IP頭中的目的IP地址和TCP頭中的端口聯(lián)合起來提供一個目的套接字。</p
97、><p> (3)序列號(sequence number):指示段的第一個8位組的輸出字節(jié)流的序列號,是一個4字節(jié)字段。用于保證數(shù)據(jù)的到達(dá)順序與可靠性。利用隨機值確定初始值,以字節(jié)為單位表示所發(fā)送數(shù)據(jù)的位置。</p><p> (4)確認(rèn)號(acknowledgment number):一個4位的字段,指示接收方希望收到的輸入字節(jié)流中下一個8位組的序列號。是用于保證可靠性的確認(rèn)號碼。<
98、;/p><p> (5)數(shù)據(jù)偏移(data offset):表示TCP數(shù)據(jù)的起始位置,以4字節(jié)的整數(shù)倍表示,數(shù)據(jù)偏移字段也是TCP頭的大小。在不包括選項的情況下,TCP報頭是20個字節(jié),offset的值為5。</p><p> (6)保留(reserved):一個6字節(jié)字段,為了未來的使用而保留。</p><p> (7)標(biāo)志(flags):一個6字節(jié)字段,指示6
99、個TCP標(biāo)志。這6個標(biāo)志是:URG(緊急)、ACK(確訓(xùn))、PSH(推)、RST(復(fù)句)、SYN(同步)、FIN(結(jié)束)。</p><p> (8)窗口(window):一個2字節(jié)的字段,表明該段的發(fā)送方的接收緩沖區(qū)中可供使用的空間有多少字節(jié)數(shù)。窗口大小的廣告是一種實現(xiàn)接收流流控制的方式。</p><p> (9)校驗和(checksum):一個2字節(jié)的字段,為TCP段提供位級別的完整
100、性校驗。</p><p> (10)緊急指針(urgent pointer):一個2字節(jié)字段,它表明段中緊急數(shù)據(jù)的位置。</p><p> (11)選項(option):為提高利用TCP的通信性能所準(zhǔn)備的選項。</p><p> 用戶數(shù)據(jù)報協(xié)議(UDP)是定義用來在互連網(wǎng)絡(luò)環(huán)境中提供包交換的計算機通信的協(xié)議。此協(xié)議默認(rèn)認(rèn)為網(wǎng)路協(xié)議(IP)是其下層協(xié)議。此協(xié)議提
101、供了向另一用戶程序發(fā)送信息的最簡便的協(xié)議機制。此協(xié)議是面向操作的,未提供提交和復(fù)制保護。以下是UDP協(xié)議的報文頭格式:</p><p><b> 比特</b></p><p> 0 16 31</p><p> 圖4-6 TCP數(shù)據(jù)包格式</p><p> (1)源端
102、口—16位。源端口是可選字段。當(dāng)使用時,它表示發(fā)送程序的端口,同時它還被認(rèn)為是沒有其它信息的情況下需要被尋址的答復(fù)端口。如果不使用,設(shè)置值為0。</p><p> (2)目的端口—16位。目標(biāo)端口在特殊因特網(wǎng)目標(biāo)地址的情況下具有意義。</p><p> (3)長度—16位。該用戶數(shù)據(jù)報的八位長度,包括協(xié)議頭和數(shù)據(jù)。長度最小值為8。</p><p> (4)校驗
103、和—16位。IP協(xié)議頭、UDP協(xié)議頭和數(shù)據(jù)位,最后用0填補的信息假協(xié)議頭總和。如果必要的話,可以由兩個八位復(fù)合而成。</p><p> 應(yīng)用層協(xié)議的識別與分析</p><p> 對于應(yīng)用層協(xié)議本程序采用的是端口識別技術(shù)。端口是應(yīng)用程序在網(wǎng)絡(luò)通信上使用的數(shù)據(jù)輸入輸出口。端口分為兩種。一種為公認(rèn)端口,另一種為短暫端口。公認(rèn)端口被分配給網(wǎng)絡(luò)上的服務(wù)程序。當(dāng)某一網(wǎng)絡(luò)客戶端利用其他計算機上的服務(wù)
104、程序時,在根據(jù)IP地址指定服務(wù)計算機的同時,也指定了被分配的服務(wù)程序的公認(rèn)端口號。由此,可以利用與端口號對應(yīng)的特定的網(wǎng)絡(luò)服務(wù)。公認(rèn)端口號有很多,工人端口號被定義在unix類操作系統(tǒng)下的/etc/services文件中下表列出了其中的一部分。</p><p> 表4-1 常用協(xié)議和對應(yīng)的端口號</p><p> 短暫端口號是客服端程序與服務(wù)器程序進(jìn)行通信時,短暫使用端口號。短暫端口號是不
105、可再生的,被運行系統(tǒng)分配給客戶端程序。因為常用端口和常用協(xié)議對應(yīng),我們可以利用這個原理來識別應(yīng)用層協(xié)議。關(guān)鍵代碼如下</p><p> void getportname (int portn, char portch[], char *protocol){</p><p> if (getservbyport (htons (portn), protocol) != NULL){<
106、;/p><p> strcpy(portch, getservbyport(htons(portn),protocol)->s_name);</p><p><b> }</b></p><p> else{ //短暫端口等找不到名稱時 </p><p> sprintf (portch, "e&qu
107、ot;);</p><p><b> }</b></p><p><b> }</b></p><p> 現(xiàn)在介紹一下getportname()函數(shù)。此函數(shù)完成的是取得端口號和區(qū)別TCP/UDP類別的兩個參數(shù)并返回端口名稱的工作。getportname()函數(shù)的核心是調(diào)用getservbyport()函數(shù)。用這個函數(shù)
108、來檢索與端口相關(guān)的信息,吧結(jié)果作為指向servent型的結(jié)構(gòu)體的指針并返回。servent型的結(jié)構(gòu)體在netdb.h頭文件中被聲明。在這里使用的s_name成員。把端口名稱賦給s_name。getportname()函數(shù)檢索端口名稱失敗時,返回NULL。這是因為得到的端口號是短暫端口號,沒有檢索到它的端口名稱。這時,常把端口號作為端口的名稱來用。</p><p><b> 程序運行與測試</b&
109、gt;</p><p><b> 測試環(huán)境</b></p><p><b> 硬件環(huán)境</b></p><p> 處理器P3 800Mhz以上;內(nèi)存128M以上;多臺普通搭載網(wǎng)卡的PC、經(jīng)過集線器互聯(lián)。</p><p><b> 程序運行環(huán)境</b></p>
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)協(xié)議分析課程設(shè)計---解析ip數(shù)據(jù)包
- 畢業(yè)設(shè)計---局域網(wǎng)的數(shù)據(jù)包監(jiān)聽及數(shù)據(jù)分析
- php網(wǎng)絡(luò)數(shù)據(jù)包分析工具的設(shè)計與開發(fā)(源代碼+論文)
- 《網(wǎng)絡(luò)編程與協(xié)議分析》課程設(shè)計--網(wǎng)絡(luò)數(shù)據(jù)包抓取與分析軟件
- 計算機網(wǎng)絡(luò)課程設(shè)計---網(wǎng)絡(luò)協(xié)議數(shù)據(jù)包
- 高速網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析系統(tǒng)的研究與實現(xiàn).pdf
- 協(xié)議數(shù)據(jù)包的捕獲與分析實習(xí)報告
- H2003032102_賀增杰_網(wǎng)絡(luò)數(shù)據(jù)包分析工具的設(shè)計與開發(fā).doc
- 網(wǎng)絡(luò)課程設(shè)計--發(fā)送tcp數(shù)據(jù)包
- 網(wǎng)絡(luò)行為監(jiān)控系統(tǒng)后臺數(shù)據(jù)包的處理程序的設(shè)計與實現(xiàn).pdf
- 網(wǎng)絡(luò)數(shù)據(jù)包截獲分析系統(tǒng)的研究.pdf
- 基于SMTP協(xié)議的數(shù)據(jù)包分析與還原.pdf
- 基于應(yīng)用層截包的網(wǎng)絡(luò)數(shù)據(jù)包捕獲分析系統(tǒng)的設(shè)計與實現(xiàn).pdf
- IP網(wǎng)絡(luò)數(shù)據(jù)包流部分特征分析工具的設(shè)計與實現(xiàn).pdf
- 帶有數(shù)據(jù)包丟失的網(wǎng)絡(luò)控制系統(tǒng)的分析與設(shè)計.pdf
- 高性能的網(wǎng)絡(luò)數(shù)據(jù)包捕獲與分析系統(tǒng)的設(shè)計和實現(xiàn).pdf
- 網(wǎng)絡(luò)數(shù)據(jù)包監(jiān)聽與分析工具的模擬實現(xiàn)
- 計算機網(wǎng)絡(luò)課程設(shè)計--數(shù)據(jù)包發(fā)送和接受程序的實現(xiàn)
- ip數(shù)據(jù)包的捕獲與分析
- 畢業(yè)論文--- 局域網(wǎng)的ip數(shù)據(jù)包監(jiān)控分析軟件與設(shè)計
評論
0/150
提交評論