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

下載本文檔

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

文檔簡介

畢畢 業(yè)業(yè) 設(shè)設(shè) 計計( 論論 文文) 網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計開發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計開發(fā) 論論文作者姓名:文作者姓名: 申申請請學(xué)位學(xué)位專業(yè)專業(yè): : 申申請請學(xué)位學(xué)位類別類別: : 指指導(dǎo)導(dǎo)教教師師姓姓名名( (職職稱稱) ): : 論論文提交日期:文提交日期: 網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計開發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的設(shè)計開發(fā) 摘摘 要要 本文設(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)鍵、最主要的模塊。 本文的主要內(nèi)容如下:首先介紹了網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的背景和概念。 其次進行了程序的總體設(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é)議分析流程進行了詳細的講解,分析了常用 網(wǎng)絡(luò)協(xié)議。最后進行了程序的測試與運行:測試了程序能否按照預(yù)期的效果正 確執(zhí)行,印證了預(yù)期結(jié)果。 關(guān)鍵詞:關(guān)鍵詞:libpcap;linux;數(shù)據(jù)包捕獲;應(yīng)用層;協(xié)議識別 the design and development of network packet protocol analyzing program abstract 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 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 protocol analyzing module. and the last two modules are key modules. the research work was described as followed. firstly, we introduce the background and concepts 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 capture 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: libpcap; linux; network packet capturing; application layer; protocol identification 目目 錄錄 論文總頁數(shù):23 頁 1引言.1 1.1課題背景.1 1.2網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序簡介.2 1.3國內(nèi)外研究現(xiàn)狀.2 2網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的總體設(shè)計.3 2.1網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的功能分析.3 2.2系統(tǒng)的組成結(jié)構(gòu)和工作流程.3 2.2.1系統(tǒng)的結(jié)構(gòu)框圖.3 2.2.2系統(tǒng)的結(jié)構(gòu)和功能.4 2.2.3程序的工作流程.5 2.3系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)分析.6 3網(wǎng)絡(luò)數(shù)據(jù)包捕獲模塊的實現(xiàn).7 3.1網(wǎng)絡(luò)數(shù)據(jù)包捕獲簡介.7 3.2基于 libpcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲的實現(xiàn)8 3.2.1libpcap 安裝8 3.2.2libpcap 中基本的數(shù)據(jù)結(jié)構(gòu)和函數(shù)8 3.3數(shù)據(jù)捕獲模塊的實現(xiàn).11 4協(xié)議分析模塊的實現(xiàn).11 4.1網(wǎng)絡(luò)協(xié)議分析的總體流程.12 4.2對 tcp/ip 模型中各層協(xié)議的分析.14 4.2.1以太網(wǎng)首部的分析與提取.14 4.2.2ip 首部的分析與提取15 4.2.3tcp/udp 首部的分析與提取16 4.2.4應(yīng)用層協(xié)議的識別與分析.18 5程序運行與測試.20 5.1測試環(huán)境.20 5.1.1硬件環(huán)境.20 5.1.2程序運行環(huán)境.20 5.2測試步驟.20 5.3測試結(jié)果評價.20 結(jié) 論.20 參考文獻.21 致 謝.22 聲 明.23 1 1 引言引言 1.11.1 課題背景課題背景 隨著計算機網(wǎng)絡(luò)的不斷發(fā)展,全球信息化已成為當今社會發(fā)展的趨勢。但 由于計算機網(wǎng)絡(luò)自身所特具有的特點,比如聯(lián)結(jié)形式多樣性和網(wǎng)絡(luò)的開放性、 互連性等特征,所以導(dǎo)致網(wǎng)絡(luò)易受黑客還有一些病毒的攻擊。所以網(wǎng)上信息的 安全和保密是一個至關(guān)重要的問題。對于軍用的自動化指揮網(wǎng)絡(luò)和銀行等傳輸 敏感數(shù)據(jù)的計算機網(wǎng)絡(luò)系統(tǒng)而言,其網(wǎng)上信息的安全和保密尤為重要。因此, 網(wǎng)絡(luò)必須有足夠強的安全措施,否則該網(wǎng)絡(luò)將是個無用、甚至?xí)<皣野踩?的網(wǎng)絡(luò)。在計算機網(wǎng)絡(luò)的世界里,存在著很多潛在的威脅,因此網(wǎng)絡(luò)的安全措 施應(yīng)能全方位地應(yīng)對各種不同的威脅,這樣才可以真正的做到網(wǎng)絡(luò)服務(wù)于社會, 體現(xiàn)網(wǎng)絡(luò)的先進性。 計算機網(wǎng)絡(luò)所面臨的威脅大體可分為兩種:一是對網(wǎng)絡(luò)中信息的威脅;二 是對網(wǎng)絡(luò)中設(shè)備的威脅。影響計算機網(wǎng)絡(luò)的因素很多,有些因素可能是有意的, 也可能是無意的;可能是人為的,也可能是非人為的;可能是外來黑客對網(wǎng)絡(luò) 系統(tǒng)資源的非法使有,歸結(jié)起來,針對網(wǎng)絡(luò)安全的威脅主要有三種: (1)人為的無意失誤:如操作員安全配置不當造成的安全漏洞,用戶安全意 識不強,用戶口令選擇不慎,用戶將自己的帳號隨意轉(zhuǎn)借他人或與別人共享等 都會對網(wǎng)絡(luò)安全帶來威脅。 (2)人為的惡意攻擊:這是計算機網(wǎng)絡(luò)所面臨的最大威脅,敵手的攻擊和計 算機犯罪就屬于這一類。此類攻擊又可以分為以下兩種:一種是主動攻擊,它 以各種方式有選擇地破壞信息的有效性和完整性;另一類是被動攻擊,它是在 不影響網(wǎng)絡(luò)正常工作的情況下,進行截獲、竊取、破譯以獲得重要機密信息。 這兩種攻擊均可對計算機網(wǎng)絡(luò)造成極大的危害,并導(dǎo)致機密數(shù)據(jù)的泄漏。 (3)網(wǎng)絡(luò)軟件的漏洞和“后門”:網(wǎng)絡(luò)軟件不可能是百分之百的無缺陷和無 漏洞的,然而,這些漏洞和缺陷恰恰是黑客進行攻擊的首選目標,曾經(jīng)出現(xiàn)過 黑客攻入網(wǎng)絡(luò)內(nèi)部的事件,這些事件的大部分就是因為安全措施不完善所招致 的苦果。另外,軟件的“后門”都是軟件公司的設(shè)計編程人員為了自便而設(shè)置 的,一般不為外人所知,但一旦“后門”洞開,其造成的后果將不堪設(shè)想。 為了及早發(fā)現(xiàn)并制止網(wǎng)絡(luò)上的各種攻擊,我們需要通過對網(wǎng)絡(luò)上的數(shù)據(jù)進 行分析來發(fā)現(xiàn)并找出問題,提前預(yù)防。這也是本論文的一個重要目的。網(wǎng)絡(luò)安 全管理員運用網(wǎng)絡(luò)封包截獲技術(shù),抓取網(wǎng)絡(luò)中有用的數(shù)據(jù)包,然后通過對數(shù)據(jù) 包內(nèi)容進行分析,確定哪些是有害的或者含有攻擊企圖的包,以此來達到對網(wǎng) 絡(luò)攻擊的預(yù)防。同時許多防火墻也是基于包過濾技術(shù)的。本文將介紹網(wǎng)絡(luò)數(shù)據(jù) 包協(xié)議分析程序的工作原理以及它的實現(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ù)可以是用戶的帳號和密碼,也可以是一些商用機密數(shù)據(jù)等。它是利用計算機 的網(wǎng)絡(luò)接口截獲目的地為其他計算機的數(shù)據(jù)報文的一種工具。 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的正當用處主要是分析網(wǎng)絡(luò)的流量,以便找出所 關(guān)心的網(wǎng)絡(luò)中潛在的問題。例如,假設(shè)網(wǎng)絡(luò)的某一段運行得不是很好,報文的 發(fā)送比較慢,而我們又不知道問題出在什么地方,此時就可以用網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議 分析程序來作出精確的問題判斷。在合理的網(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ā)送占用多少時間、或著 相互主機的報文傳送間隔時間等等,這些信息為管理員判斷網(wǎng)絡(luò)問題、管理網(wǎng) 絡(luò)區(qū)域提供了非常寶貴的信息。 1.31.3 國內(nèi)外研究現(xiàn)狀國內(nèi)外研究現(xiàn)狀 現(xiàn)在國內(nèi)外已經(jīng)有很多成熟并且功能強大的網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析軟件。比 較著名的網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析軟件有:開源軟件:wireshark、tcpdump。商用 軟件:etherpeek 下面對這幾種軟件進行簡要的介紹: wiresharkwireshark: wireshark 是一個開放源碼的網(wǎng)絡(luò)分析系統(tǒng),也是是目前最 好的開放源碼的網(wǎng)絡(luò)協(xié)議分析器,支持 linux 和 windows 平臺。wireshark 起 初由 gerald combs 開發(fā),隨后由一個松散的 wireshark 團隊組織進行維護開發(fā)。 它目前所提供的強大的協(xié)議分析功能完全可以媲美商業(yè)的網(wǎng)絡(luò)分析系統(tǒng),自從 1998 年發(fā)布最早的 0.2 版本至今,大量的志愿者為 wireshark 添加新的協(xié)議解 析器,如今 wireshark 已經(jīng)支持五百多種協(xié)議解析。很難想象如此多的人開發(fā) 的代碼可以很好的融入系統(tǒng)中;并且在系統(tǒng)中加入一個新的協(xié)議解析器很簡單, 一個不了解系統(tǒng)的結(jié)構(gòu)的新手也可以根據(jù)留出的接口進行自己的協(xié)議開發(fā)。這 都歸功于 wireshark 良好的設(shè)計結(jié)構(gòu)。事實上由于網(wǎng)絡(luò)上各種協(xié)議種類繁多, 各種新的協(xié)議層出不窮。一個好的協(xié)議分析器必需有很好的可擴展性和結(jié)構(gòu)。 這樣才能適應(yīng)網(wǎng)絡(luò)發(fā)展的需要不斷加入新的協(xié)議解析器。 tcpdumptcpdump:顧名思義,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ù)包進行截獲的包分析工具。tcpdump 以其強大的功能,靈活的截取策 略,成為每個高級的系統(tǒng)管理員分析網(wǎng)絡(luò),排查問題等所必備的工具之一。 etherpeeketherpeek:這個工具軟件開始只是一個網(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ù)變得簡單化。etherpeek 采用工業(yè)標準,非常容易使用,提供解碼、過濾 和診斷網(wǎng)絡(luò)的功能。以友好圖形界面出名,etherpeek 提供非常詳細且多樣化 的網(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ò)軟硬件。 2 2 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的總體設(shè)計網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的總體設(shè)計 2.12.1 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的功能分析網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序的功能分析 對于網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序進行功能分析的第一步是要確立程序所要實 現(xiàn)的目標,也就是程序最終要解決的問題。本程序所要實現(xiàn)的目標就是在共享 式以太網(wǎng)中捕獲根據(jù)過濾規(guī)則設(shè)置的流經(jīng)本地網(wǎng)卡的數(shù)據(jù)包,并且對數(shù)據(jù)包中 的信息進行分析。 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序必須完成對常用協(xié)議的識別和分析:要求至少實 現(xiàn)tcp/ip協(xié)議簇幾個基本協(xié)議的分析(arp、rarp、tcp、udp),以及應(yīng)用層的 常用協(xié)議分析。為了減少設(shè)計的復(fù)雜度,程序采用字符界面。對網(wǎng)絡(luò)數(shù)據(jù)包的 捕獲、規(guī)則過濾和對數(shù)據(jù)包的分析是本程序的主要功能。 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è)計了網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序,圖2-1是程序的結(jié)構(gòu) 框圖。 圖 2-1 網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議分析程序結(jié)構(gòu)框圖 下面對該程序的整體結(jié)構(gòu)進行一下描述:該程序的運行環(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ù)據(jù)包交給上層的數(shù)據(jù)處理模塊,進行協(xié) 議分析。最后將分析后的數(shù)據(jù)顯示在用戶界面上。 .2 系統(tǒng)的結(jié)構(gòu)和功能系統(tǒng)的結(jié)構(gòu)和功能 網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序是一個基于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ù)報協(xié)議 分析程序 輸入數(shù)據(jù)捕獲規(guī)則匹配數(shù)據(jù)處理 協(xié)議分析輸出 2、數(shù)據(jù)捕獲模塊。該模塊的主要功能是捕獲流經(jīng)本地網(wǎng)卡的所有數(shù)據(jù)。其 原理是通過把網(wǎng)卡設(shè)置為混雜模式,使得網(wǎng)卡對所有流經(jīng)它的數(shù)據(jù)包都交給上 層程序處理。 3、規(guī)則匹配模塊,該模塊的主要功能是根據(jù)用戶的需求對需要捕獲的數(shù)據(jù) 包進行過濾設(shè)置。因為不是所有經(jīng)過本地網(wǎng)卡的數(shù)據(jù)報都對我們分析網(wǎng)絡(luò)有用, 而且如果將所有經(jīng)過網(wǎng)卡的數(shù)據(jù)捕獲會增加系統(tǒng)的開銷。因此我們設(shè)置了一個 規(guī)則匹配模塊,當所捕獲的信息與我們設(shè)置的規(guī)則相符時我們就把它交給數(shù)據(jù) 處理模塊,否則就丟棄。 4、數(shù)據(jù)處理模塊。該模塊的主要功能是對捕獲的數(shù)據(jù)進行分析顯示處理。 主要是調(diào)用協(xié)議分析模塊和顯示模塊。 41 協(xié)議分析模塊。該模塊的主要功能是對捕獲的數(shù)據(jù)包進行協(xié)議分析。 把數(shù)據(jù)包捕獲下來后,我們需要對其分析才能知道網(wǎng)絡(luò)中存在的安全問題。該 模塊主要是對tcp/ip各層的協(xié)議進行分析。 42 顯示模塊。該模塊的主要功能是將分析的結(jié)果顯示給用戶。對數(shù)據(jù) 包進行協(xié)議分析后要把結(jié)果顯示給用戶本程序才結(jié)束。因為數(shù)據(jù)包中包含的信 息太多,如果全部顯示給用戶有所不便,所以我們挑選其中比較重要的信息輸 出給用戶。 .3 程序的工作流程程序的工作流程 圖2-3為本程序的流程圖,下面其進行簡要的敘述: 1、程序開始時首先查找計算機上所有可用的網(wǎng)卡,并讓用戶選擇用于捕獲 數(shù)據(jù)包的網(wǎng)卡。 2、用戶輸入用于捕獲數(shù)據(jù)包的網(wǎng)卡和過濾規(guī)則。只過濾用戶所關(guān)心的信息。 3、程序判斷該網(wǎng)卡所在的網(wǎng)絡(luò)是否為以太網(wǎng),不是則中止,是則繼續(xù)。因 為本程序只能在共享以太網(wǎng)中進行數(shù)據(jù)捕獲。 4、編譯用戶設(shè)置的過濾規(guī)則。 5、開始進行捕獲,并分析數(shù)據(jù),將數(shù)據(jù)顯示給用戶。當用戶停止時就結(jié)束 程序,否則繼續(xù)捕獲。 圖2-3 網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析程序的流程圖 2.32.3 系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)分析系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)分析 前面給出了網(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é)議進行 分析的技術(shù)、協(xié)議識別技術(shù)。 1、數(shù)據(jù)包捕獲技術(shù):本程序要對網(wǎng)絡(luò)中的數(shù)據(jù)進行分析,首先就要將網(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過濾機制等。通 查找所有可 用的網(wǎng)卡 是否是以太網(wǎng) 編譯并且設(shè)置過 濾規(guī)則 開始捕獲數(shù)據(jù) 并分析顯示結(jié) 果 結(jié)束程序 用戶中止嗎? 選擇用于捕獲的網(wǎng)卡和 過濾規(guī)則 開始 n y n y 過調(diào)用libpcap庫函數(shù)可以輕易的實現(xiàn)共享以太網(wǎng)中數(shù)據(jù)包的截獲,而且實時性 相當?shù)膹?,因為libpcap是處于用戶態(tài)所以減少了系統(tǒng)的開銷。libpcap是一個 基于bpf的開放源碼的捕包函數(shù)庫?,F(xiàn)有的大部分linux捕包系統(tǒng)都是基于這套 函數(shù)庫或者是在它基礎(chǔ)上做一些針對性的改進。 2、對tcp/ip各層基本協(xié)議分析的技術(shù):要對tcp/ip各層的基本協(xié)議進行分 析,主要是要對所要分析的協(xié)議有充分的了解,特別是對各種協(xié)議的報頭格式 要有深入的了解。對各種協(xié)議進行分析時主要是將報頭中的重要信息顯示給用 戶,還有可能對數(shù)據(jù)包的正文信息解碼。 3、協(xié)議識別技術(shù):由于 osi 的 7 層協(xié)議模型,協(xié)議數(shù)據(jù)是從上到下封裝后 發(fā)送的。對于協(xié)議的識別需要從下至上進行。例如,首先對網(wǎng)絡(luò)層的協(xié)議識別 后進行脫去網(wǎng)絡(luò)層協(xié)議頭。將里面的數(shù)據(jù)交給傳輸層分析,這樣一直進行下去 直到應(yīng)用層。應(yīng)用層以下的各種協(xié)議一般都可以通過下一層的協(xié)議中的關(guān)鍵信 息來識別。但是應(yīng)用層的協(xié)議種類相當多,無法從下層協(xié)議中識別。對于應(yīng)用 層協(xié)議識別的方法目前有幾種技術(shù):基于特征串的應(yīng)用層協(xié)議識別、venus fast protocol recognition、以及端口識別。在本程序中我們采用的是端口識 別技術(shù)。端口識別的原理是常用協(xié)議使用固定端口來進行通信。端口識別的優(yōu) 點是:簡單、容易實現(xiàn)。缺點是:一些不常用協(xié)議不能被識別,常用協(xié)議修改 端口后也無法識別。 3 3網(wǎng)絡(luò)數(shù)據(jù)包捕獲模塊的實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包捕獲模塊的實現(xiàn) 3.13.1 網(wǎng)絡(luò)數(shù)據(jù)包捕獲簡介網(wǎng)絡(luò)數(shù)據(jù)包捕獲簡介 網(wǎng)絡(luò)數(shù)據(jù)包截獲一般指通過截獲整個網(wǎng)絡(luò)的所有信息流量,根據(jù)信息源主 機,目標主機,服務(wù)協(xié)議端口等信息簡單過濾掉不關(guān)心的數(shù)據(jù),再將用戶感興 趣的數(shù)據(jù)發(fā)送給更高層的應(yīng)用程序進行分析。一方面要,網(wǎng)絡(luò)截取模塊要能保 證截取到所有網(wǎng)絡(luò)上的數(shù)據(jù)包,尤其是檢測到被分片的數(shù)據(jù)包(這可能蘊涵著 攻擊) 。另方面,數(shù)據(jù)截取模塊截取數(shù)據(jù)包的效率也是很重要的。它直接影響整 個入侵檢測系統(tǒng)的運行速度。 從廣義的角度上看,一個包捕獲機制包含三個主要部分:最底層是針對特 定操作系統(tǒng)的包捕獲機制,最高層是針對用戶程序的接口,第三部分是包過濾 機制。不同的操作系統(tǒng)實現(xiàn)的底層包捕獲機制可能是不一樣的,但從形式上看 大同小異。數(shù)據(jù)包常規(guī)的傳輸路徑依次為網(wǎng)卡、設(shè)備驅(qū)動層、數(shù)據(jù)鏈路層、ip 層、傳輸層、最后到達應(yīng)用程序。而數(shù)據(jù)包捕獲機制是在數(shù)據(jù)鏈路層增加一個 旁路處理,對發(fā)送和接收到的數(shù)據(jù)包做過濾/緩沖等相關(guān)處理,最后直接傳遞到 應(yīng)用程序。值得注意的是,包捕獲機制并不影響操作系統(tǒng)對數(shù)據(jù)包的網(wǎng)絡(luò)棧處 理。對用戶程序而言,包捕獲機制提供了一個統(tǒng)一的接口,使用戶程序只需要 簡單的調(diào)用若干函數(shù)就能獲得所期望的數(shù)據(jù)包。這樣一來,針對特定操作系統(tǒng) 的捕獲機制對用戶透明,使用戶程序有比較好的可移植性。包過濾機制是對所 捕獲到的數(shù)據(jù)包根據(jù)用戶的要求進行篩選,最終只把滿足過濾條件的數(shù)據(jù)包傳 遞給用戶程序。 3.23.2 基于基于 libpcaplibpcap 的網(wǎng)絡(luò)數(shù)據(jù)包捕獲的實現(xiàn)的網(wǎng)絡(luò)數(shù)據(jù)包捕獲的實現(xiàn) .1 libpcaplibpcap 安裝安裝 libpcap提供了系統(tǒng)獨立的用戶級別網(wǎng)絡(luò)數(shù)據(jù)包捕獲接口,并充分考慮到應(yīng) 用程序的可移植性。libpcap可以在絕大多數(shù)類unix平臺下工作。在windows平 臺下,一個與libpcap很類似的函數(shù)包winpcap提供捕獲功能,其官方網(wǎng)站是 http:/winpcap.polito.it/ libpcap軟件包可從/下 載,解壓后依此執(zhí)行下列三條命令即可安裝。 ./configure./configure makemake makemake installinstall 但如果希望libpcap能在linux上正常工作,則必須使內(nèi)核支持“packet” 協(xié)議,也即在編譯內(nèi)核時打開配置選項config_packet(選項缺省為打開)。 .2 libpcaplibpcap 中基本的數(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:是一個 pcap_if_t 結(jié)構(gòu)體的指針,如果函數(shù) pcap_findalldevs 函數(shù)執(zhí)行成功,將獲得一個可用網(wǎng)卡的列表,而里面存儲的 就是第一個元素的指針。errbuf:存儲錯誤信息的字符串。返回值:int,如果 返回 0 則執(zhí)行成功,錯誤返回-1。 pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf) 功能:設(shè)置一個抓包描述符 參數(shù):其第一個參數(shù)是我們在上一節(jié)中指定的設(shè)備,snaplen 是整形的, 它定義了將被 pcap 捕獲的最大字節(jié)數(shù)。當 promisc 設(shè)為 true 時將置指定接口 為混雜模式(然而,當它置為 false 時接口仍處于混雜模式的特殊情況也是有 可能的) 。to_ms 是讀取時的超時值,單位是毫秒(如果為 0 則一直嗅探直到錯 誤發(fā)生,為-1 則不確定)。最后,ebuf 是一個我們可以存入任何錯誤信息的字 符串(就像上面的 errbuf) 。 int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask) 功能:編譯過濾規(guī)則 參數(shù):第一個參數(shù)是會話句柄(pcap_t *handle 在前一節(jié)的示例中) 。接 下來的是我們存儲被編譯的過濾器版本的地址的引用。再接下來的則是表達式 本身,存儲在規(guī)定的字符串格式里。再下邊是一個定義表達式是否被優(yōu)化的整 形量(0 為 false,1 為 true,標準規(guī)定) 。最后,我們必須指定應(yīng)用此過濾器 的網(wǎng)絡(luò)掩碼。函數(shù)返回-1 為失敗,其他的任何值都表明是成功的。 int pcap_setfilter(pcap_t *p, struct bpf_program *fp) 功能:設(shè)置過濾規(guī)則。 參數(shù):這非常直觀,第一個參數(shù)是會話句柄,第二個參數(shù)是被編譯表達式 版本的引用(可推測出它與 pcap_compile()的第二個參數(shù)相同) 。 int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user) 功能:循環(huán)抓包直到用戶中止。 參數(shù):第一個參數(shù)是會話句柄,接下來是一個整型,它告訴 pcap_loop() 在返回前應(yīng)捕獲多少個數(shù)據(jù)包(若為負值則表示應(yīng)該一直工作直至錯誤發(fā)生) 。 第三個參數(shù)是回調(diào)函數(shù)的名稱(正像其標識符所指,無括號) 。最后一個參數(shù)在 有些應(yīng)用里有用,但更多時候則置為 null。 數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu): struct pcap_if struct pcap_if *next; char *name; char *description; struct pcap_addr *addresses; u_int flags; ; pcap_if *next; 如果非空,指向鏈的下一個元素。如果為空是鏈的最后一 個元素。 char *name; 指向一個字符串,該字符串是傳給 pcap_open_live()函數(shù)的 設(shè)備名; char *description; 如果非空,指向一個對設(shè)備的人性化的描述字符串。 pcap_addr *addresses; 指向網(wǎng)卡地址鏈中的第一個元素。 u_int flags; pcap_if_網(wǎng)卡的標志。現(xiàn)在唯一可用的標識是 pcap_if_lookback,它被用來標識網(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ù)報時間戳; bpf_u_int32 caplen; 當前分片的長度; dpf_u_int32 len; 這個數(shù)據(jù)報的長度; 細節(jié)描述:在 dump 文件中的每個數(shù)據(jù)報都有這樣一個報頭。它用來處理不 同數(shù)據(jù)報網(wǎng)卡的不同報頭問題。 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ù)報的數(shù)目; u_int ps_drop; 被驅(qū)動程序丟棄的數(shù)據(jù)報的數(shù)目; u_int ps_ifdrop; 被網(wǎng)卡丟棄的數(shù)據(jù)報的數(shù)目; struct pcap_addr pcap_addr * next; sockaddr * addr; sockaddr * netmask; sockaddr *broadaddr; sockaddr *dstaddr; ; pcap_addr * next; 如果非空,指向鏈表中一個元素的指針;空表示鏈表 中的最后一個元素。 sockaddr * addr; 指向包含一個地址的 sockaddr 的結(jié)構(gòu)的指針。 sockaddr * netmask; 如果非空,指向包含相對于 addr 指向的地址的一個 網(wǎng)絡(luò)掩碼的結(jié)構(gòu)。 sockaddr * broadaddr; 如果非空,指向包含相對于 addr 指向的地址的一 個廣播地址,如果網(wǎng)絡(luò)不支持廣播可能為空。 sockaddr * dstaddr; 如果非空,指向一個相對于 addr 指向的源地址的目 的地址,如果網(wǎng)絡(luò)不支持點對點通訊,則為空。 3.33.3 數(shù)據(jù)捕獲模塊的實現(xiàn)數(shù)據(jù)捕獲模塊的實現(xiàn) 第一步調(diào)用pcap_findalldevs查找出所有可用的網(wǎng)卡,顯示出來,并接收 用戶選擇網(wǎng)卡。 第二步用戶輸入用于捕獲數(shù)據(jù)包的網(wǎng)卡后,調(diào)用pcap_open_live生成一個 抓包描述符。 第三步通過調(diào)用pcap_datalink檢查該網(wǎng)卡所在網(wǎng)絡(luò)是不是以太網(wǎng),如果不 是則中止程序。 第四步接收用戶輸入的過濾條件,調(diào)用pcap_compile和pcap_setfilter生 成過濾規(guī)則。 第五步調(diào)用pcap_loop進行循環(huán)捕獲數(shù)據(jù)包,直到用戶中止。 具體流程入下圖所示: 圖3-1數(shù)據(jù)捕獲模塊流程圖 pcap_findalldevs () pcap_open_live () pcap_datalink () pcap_compile() pcap_setfilter() pcap_loop()end begin n y 4 4 協(xié)議分析模塊的實現(xiàn)協(xié)議分析模塊的實現(xiàn) 雖然到此為止已經(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)用程序進行處理,而不再像普通的數(shù)據(jù)包那樣經(jīng)過操作系統(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é)議分析需要完成的工作。 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ù)據(jù)報逐層傳送的,在兩臺主機的實際通信過程中,從邏輯 上講,是兩臺主機的對等層直接通信。而實際上,數(shù)據(jù)包并不是從某一計算機 網(wǎng)絡(luò)系統(tǒng)的第n層直接傳導(dǎo)另一計算機網(wǎng)絡(luò)系統(tǒng)的第n層的,而是從這臺計算機 的某一層直接傳送n十1層,直至到達物理層最后分解為比特流流經(jīng)物理介質(zhì)到 達另一臺計算機,然后在從另一臺計算機中的底層逐層向上傳送的。 當數(shù)據(jù)包被傳輸?shù)侥骋粚拥臅r候,該層都會對數(shù)據(jù)包進行加工,在發(fā)送方 通常是加上一個與該層協(xié)議有關(guān)的控制或標志信息,即數(shù)據(jù)包的包頭或包尾; 而在接受方則是需要逐層拆下本層標志,即去掉數(shù)據(jù)包的包頭或包尾,根據(jù)控 制信息進行相應(yīng)的處理,將分解后的數(shù)據(jù)報逐層上傳,直至應(yīng)用程序獲得最終 數(shù)據(jù)。比如發(fā)送方在數(shù)據(jù)鏈路層通常會在包頭加上目的mac地址、源mac地址、 其他一些具體網(wǎng)絡(luò)信息及幀定界符,在包尾加上循環(huán)冗余碼,并使用字節(jié)填充 或位填充,由接收方數(shù)據(jù)鏈路層去掉包頭與包尾進行相關(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)用程序 tcp ip 以太網(wǎng)驅(qū) 動程序 圖4-1 數(shù)據(jù)封裝示意 tcp傳給ip的數(shù)據(jù)單元稱作tcp報文段或簡稱為tcp段(tcp segment);ip傳 給網(wǎng)絡(luò)接口層的數(shù)據(jù)單元稱作ip數(shù)據(jù)報(ip datagram);通過以太網(wǎng)傳輸?shù)谋忍?流稱作幀,分組既可以是一個ip數(shù)據(jù)報也可以是ip數(shù)據(jù)報的一個片(fragment)。 協(xié)議分析就是數(shù)據(jù)封裝的逆過程。協(xié)議分析的流程圖如圖4-2所示: 圖 4-2 網(wǎng)絡(luò)協(xié)議分析流程圖 從圖可以看到,對于監(jiān)聽程序捕獲到的數(shù)據(jù)報,需要按以下步驟分層次進 行協(xié)議分析: (1)首先是讀取數(shù)據(jù)鏈路層的報頭,從報頭中可以得到:計算機的源mac地 址和目的mac地址、數(shù)據(jù)包的長度以及上層協(xié)議的類型。 (2)然后需要去掉數(shù)據(jù)鏈層的報頭,此時可以獲得ip數(shù)據(jù)報、arp、rarp數(shù) 據(jù)包,在這一層中可以對ip數(shù)據(jù)報做一定的統(tǒng)計和分析等等;對arp、rarp數(shù)據(jù) 包可以獲得發(fā)送端ip和目的ip等重要信息。 開始 讀取原始數(shù)據(jù)報文 提取并分析鏈路層報頭 提取并分析 ip 地址信息 提取并分析 tcp/udp 地址信息 根據(jù)端口判斷應(yīng)用層協(xié)議 顯示 提取報頭中的主要 信息 結(jié)束 顯示 (3)對于ip數(shù)據(jù)報去除網(wǎng)絡(luò)層的報頭以后,可以獲得傳輸層數(shù)據(jù)報,對 tcp/udp數(shù)據(jù)包的報頭進行分析在這一層中還可以獲得數(shù)據(jù)報的端口號信息,根 據(jù)端口號進一步判斷數(shù)據(jù)報屬于何種應(yīng)用層協(xié)議。 (4)對數(shù)傳輸層數(shù)據(jù)報去除掉傳輸層報頭以后,就獲得了應(yīng)用層數(shù)據(jù)報,在 應(yīng)用層進行協(xié)議分析的工作就是按照應(yīng)用層的工作原理、協(xié)議規(guī)范,還原獲得 應(yīng)用層的內(nèi)容,如smtf/pop3協(xié)議分析可以還原出正在傳輸?shù)泥]件信息,ftp協(xié) 議分析可以還原出傳輸中的文件名以及用戶名口令密碼等信息,http協(xié)議分析 可以還原出目標主機瀏覽網(wǎng)頁的原貌等等。 (5)對所有的數(shù)據(jù)報頭分析處理后,取出其中的主要信息然后顯示給用戶。 4.24.2 對對 tcp/iptcp/ip 模型中各層協(xié)議的分析模型中各層協(xié)議的分析 前面的內(nèi)容已經(jīng)提到過,我們在對數(shù)據(jù)包根據(jù)應(yīng)用層協(xié)議進行分析的時候 都需要首先剝離數(shù)據(jù)包中的包頭并且需要根據(jù)包頭信息判斷是何種應(yīng)用層協(xié)議。 下面就按照數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層到傳輸層再到應(yīng)用層的順序詳細的講解每層包 頭的結(jié)構(gòu)以及如何對每層的數(shù)據(jù)報進行協(xié)議分析。 .1 以太網(wǎng)首部的分析與提取以太網(wǎng)首部的分析與提取 因為每一個使用libpcap捕獲的數(shù)據(jù)包,都會有一個指向原始報文頭的指針。 假設(shè)這個指針為p。把這個指針強制轉(zhuǎn)換為以太幀格式:(struct ether_header *) p。我們就得到了以太幀的報文頭,就可以對該層協(xié)議進行分析和處理。 由于在定義ieee 802.3以前,以太網(wǎng)就存在,因為有多個以太網(wǎng)標準,所 以tcp/ip可以支持多種不同的鏈路層協(xié)議,如以太網(wǎng)、令牌環(huán)網(wǎng)、fddi(光纖分 布式數(shù)據(jù)接口)等。以太網(wǎ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的或者使用 ieee:802.3子網(wǎng)訪問協(xié)議(snap)來封裝數(shù)據(jù)。這里我們只討論最為常用的以太 網(wǎng)ii數(shù)據(jù)報格式,這是在rfc894中定義的,如圖4-3所示,這是以太網(wǎng)ii的封裝 格式: 字節(jié) 6 6 2 461500 4 目的地址源地址類型數(shù)據(jù)fcs 圖4-3以太網(wǎng)ii的封裝格式 其中每個字段的含義如下: (1)幀初始同步(preamble):8字節(jié)長,提供接收端的同步和分隔幀的功能。 需要注意的是,幀初始同步字段在網(wǎng)絡(luò)監(jiān)視器中是不可見的。 (2)目的地址(destination address):6字節(jié)長,指明目的地址。目的地址 可以是單播、多播或者以太網(wǎng)的廣播地址。其中,單播地址也稱為mac地址。 (3)源地址(source address):6字節(jié)長,指明發(fā)送節(jié)點的單播地址。 (4)以太網(wǎng)類型(ether type):2字節(jié)長,指明在以太網(wǎng)幀中上層協(xié)議的類 型。這個字段被用來將以太網(wǎng)的有效載荷傳給正確的上層協(xié)議實體。如果在該 字段中未注明有上層協(xié)議實體接收有效載荷幀。該幀將被丟棄。比如,對于ip 數(shù)據(jù)報,這個字段的值為0x0800;對于arp消息,該字段的值被設(shè)置為0x0806。 (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é)。 (6)幀校驗序列(frame check sequence, fcs):4字節(jié)長,提供位級別的完 整性校驗,也被稱為循環(huán)冗余校驗(crc)。本子段對于網(wǎng)絡(luò)監(jiān)視器來說同樣是不 可見的。 .2 ipip 首部的分析與提取首部的分析與提取 因為以太幀報頭的長度都是一樣的。所以在提取ip包頭的時候可以將指針p 加上以太幀包頭的長度后,把格式強制轉(zhuǎn)化為ip包頭格式即:(struct ip *) (p + sizeof (struct ether_header)。就得到了指向ip報頭的指針,我們就 可以進行相應(yīng)的分析了。 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ù)。 實際上,ip數(shù)據(jù)報是作為ip包來發(fā)送的,ip包將ip數(shù)據(jù)報通過交換設(shè)備一 跳一跳地中繼到目的系統(tǒng)。雖然很多時候一個ip數(shù)據(jù)報就是一個ip包,但它們 在概念上是不同的實體。如圖4-4是ip數(shù)據(jù)報在rfc791中定義的封裝格式: 比特 0 4 8 16 20 24 31 版本報頭長服務(wù)類型數(shù)據(jù)包總長 標識符標志片偏移 生存時間協(xié)議號報頭校驗和 源ip地址 目的ip地址 選項填充碼 數(shù)據(jù) 圖4-4 ip數(shù)據(jù)報格式 其中每個字段的含義如下: (1)版本(version):長度為4位,顯示ip報頭的版本。目前在所有互聯(lián)網(wǎng)絡(luò) 和internet中使用的標準ip版本號是4(即ipv4)。 (2)報頭長(header length):長度為4位,表示ip頭的長度。典型的ip頭不 包括任何選項,長度為20字節(jié)。 (3)服務(wù)類型(type of service):長度為8位,表示按照優(yōu)先權(quán)、安全性以 及吞吐量等數(shù)據(jù)包的服務(wù)類型。 (4)數(shù)據(jù)包總長(total length):長度為2位,表示ip數(shù)據(jù)報總的字節(jié)數(shù), 包括ip頭和有效載荷。 (5)標識(identifier):長度為2位,作為分割以及組裝數(shù)據(jù)包時的識別標 志來使用,被分割的數(shù)據(jù)包被分配有同一數(shù)值標識。 (6)標志(flags):長度為3位,包含兩個用于分片的標志。其中一個標志是 用于表示ip有效載荷是否符合分片的標準,而另一個是表示對于已分片的ip數(shù) 據(jù)報是否還有更多的分片。 (7)片偏移(fragment offset):長度為13位,表示分片相對于原始ip數(shù)據(jù) 報有效載荷的偏移量。 (8)生存時間(time to live):長度為1字節(jié),表示ip數(shù)據(jù)包的壽命,目的 是廢棄掉在網(wǎng)絡(luò)中循環(huán)著的ip數(shù)據(jù)包,一般地,每通過一次路由器,生存時間 就被減去1,當生存時間為0時,數(shù)據(jù)包將被拋棄。 (9)協(xié)議(protocol):長度為1字節(jié),表示包含在有效載荷中的上層協(xié)議。 ip協(xié)議字段的一般值有:1表示icmp,2表示igmp,6表示tcp,17表示udp等等。 (10)報頭校驗和(header checksum):長度為2字節(jié),是用于確認ip數(shù)據(jù)包 是否己毀壞的字段。 (11)源目的ip地址(source/destination address):長度為4字節(jié),包含源 /目的主機的ip地址。 (12)選項和填充:此字段跟在ip頭之后,但必須是以4個字節(jié)為增量單位, 以使ip頭的大小能用報頭長度字段表示。 .3 tcp/udptcp/udp 首部的分析與提取首部的分析與提取 tcp/udp報文頭部的獲取跟ip報文頭部的獲取類似,將p指針的位置向后移 ip報文長度個位置即可(struct tcphdr *) (p + sizeof (struct ether_header) + 4 * iph-ip_hl)。然后就可以對tcp/udp數(shù)據(jù)包進行分析了。 tcp(傳輸控制協(xié)議)為面向事務(wù)的應(yīng)用提供了可靠的面向連接的傳輸協(xié)議。 tcp正為目前intemet上幾乎所有的應(yīng)用協(xié)議所利用,這是因為大部分應(yīng)用程序 都需要可靠的、可糾錯的傳輸協(xié)議以保證不丟失或破壞數(shù)據(jù)。盡管ip已經(jīng)做了 大部分的搜集工作,并且根據(jù)需要在internet上發(fā)送數(shù)據(jù)報和數(shù)據(jù)包,但是ip 是不可靠的協(xié)議,并不能保證數(shù)據(jù)報或者數(shù)據(jù)包能夠原封不動的到達其目的地, tcp作為ip的上層協(xié)議,為ip提供了可靠性服務(wù),確保了ip數(shù)據(jù)報中的數(shù)據(jù)的正 確性。如圖4-5所示,是tcp段的封裝結(jié)構(gòu)。 比特 0 8 16 24 31 源端口目的端口 順序號 確認號 數(shù)據(jù)偏移保留標志窗口 校驗和緊急指示符 選項(長度可變)填充 數(shù)據(jù) 圖4-5 tcp數(shù)據(jù)報格式 其中,每一段的含義如下: (1)源端口(source port):指示發(fā)送tcp段的源應(yīng)用層協(xié)議,是一個2字節(jié) 的字段。ip頭中的源地址和tcp頭中的源端口聯(lián)合起來提供一個源套接字。tcp 端口為tcp連接數(shù)據(jù)的傳送定義了一種位置,表明段被發(fā)送至的應(yīng)用層進程的一 個目的端口。在一般情況下,應(yīng)用層協(xié)議的服務(wù)器端在己知的端口上偵聽。表 4-1顯示了常用的應(yīng)用層協(xié)議對應(yīng)的端口號。 (2)目的端口(destination port):指示目的應(yīng)用層協(xié)議,是一個2字節(jié)字 段。ip頭中的目的ip地址和tcp頭中的端口聯(lián)合起來提供一個目的套接字。 (3)序列號(sequence number):指示段的第一個8位組的輸出字節(jié)流的序列 號,是一個4字節(jié)字段。用于保證數(shù)據(jù)的到達順序與可靠性。利用隨機值確定初 始值,以字節(jié)為單位表示所發(fā)送數(shù)據(jù)的位置。 (4)確認號(acknowledgment number):一個4位的字段,指示接收方希望收 到的輸入字節(jié)流中下一個8位組的序列號。是用于保證可靠性的確認號碼。 (5)數(shù)據(jù)偏移(data offset):表示tcp數(shù)據(jù)的起始位置,以4字節(jié)的整數(shù)倍 表示,數(shù)據(jù)偏移字段也是tcp頭的大小。在不包括選項的情況下,tcp報頭是20 個字節(jié),offset的值為5。 (6)保留(reserved):一個6字節(jié)字段,為了未來的使用而保留。 (7)標志(flags):一個6字節(jié)字段,指示6個tcp標志。這6個標志是: urg(緊急)、ack(確訓(xùn))、psh(推)、rst(復(fù)句)、syn(同步)、fin(結(jié)束)。 (8)窗口(window):一個2字節(jié)的字段,表明該段的發(fā)送方的接收緩沖區(qū)中 可供使用的空間有多少字節(jié)數(shù)。窗口大小的廣告是一種實現(xiàn)接收流流控制的方 式。 (9)校驗和(checksum):一個2字節(jié)的字段,為tcp段提供位級別的完整性校 驗。 (10)緊急指針(urgent pointer):一個2字節(jié)字段,它表明段中緊急數(shù)據(jù)的 位置。 (11)選項(option):為提高利用tcp的通信性能所準備的選項。 用戶數(shù)據(jù)報協(xié)議(udp)是定義用來在互連網(wǎng)絡(luò)環(huán)境中提供包交換的計算機通 信的協(xié)議。此協(xié)議默認認為網(wǎng)路協(xié)議(ip)是其下層協(xié)議。此協(xié)議提供了向另一 用戶程序發(fā)送信息的最簡便的協(xié)議機制。此協(xié)議是面向操作的,未提供提交和 復(fù)制保護。以下是udp協(xié)議的報文頭格式: 比特 0 16 31 圖4-6 tcp數(shù)據(jù)包格式 (1)源端口16 位。源端口是可選字段。當使用時,它表示發(fā)送程序的端 口,同時它還被認為是沒有其它信息的情況下需要被尋址

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論