網(wǎng)絡(luò)抓包與協(xié)議分析軟件的設(shè)計與開發(fā)_第1頁
網(wǎng)絡(luò)抓包與協(xié)議分析軟件的設(shè)計與開發(fā)_第2頁
網(wǎng)絡(luò)抓包與協(xié)議分析軟件的設(shè)計與開發(fā)_第3頁
網(wǎng)絡(luò)抓包與協(xié)議分析軟件的設(shè)計與開發(fā)_第4頁
網(wǎng)絡(luò)抓包與協(xié)議分析軟件的設(shè)計與開發(fā)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、智立工於尊惶Fujian University of Technology畢業(yè)設(shè)計(論文)網(wǎng)絡(luò)抓包與協(xié)議分析軟件的設(shè)計與開發(fā)畢業(yè)論文(設(shè)計)原創(chuàng)性聲明本人所呈交的畢業(yè)論文(設(shè)計)是我在導(dǎo)師的指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。據(jù)我 所知,除文中已經(jīng)注明引用的內(nèi)容外,本論文(設(shè)計)不包含其他個人已經(jīng)發(fā)表或撰寫過的研究成 果。對本論文(設(shè)計)的研究做出重要貢獻(xiàn)的個人和集體,均已在文中作了明確說明并表示謝意。日期:作者簽名:畢業(yè)論文(設(shè)計)授權(quán)使用說明本論文(設(shè)計)作者完全了解*學(xué)院有關(guān)保留、使用畢業(yè)論文(設(shè)計) 的規(guī)定,學(xué)校有權(quán)保留論文(設(shè)計)并向相關(guān)部門送交論文(設(shè)計)的電 子版和紙質(zhì)版。有權(quán)

2、將論文(設(shè)計)用于非贏利目的的少量復(fù)制并允許論 文(設(shè)計)進(jìn)入學(xué)校圖書館被查閱。學(xué)校可以公布論文(設(shè)計)的全部或 部分內(nèi)容。保密的論文(設(shè)計)在解密后適用本規(guī)定。作者簽名: 指導(dǎo)教師簽名: 日期:日期:注意事項1.設(shè)計(論文)的內(nèi)容包括:1)封面(按教務(wù)處制定的標(biāo)準(zhǔn)封面格式制作)2)原創(chuàng)性聲明3)中文摘要(300字左右)、關(guān)鍵詞4)外文摘要、關(guān)鍵詞5)目次頁(附件不統(tǒng)一編入)6)論文主體部分:引言(或緒論)、正文、結(jié)論7)參考文獻(xiàn)8)致謝9)附錄(對論文支持必要時).論文字?jǐn)?shù)要求:理工類設(shè)計(論文)正文字?jǐn)?shù)不少于1萬字(不包括圖紙、程序清單等),文科類論文正文字?jǐn)?shù)不少于 1.2萬字。.附件包括

3、:任務(wù)書、開題報告、外文譯文、譯文原文(復(fù)印件)。.文字、圖表要求:1)文字通順,語言流暢,書寫字跡工整,打印字體及大小符合要求,無錯別字,不準(zhǔn)請他人代寫2)工程設(shè)計類題目的圖紙, 要求部分用尺規(guī)繪制, 部分用計算機(jī)繪制, 所有圖紙應(yīng)符合國家技術(shù)標(biāo)準(zhǔn)規(guī)范。圖表整潔,布局合理,文字注釋必須使用工程字書寫,不準(zhǔn)用徒手畫3)畢業(yè)論文須用 A4單面打印,論文 50頁以上的雙面打印4)圖表應(yīng)繪制于無格子的頁面上5)軟件工程類課題應(yīng)有程序清單,并提供電子文檔.裝訂順序1)設(shè)計(論文)2)附件:按照任務(wù)書、開題報告、外文譯文、譯文原文(復(fù)印件)次序裝訂 TOC o 1-5 h z HYPERLINK l b

4、ookmark10 o Current Document 1緒論1. HYPERLINK l bookmark12 o Current Document 課題來源1. HYPERLINK l bookmark14 o Current Document 當(dāng)今網(wǎng)絡(luò)數(shù)據(jù)安全現(xiàn)狀 1. HYPERLINK l bookmark16 o Current Document 網(wǎng)絡(luò)數(shù)據(jù)安全的技術(shù)研究 2. HYPERLINK l bookmark18 o Current Document 2主要技術(shù)介紹 3. HYPERLINK l bookmark20 o Current Document 數(shù)據(jù)包的介紹3.

5、 HYPERLINK l bookmark22 o Current Document 網(wǎng)絡(luò)數(shù)據(jù)包捕獲原理4. HYPERLINK l bookmark24 o Current Document 網(wǎng)絡(luò)數(shù)據(jù)包的捕獲方法 5.原始套接字 5.LibPcap5.WinPcap5.JPcap6.WinPcap 研究.6.WinPcap 內(nèi)部結(jié)構(gòu)7.WinPcap的主要函數(shù)庫.8. HYPERLINK l bookmark26 o Current Document 3系統(tǒng)設(shè)計.10. HYPERLINK l bookmark28 o Current Document 捕獲數(shù)據(jù)的分析與還原1.0802.3

6、標(biāo)準(zhǔn)的數(shù)據(jù)幀分析與還原 1.0IP報文的分析與還原1.0UDP數(shù)據(jù)包的封裝 1.2TCP數(shù)據(jù)包的封裝 1.4ICMP數(shù)據(jù)包的封裝.15 HYPERLINK l bookmark30 o Current Document 4實現(xiàn)與分析16WinPcap 環(huán)境酉己置 16WinPcap 下載1.6WinPcap 配置1.6 HYPERLINK l bookmark32 o Current Document 程序的實現(xiàn)1.6網(wǎng)絡(luò)數(shù)據(jù)捕獲的基本流程 .16獲取網(wǎng)卡信息1.7捕獲數(shù)據(jù)包 18分析數(shù)據(jù)包20 HYPERLINK l bookmark34 o Current Document 程序編譯中出現(xiàn)

7、的問題 23 HYPERLINK l bookmark36 o Current Document 問題的解決23 HYPERLINK l bookmark38 o Current Document 程序功能23程序主界面23工具欄24 HYPERLINK l bookmark40 o Current Document 程序運(yùn)行結(jié)果 26 HYPERLINK l bookmark44 o Current Document 5總結(jié)和展望28. HYPERLINK l bookmark46 o Current Document 本文主要工作28展望28. HYPERLINK l bookmark48

8、 o Current Document 致謝語29.參考文獻(xiàn)30.網(wǎng)絡(luò)抓包與協(xié)議分析軟件的設(shè)計與開發(fā)摘要:網(wǎng)絡(luò)數(shù)據(jù)包捕獲是進(jìn)行網(wǎng)絡(luò)分析的基礎(chǔ),通過對 Windows操作系統(tǒng)平臺下網(wǎng)絡(luò)數(shù)據(jù)包捕獲 模型的論述,重點對基于NDIS的優(yōu)秀包捕獲開發(fā)包 WinPcap的結(jié)構(gòu)和功能的進(jìn)行了詳細(xì)的介紹和分析,實現(xiàn)了如何在 VC+ 6.0環(huán)境下借助 WinPcap提供的各個接口函數(shù)對網(wǎng)卡進(jìn)行編程進(jìn)而對網(wǎng) 絡(luò)數(shù)據(jù)包進(jìn)行捕獲和分析的方法,突出敘述了數(shù)據(jù)包捕獲在網(wǎng)絡(luò)分析中的應(yīng)用。關(guān)鍵字:數(shù)據(jù)包捕獲,數(shù)據(jù)包,WinPcapDesign and development a packet captureand proto

9、col analysis softwareAbstract : Network packet capture is the precondition for network analysis , through the analysis of the models of network data packet capture in Windows , the structure and function of WinPcap based on NDIS is analyzed and introduced in detail , and how to program on the networ

10、k adapter and how to capture and analyze the network data packets through WinPcap are realized under the environment of VC 6.0+, theapplications of network data capture for network analysis is narrated in detail.Key words: packet capture data packet WinPcap1緒論課題來源隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展和網(wǎng)絡(luò)時代的到來, 互聯(lián)網(wǎng)的影響已經(jīng)滲透到國民經(jīng)濟(jì)

11、的 各個領(lǐng)域和人民生活的各個方面,全社會對網(wǎng)絡(luò)的依賴程度越來越大, 整個世界通過網(wǎng) 絡(luò)正在迅速地融為一體,但由于計算機(jī)網(wǎng)絡(luò)具有聯(lián)結(jié)形式多樣性、 終端分布不均勻性和 網(wǎng)絡(luò)的開放性、互聯(lián)性等特征,致使網(wǎng)絡(luò)易受黑客、惡意軟件和其他不軌的攻擊。廣義 來說,凡是涉及到網(wǎng)絡(luò)上信息的保密性、完整性、可用性、真實性和可控性的相關(guān)技術(shù) 和理論都是網(wǎng)絡(luò)安全所要研究的領(lǐng)域。 網(wǎng)絡(luò)安全涉及的內(nèi)容既有技術(shù)方面的問題,也有管理方面的問題,兩方面相互補(bǔ)充,缺一不可。技術(shù)方面主要側(cè)重于防范外部非法用戶 的攻擊,管理方面則側(cè)重于內(nèi)部人為因素的管理。如何更有效地保護(hù)重要的信息數(shù)據(jù)、 提高計算機(jī)網(wǎng)絡(luò)系統(tǒng)的安全性已經(jīng)成為所有計算機(jī)網(wǎng)

12、絡(luò)應(yīng)用必須考慮和必須解決的一 個重要問題??梢赃@樣來定義網(wǎng)絡(luò)數(shù)據(jù)安全:所謂網(wǎng)絡(luò)數(shù)據(jù)安全,指的是網(wǎng)絡(luò)系統(tǒng)的硬件、軟件和數(shù)據(jù)信息能夠受到保護(hù),不會因為偶然或惡意的原因而遭到破壞、更改、泄露,同時 系統(tǒng)能夠連續(xù)、可靠地運(yùn)行,網(wǎng)絡(luò)服務(wù)不被中斷。但在現(xiàn)實中,絕對安全的網(wǎng)絡(luò)是沒有 的川。據(jù)IT界企業(yè)團(tuán)體ITAA的調(diào)查顯示,美國90%的IT企業(yè)對黑客攻擊準(zhǔn)備不足。目前美國75% 85%的網(wǎng)站都抵擋不住黑客的攻擊,約有 75%的企業(yè)網(wǎng)上信息失 竊,其中25%的企業(yè)損失在25萬美元以上.因此了解網(wǎng)絡(luò)面臨的各種威脅,防范和消 除這些威脅,實現(xiàn)真正的網(wǎng)絡(luò)安全已經(jīng)成了網(wǎng)絡(luò)發(fā)展中最重要的事情。當(dāng)今網(wǎng)絡(luò)數(shù)據(jù)安全現(xiàn)狀計算機(jī)

13、網(wǎng)絡(luò)的核心是網(wǎng)絡(luò)協(xié)議,所以研究協(xié)議與網(wǎng)絡(luò)安全的關(guān)系就是至關(guān)重要的。 現(xiàn)在網(wǎng)絡(luò)中所使用的協(xié)議都是較早前設(shè)計的,許多協(xié)議的實現(xiàn)都是基于一種非常友好 的、通信的雙方充分信任的基礎(chǔ)。在通常的網(wǎng)絡(luò)環(huán)境之下,用戶的信息包括口令都是以 明文的方式在網(wǎng)上傳輸?shù)模灰獙⒕W(wǎng)絡(luò)接口設(shè)置成監(jiān)聽模式, 便可以源源不斷地將網(wǎng)上 傳輸?shù)男畔⒔孬@,因此進(jìn)行網(wǎng)絡(luò)監(jiān)聽從而獲得用戶信息并不是一件困難的事情。例如目前使用最廣泛的TCP/IP協(xié)議就存在很多安全缺陷,而 FTR PO濟(jì)口 Telnet協(xié)議在本質(zhì) 上也是不安全的,從而很多網(wǎng)絡(luò)的攻擊就是針對這些不安全協(xié)議進(jìn)行的。1994年一個最大的嗅探器(Sniffer ,網(wǎng)絡(luò)數(shù)據(jù)監(jiān)聽器)

14、攻擊被發(fā)現(xiàn),這次攻擊被人們普遍認(rèn)為是記 載中最為嚴(yán)重的一次,攻擊者處于 Rahul.Net,使許多以FTR Telnet或遠(yuǎn)程登陸的主 機(jī)系統(tǒng)都受到了危害。在這件事故中,嗅探器只運(yùn)行了18個小時。在這段時間里,有幾百臺主機(jī)被泄密。受攻擊者包括268個站點,如麻省理工學(xué)院、美國海軍和空軍、SUN 微系統(tǒng)公司、舊M、NASA CERFNE刷加拿大、以色列、荷蘭、比利時的一些大學(xué)的機(jī) 器。協(xié)議的安全驗證方式也是有弱點的,就是很容易受到“中間服務(wù)器”方式的攻擊。 所謂“中間服務(wù)器”攻擊方式,就是“中間服務(wù)器”冒充真正的服務(wù)器接收用戶傳給服 務(wù)器的數(shù)據(jù),然后再冒充用戶把數(shù)據(jù)傳給真正的服務(wù)器。 服務(wù)器和用

15、戶之間的數(shù)據(jù)傳送 被“中間服務(wù)器”轉(zhuǎn)發(fā)并做了手腳之后,就會出現(xiàn)很嚴(yán)重的問題。例如:冒充域名服務(wù) 器的攻擊,也就是DNSK騙。它是攻擊者冒充域名服務(wù)器的一種欺騙行為,它主要用于 向主機(jī)提供錯誤DNSW息,當(dāng)用戶嘗試瀏覽網(wǎng)頁,例如IP地址為XXX.XX.XX.XX ,網(wǎng) 址為 WWW.XXX.COM實際上登錄的確實IP地址YYY.YY.YY.YYh的 HYPERLINK http:/WWW.XXX.COM WWW.XXX.COM 戶上網(wǎng)就只能看到攻擊者的主頁, 而不是用戶想要取得的網(wǎng)站的主頁了,這個網(wǎng)址是攻擊者用以竊取網(wǎng)上銀行登錄證書以及帳號信息的假冒網(wǎng)址。據(jù)統(tǒng)計,目前網(wǎng)絡(luò)攻擊手段有數(shù)千種之多;美

16、國商業(yè)雜志信息周刊公布的一項調(diào)查報告稱,黑客攻擊和病毒等 安全問題在2000年就造成了上萬億美元的經(jīng)濟(jì)損失,在全球范圍內(nèi)每數(shù)秒鐘就發(fā)生一 起針對網(wǎng)絡(luò)的不同形式的攻擊事件。網(wǎng)絡(luò)數(shù)據(jù)安全的技術(shù)研究為了保證網(wǎng)絡(luò)的安全,防止網(wǎng)絡(luò)攻擊,除了對信息采用加密技術(shù)之外,還有就是與 網(wǎng)絡(luò)協(xié)議相關(guān)的網(wǎng)絡(luò)安全手段,例如防火墻技術(shù)、入侵監(jiān)測技術(shù)、安全掃描技術(shù)、協(xié)議 分析技術(shù)和數(shù)據(jù)包生成技術(shù)等。 這些技術(shù)中,數(shù)據(jù)包的捕獲和分析是最首要的手段,它是諸多網(wǎng)絡(luò)安全技術(shù)實現(xiàn)的基礎(chǔ)。2主要技術(shù)介紹數(shù)據(jù)包的介紹“包” (Packet)是TCP/IP協(xié)議通信傳輸中的數(shù)據(jù)單元,一般也稱“數(shù)據(jù)包”。有人說,局域網(wǎng)中傳輸?shù)牟皇恰皫?(Fr

17、ame)嗎?沒錯,但是 TCP/IP協(xié)議是工作在 OSI模型第三層(網(wǎng)絡(luò)層),第四層(傳輸層)上的,而幀是工作在第二層(數(shù)據(jù)鏈路 層)。上一層內(nèi)容由下一層的內(nèi)容來傳輸,所以在局域網(wǎng)中,“包”是包含在“幀”里 的。用一個形象一些的例子對數(shù)據(jù)包的概念加以說明:我們在郵局郵寄產(chǎn)品時,雖然產(chǎn)品本身帶有自己的包裝盒,但是在郵寄的時候只用產(chǎn)品原包裝盒來包裝顯然是不行的。必須把內(nèi)裝產(chǎn)品的包裝盒放到一個郵局指定的專用紙箱里,這樣才能夠郵寄。這里,產(chǎn)品包裝盒相當(dāng)于數(shù)據(jù)包,里面放著的產(chǎn)品相當(dāng)于可用的數(shù)據(jù),而專用紙箱就相當(dāng)于幀, 且一個幀中只有一個數(shù)據(jù)包。包”聽起來非常抽象,那么是不是不可見的呢?通過一定 技術(shù)手段

18、,是可以感知到數(shù)據(jù)包的存在的。比如在能上網(wǎng)的情況下,把鼠標(biāo)移動到任務(wù) 欄右下角的網(wǎng)卡圖標(biāo)上單擊就會彈出一個窗口,如圖2-1 ,就可以看到“發(fā)送:XX包,收到:xx包”的提示。圖2-1 網(wǎng)絡(luò)連接狀態(tài)我們上網(wǎng)打開網(wǎng)頁,這個簡單的動作,就是我們先發(fā)送數(shù)據(jù)包給網(wǎng)站,網(wǎng)站接收到 了之后,根據(jù)發(fā)送的數(shù)據(jù)包的IP地址,返回網(wǎng)頁的數(shù)據(jù)包,也就是說,網(wǎng)頁的瀏覽, 實際上就是數(shù)據(jù)包的交換。如果能把數(shù)據(jù)包捕獲,通過分析這些數(shù)據(jù),我們就可以知道 網(wǎng)絡(luò)中這些數(shù)據(jù)包傳輸?shù)男畔?。那么如何捕獲這些數(shù)據(jù)包呢?網(wǎng)絡(luò)數(shù)據(jù)包捕獲原理由于目前用的最多的網(wǎng)絡(luò)形式是以太網(wǎng) ,在以太網(wǎng)上,數(shù)據(jù)是以被稱為幀的數(shù)據(jù) 結(jié)構(gòu)為單位進(jìn)行交換的,而幀(

19、數(shù)據(jù)包)是用被稱為帶碰撞檢測的載波偵聽多址訪問即 CSMA/CD (carrier sense multiple access wim collision detection)勺方式發(fā)送的,在這種方 法中,發(fā)送到指定地址的幀實際上是發(fā)送到所有計算機(jī)的,只是如果網(wǎng)卡檢測到經(jīng)過的數(shù)據(jù)不是發(fā)往自身的,簡單忽略過去而已。正是這種基于CSMS/CD的廣播機(jī)制,這就給連接在網(wǎng)絡(luò)上的計算機(jī)捕獲來自于其他主機(jī)的數(shù)據(jù)帶來了可能,即通過對網(wǎng)絡(luò)接口的設(shè)置可以使網(wǎng)卡能夠接收到所有經(jīng)過該機(jī)器的數(shù)據(jù),然后將這些數(shù)據(jù)做相應(yīng)處理并實時 分析這些數(shù)據(jù)的內(nèi)容,進(jìn)而分析網(wǎng)絡(luò)當(dāng)前狀態(tài)和整體布局。 這里,通過設(shè)置硬路由器的 監(jiān)聽端口來

20、捕獲數(shù)據(jù)包的方式不再本文討論范圍內(nèi)。從廣義的角度上看,一個包捕獲機(jī)制包含三個主要部分: 首先是最底層針對特定操 作系統(tǒng)的包捕獲機(jī)制,然后是最高層針對用戶程序的接口, 第三部分是包過濾機(jī)制。不 同的操作系統(tǒng)實現(xiàn)的底層包捕獲機(jī)制可能是不一樣的,但從形式上看大同小異。數(shù)據(jù)包常規(guī)的傳輸路徑依次為網(wǎng)卡、設(shè)備驅(qū)動層、數(shù)據(jù)鏈路層、 IP層、傳輸層、最后到達(dá)應(yīng) 用程序。而包捕獲機(jī)制是在數(shù)據(jù)鏈路層增加一個旁路處理,對發(fā)送和接收到的數(shù)據(jù)包做過濾/緩沖等相關(guān)處理,最后直接傳遞到應(yīng)用程序。值得注意的是,包捕獲機(jī)制并不影 響操作系統(tǒng)對數(shù)據(jù)包的網(wǎng)絡(luò)棧處理。 對用戶程序而言,包捕獲機(jī)制提供了一個統(tǒng)一的接 口,使用戶程序只需

21、要簡單的調(diào)用若干函數(shù)就能獲得所期望的數(shù)據(jù)包。這樣一來,針對特定操作系統(tǒng)的捕獲機(jī)制對用戶透明, 使用戶程序有比較好的可移植性。 包過濾機(jī)制是 對所捕獲到的數(shù)據(jù)包根據(jù)用戶的要求進(jìn)行篩選,最終只把滿足過濾條件的數(shù)據(jù)包傳遞給用戶程序。網(wǎng)絡(luò)數(shù)據(jù)包的捕獲方法原始套接字套接字網(wǎng)(Sock)是網(wǎng)絡(luò)應(yīng)用編程接口。應(yīng)用程序可以使用它進(jìn)行網(wǎng)絡(luò)通信而不需 要知道底層發(fā)生的細(xì)節(jié)。有時候需要自己生成一些定制的數(shù)據(jù)包或者功能并希望繞開套 接字的功能,原始套接字(Raw Socket)就滿足了這樣的要求。原始套接字能夠生成自 己的數(shù)據(jù)報文,包括報送和數(shù)據(jù)報本身的內(nèi)容。通過原始套接字,可以更加自如地控制Windows下的多種協(xié)

22、議,而且能夠?qū)W(wǎng)絡(luò)底層的傳輸機(jī)制進(jìn)行控制。原始套接字可以用來發(fā)送和接收IP層以上的原始數(shù)據(jù)包,比如ICMP,TCP,UDP,而 且能夠?qū)W(wǎng)絡(luò)底層的傳輸機(jī)制進(jìn)行控制。原始套接字的作用主要有三個方面:1)接收發(fā)向本機(jī)的ICMP,IGMP協(xié)議包,或者發(fā)送這些協(xié)議包;2)接收發(fā)向本機(jī)的IP包;3)發(fā)送自定義的IP包。LibPcapLibPcap4是一個廣泛應(yīng)用的系統(tǒng)抓包庫。LibPcap是一種與系統(tǒng)無關(guān),采用分組捕 獲機(jī)制的分組捕獲函數(shù)庫,用于訪問數(shù)據(jù)鏈路層,它在不同的平臺上采用統(tǒng)一的編程接 ,使用LibPcap編寫的程序可以自由地跨平臺使用。同時LibPcap是一個獨立于系統(tǒng)接口的用戶級的抓包庫,它

23、為底層網(wǎng)絡(luò)監(jiān)聽提供了可移植框架。它的應(yīng)用包括網(wǎng)絡(luò)統(tǒng)計 集合,安全監(jiān)聽,網(wǎng)絡(luò)調(diào)試等。WinPcapWinPcap是LibPcap的Windows版本,它是一個基于 Win32的捕獲數(shù)據(jù)包和網(wǎng)絡(luò) 分析的體系結(jié)構(gòu),它包括一個內(nèi)核級的包過濾器,一個底層的動態(tài)鏈接庫(Packet.dll), 一個高層并且與系統(tǒng)無關(guān)的庫(WPcap.dll,基于LibPcap0.6.2版本)。WinPcap是集成 于Windows95,98, ME,NT,2000和X限作系統(tǒng)的設(shè)備驅(qū)動程序,它可以從網(wǎng)卡捕獲或者 發(fā)送原始數(shù)據(jù),同時能夠過濾并且倉儲數(shù)據(jù)包。開發(fā) WinPcap這個項目的目的在于為 Win32應(yīng)用程序提供訪問

24、網(wǎng)絡(luò)底層的能力。它提供以下四項功能:1)捕獲原始數(shù)據(jù)報,包括共享網(wǎng)絡(luò)上各主機(jī)發(fā)送/接收的以及相互之間交換的數(shù)據(jù)報;2)在數(shù)據(jù)報發(fā)往應(yīng)用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)報過濾掉;3)在網(wǎng)絡(luò)上發(fā)送原始的數(shù)據(jù)報;4)收集網(wǎng)絡(luò)通信過程中的統(tǒng)計信息。JPcapJPcap6是一個能夠捕獲,發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包的Java類庫包。這個包用到了 LibPcap和原始套接字 API o 目前 JPcapft FreeBSD 3.x, Linux RedHat 6.1, Solaris ft Microsoft Windows 2000/XP 系統(tǒng)上已經(jīng)做過測試,并且支持 Ethernet, IPv4, IPv

25、6, ARP/RARP , TCP, UDP, ICMPv4協(xié)議。JPcap是一個Java類集合,它為網(wǎng)絡(luò)數(shù)據(jù)包的捕獲提供接 口和系統(tǒng)支持。最初版本是 2000年6月發(fā)布的JPcap).01版,此后幾經(jīng)修改,到現(xiàn)在 最新的JPcap0.7版。WinPcap研究WinPcap是windows平臺下一個免費、公共的網(wǎng)絡(luò)訪問系統(tǒng),是為 Linux下的 Libpcap移植到 Windows平臺下實現(xiàn)數(shù)據(jù)包捕獲而設(shè)計的函數(shù)庫, 在設(shè)計 WinPcap時參 照了 Libpcap,使用方法也與Libpcap相似,基于Libpcap的程序可以很容易的移植到 Windows平臺下。這個數(shù)據(jù)包捕獲架構(gòu)是由加州大學(xué)

26、和Lawrence Berkeley實驗室及其投稿者聯(lián)合開發(fā)的,他們在1999年3月31日推出了 1.0版,提供了用戶級BPF過濾; 1999年8月21日推出了 2.0版,將BPF過濾增加到內(nèi)核中并增加了內(nèi)核緩存;2001 年3月15日推出了 2.1版,該版對libpcap0.5.2進(jìn)行了升級,并可支持更多的網(wǎng)絡(luò)類 型;2001年1月30日推出了 2. 2版;2002年3月28日推出了 2. 3版;2003年1月 lO日推出了 3.。版,增加了 NPF設(shè)備驅(qū)動的一些新的特性及優(yōu)化方案,在 wpcap.dll 中增加了一些函數(shù)等等功能。WinPcap的最新版本是4.1.4 。WinPcap的官方

27、主頁是 HYPERLINK ,可以在其主頁上下載這個軟件及其源代碼,更重要的是,網(wǎng)站上還有 很多開發(fā)文檔,對于利用WinPcap作為工具開發(fā)網(wǎng)絡(luò)安全軟件的編程人員有很大幫助。WinPcap提供了四項功能:1)捕獲原始數(shù)據(jù)報,包括共享網(wǎng)絡(luò)上各主機(jī)發(fā)送/接收的以及相互之間交換的數(shù)據(jù)報;2)在數(shù)據(jù)報發(fā)往應(yīng)用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)報過濾掉;3)在網(wǎng)絡(luò)上發(fā)送原始的數(shù)據(jù)報;4)收集網(wǎng)絡(luò)通信過程中的統(tǒng)計信息。WinPcap的主要功能在于獨立于主機(jī)協(xié)議(如 TCP/IP)而發(fā)送和接收原始數(shù)據(jù)包, 也就是說,WinPcap不能阻塞,過濾或控制其他應(yīng)用程序數(shù)據(jù)包的發(fā)收,它僅僅只是監(jiān) 聽共享網(wǎng)絡(luò)

28、上傳送的數(shù)據(jù)包。因此,它不能用于QoS調(diào)度程序或個人防火墻。目前,WinPcap開發(fā)的主要對象是 windows NT/2000/XP ,這主要是因為在使用 WinPcap的用 戶中只有一小部分是僅使用 Windows 95/98/Me,并且微軟也已經(jīng)放棄了對 win9x的開 發(fā)。有個軟件叫sniffer pro可以作網(wǎng)管軟件用,有很多功能,可監(jiān)視網(wǎng)絡(luò)運(yùn)行情況,每 臺網(wǎng)內(nèi)機(jī)器的數(shù)據(jù)流量,實時反映每臺機(jī)器所訪問IP以及它們之間的數(shù)據(jù)流通情況,可以抓包,可對過濾器進(jìn)行設(shè)置,以便只抓取想要的包,比如POP3包,smtp包,即包等,并可從中找到郵箱用戶名和密碼,還有 ftp用戶名和密碼。它還可以在使用

29、交換 機(jī)的網(wǎng)絡(luò)上監(jiān)聽,不過要在交換機(jī)上裝它的一個軟件。還有一個簡單的監(jiān)聽軟件叫 Passwordsniffer,可截獲郵箱用戶名和密碼,還有 ftp用戶名和密碼,它只能用在 HUB 網(wǎng)絡(luò)上。著名軟件tcpdump及ids snort都是基于libpcap編寫的,止匕外Nmap掃描器也 是基于libpcap來捕獲目標(biāo)主機(jī)返回的數(shù)據(jù)包的。WinPcap提供給用戶兩個不同級別的編程接口: 一個基于 libpcap的wpcap.dll,另 一個是較底層的packet.dll。對于一般的要與unix平臺上libpcap兼容的開發(fā)來說,使用 wpcap.dll是當(dāng)然的選擇。WinPcap內(nèi)部結(jié)構(gòu)Winpc

30、ap是針對Win32平臺上的抓包和網(wǎng)絡(luò)分析的一個架構(gòu),它由內(nèi)核級的網(wǎng)絡(luò)組 包過濾器(Netgroup Packet Filter, NPF)、用戶級的動態(tài)鏈接庫 Packet.dll 和 Wpcap.dlI 等3個模塊組成7。1)網(wǎng)絡(luò)組包過濾器。它是運(yùn)行于操作系統(tǒng)內(nèi)核中的驅(qū)動程序,它直接與網(wǎng)卡驅(qū)動 程序進(jìn)行交互,獲取在網(wǎng)絡(luò)上傳輸?shù)脑紨?shù)據(jù)包。NPF與操作系統(tǒng)有關(guān),WinPcap開發(fā)組針對不同的Windows操作系統(tǒng)提供了不同版本的 NPF。在Win95/98/ME系統(tǒng)中,它 以VXD文件形式存在,在 Windows NT Windows 2000系統(tǒng)中,它以SYS文件形式 存在。該模塊提供了抓

31、取數(shù)據(jù)包以及發(fā)送數(shù)據(jù)包的基本功能,此外還提供了一些高級功 能,如數(shù)據(jù)包過濾系統(tǒng)和檢測引擎。2)低級動態(tài)鏈接庫。Pactet.dll用于在Win32平臺上為數(shù)據(jù)包驅(qū)動程序提供一個公 共的接口。不同的 Windows版本在用戶態(tài)和內(nèi)核態(tài)之間提供互不相同的接口,而 Pactet.dll可以屏蔽這些接口區(qū)別,提供一個與系統(tǒng)無關(guān)的 API。基于Pactet.dll開發(fā)的數(shù) 據(jù)包截獲程序可以運(yùn)行于不同的Win32平臺而不必重新進(jìn)行編譯。Pactet.dll可以執(zhí)行如獲取適配器名稱、動態(tài)驅(qū)動器加載以及獲得主機(jī)掩碼及以太網(wǎng)沖突次數(shù)等低級操作。3)高級動態(tài)鏈接庫。Wpcap.dll模塊與Unix系統(tǒng)下的BSD截

32、獲架構(gòu)提供的Libpcap 庫完全兼容。它提供了一組功能強(qiáng)大且跨平臺的函數(shù),利用這些函數(shù)可以不去關(guān)心適配 器和操作系統(tǒng)的類型。Wpcap.dll含有諸如產(chǎn)生過濾器、定義用戶級緩沖以及包注入等 高級功能。編程人員既可以使用包含在Pactet.dll中的低級函數(shù)直接進(jìn)入內(nèi)核級調(diào)用,也可以使用由 Wpcap.dll提供的高級函數(shù)調(diào)用,這樣功能更強(qiáng),使用也更為方便。Wpcap.dll的函數(shù)調(diào)用會自動調(diào)用Pactet.dll中的低級函數(shù),并且可能被轉(zhuǎn)換成若干個NPF系統(tǒng)調(diào)用。WinPcap的主要函數(shù)庫Winpcap函數(shù)庫主要有如下函數(shù):int pcap_findalldevs (pcap_if_t *,

33、char *)用來獲得網(wǎng)卡的列表void pcap_freealldevs (pcap_if_t *)與int pcap_findalldevs (pcap_if_t *,char *)配套使用,當(dāng)不需要網(wǎng)卡列表時,用此函 數(shù)釋放空間pcap_t *pcap_open_live(const char *, int, int, int, char *)用來得到一個包抓取得描述符Int pcap_loop(pcap_t *, int, pcap_handler, u_char *)捕獲數(shù)據(jù)包,不會響應(yīng)pcap_open_live()中設(shè)置的超時時間int pcap_dispatch(pcap_t

34、*, int, pcap_handler, u_char *)捕獲數(shù)據(jù)包??梢圆槐蛔枞鹖nt pcap_next_ex(pcap_t *, struct pcap_pkthdr *, const u_char *)捕獲數(shù)據(jù)包int pcap_compile(pcap_t *, struct bpf_program *, const char *, int, bpf_u_int32) 編譯一個過濾設(shè)備,與pcap _ setfilter ()配合使用int pcap_setfilter(pcap_t *, struct bpf_program *)用來聯(lián)系一個在內(nèi)核驅(qū)動上過濾的過濾器,這時所有網(wǎng)

35、絡(luò)數(shù)據(jù)包都將流經(jīng)過濾器, 并拷貝到應(yīng)用程序中3系統(tǒng)設(shè)計捕獲數(shù)據(jù)的分析與還原對捕獲數(shù)據(jù)的解析,其主要依據(jù)是網(wǎng)絡(luò)協(xié)議中定義的各種包的類型和包的格式, 下 面依次對這些數(shù)據(jù)的格式與協(xié)議進(jìn)行介紹與分析。802.3標(biāo)準(zhǔn)的數(shù)據(jù)幀分析與還原根據(jù)TCP/IP協(xié)議,機(jī)器接收到一個以太網(wǎng)數(shù)據(jù)包時,數(shù)據(jù)從協(xié)議棧中由底向上升, 同時去掉各層協(xié)議加上的報文首部, 每層協(xié)議都要檢查報文首部的協(xié)議表示, 以確定數(shù) 據(jù)的上層協(xié)議。根據(jù)以太網(wǎng)數(shù)據(jù)鏈路層的幀格式,網(wǎng)絡(luò)適配器的驅(qū)動程序會自動計算校 驗和,并取走幀中的前同步碼和校驗和字段,因此 WinPcap接收的數(shù)據(jù)包僅僅是其中 的幀頭和載荷部分,即捕獲到的是幀結(jié)構(gòu)中的“目標(biāo)MA

36、C*址”、“源MAC*址”、“幀 類型”、“幀中數(shù)據(jù)”這四部分。在這種情況下,要實現(xiàn)對數(shù)據(jù)幀的還原,只需要將捕 獲的數(shù)據(jù)幀的前12個字節(jié)分別轉(zhuǎn)換為十六進(jìn)制數(shù)據(jù),就可以清楚地看到MAC*址,并通過對比本機(jī)的MAC*址,還可以初步判斷出該數(shù)據(jù)幀是本機(jī)發(fā)送的或是接收到的。IP報文的分析與還原圖3-1 IP數(shù)據(jù)報格式版本:4位,標(biāo)識IP版本號。目前有IPv4、IPv6。我們目前所用的IP協(xié)議基本都 是IPv4版本10首部長度:4位,度指的是首部占32bit字的數(shù)目,包括任何選項。由圖 3-1可知 首部所占字節(jié)數(shù)為(4+4+8+16+16+3+13+8+8+16+32+32+0= 160bit ,正好是

37、 32bit 的 5倍,所以首部長度最小為5。如果選項字段有其它數(shù)據(jù),則這個值會大于 5。由上面 也可知IP首部最小長度為20字節(jié),最大長度為(2的4次方-1 ) *32/8 =60字節(jié)。服務(wù)類型:8位,其中:優(yōu)先權(quán):3位,設(shè)置了數(shù)據(jù)包的重要性,取值越大數(shù)據(jù)越重要,取值范圍為:0 (正常)-7 (網(wǎng)絡(luò)控制)。TOS 4位,分別表示最小延時、最大吞吐量、最高可靠性、最小費用。如果 4位 TOS子字段均為0,那么就意味著是一般服務(wù)。未使用:1位,必須置00總長度:16位,總長度指首部和數(shù)據(jù)之和的長度,以字節(jié)為單位。利用首部長度 字段和總長度字段,就可以知道IP數(shù)據(jù)報中數(shù)據(jù)內(nèi)容的起始位置和長度。由于

38、該字段 長16比特,所以IP數(shù)據(jù)報最長可達(dá)65535字節(jié)。標(biāo)識:16位,唯一地標(biāo)識主機(jī)發(fā)送的每一份數(shù)據(jù)報。通常每發(fā)送一份報文它的值 就會加1。IP軟件在存儲器中維持一個計數(shù)器,每產(chǎn)生一個數(shù)據(jù)報,計數(shù)器就加1,并將此值賦給標(biāo)識字段。但這個“標(biāo)識”并不是序號,因為 IP是無連接服務(wù),數(shù)據(jù)報不 存在按序接收的問題。當(dāng)數(shù)據(jù)報由于長度超過網(wǎng)絡(luò)的MTLM必須分片時,這個標(biāo)識字段 的值就被復(fù)制到所有的數(shù)據(jù)報的標(biāo)識字段中。相同的標(biāo)識字段的值使分片后的各數(shù)據(jù)報 片最后能正確地重裝成為原來的數(shù)據(jù)報。在分片和重組技術(shù)中將會用到。標(biāo)志:3位,但目前只有2位有意義。標(biāo)志字段中的最低位記為 M FMore Fragmen

39、t)。 MF=1即表示后面“還有分片”的數(shù)據(jù)報;MF=08示這已是若干數(shù)據(jù)報片中的最后一個。 標(biāo)志字段中間的一位記為 DF (Dont Fragment ),意思是“不能分片”。只有當(dāng) DF=0 時才允許分片,具體定義如下:1)保留位:1位;DF字段:1位,取值:0 (允許數(shù)據(jù)報分段)、1 (數(shù)據(jù)報不能分段);MF?段:1位,取值:0 (數(shù)據(jù)包后面沒有包,該包為最后的包)、1 (數(shù)據(jù)包 后面有更多的包)。片偏移:13位。片偏移指出:較長的分組在分片后,某片在原分組中的相對位置, 也就是說,相對用戶數(shù)據(jù)字段的起點,該片從何處開始。片偏移以8個字節(jié)為偏移單位, 這就是說,每個分片的長度一定是 8字

40、節(jié)(64位)的整數(shù)倍。11生存時間:8位,生存時間字段常用的的英文縮寫是 TTL. (Time To Live ),表明 是數(shù)據(jù)報在網(wǎng)絡(luò)中的壽命。由發(fā)出數(shù)據(jù)報的源點設(shè)置這個字段, 其目的是防止無法交付 的數(shù)據(jù)報無限制地在因特網(wǎng)中兜圈子,因而白白消耗網(wǎng)絡(luò)資源。最初的設(shè)計是以秒作為 TTL的單位。每經(jīng)過一個路由器時,就把 TTL減去數(shù)據(jù)報在路由器消耗掉的一段時間。 若數(shù)據(jù)報在路由器消耗的時間小于1秒,就把TTL值減1。當(dāng)TTL值為0時,就丟棄這 個數(shù)據(jù)報。一般可以理解為經(jīng)過路由器的最大數(shù)目。協(xié)議:8位。協(xié)議字段指出此數(shù)據(jù)報攜帶的數(shù)據(jù)是使用何種協(xié)議(上層協(xié)議),以便使目的主機(jī)的IP層知道應(yīng)將數(shù)據(jù)部分

41、上交給哪個處理過程。協(xié)議可包括TCR UDPTELNET, 1=ICMP,6=TCP,17=UDP首部校驗和:16位,首部檢驗和字段是根據(jù)IP首部計算的檢驗和碼,它不對首部 后面的數(shù)據(jù)進(jìn)行計算。ICMP UDP TCPft它們各自的首部中均含有同時覆蓋首部和數(shù) 據(jù)檢驗和碼。為了計算一份數(shù)據(jù)報的IP檢驗和,首先把檢驗和字段置為 0,然后對首 部中每個16bit進(jìn)行二進(jìn)制反碼求和(整個首部看成是由一串16 bit的字組成),結(jié)果存在檢驗和字段中。當(dāng)收到一份IP數(shù)據(jù)報后,同樣對首部中每個16 bit進(jìn)行二進(jìn)制 反碼的求和。由于接收方在計算過程中包含了發(fā)送方存在首部中的檢驗和,因此,如果首部在傳輸過程

42、中沒有發(fā)生任何差錯,那么接收方計算的結(jié)果應(yīng)該為全1,如果結(jié)果不是全1 (即檢驗和錯誤),那么IP就丟棄收到的數(shù)據(jù)報,但是不生成差錯報文,由上 層去發(fā)現(xiàn)丟失的數(shù)據(jù)報并進(jìn)行重傳。源IP地址:32位,發(fā)送IP的主機(jī)地址。目的IP地址:32位,數(shù)據(jù)發(fā)往的IP主機(jī)地址。UDP數(shù)據(jù)包的封裝UDP是一個簡單的面向數(shù)據(jù)報的運(yùn)輸層協(xié)議8,進(jìn)程的每個輸出操作都正好產(chǎn)生一 個UD嚶?lián)?,并組裝成一份待發(fā)送的IP數(shù)據(jù)報。UD嗷據(jù)報格式有首部和數(shù)據(jù)兩個部分,如圖 3-2:12皿P數(shù)據(jù)報加F數(shù)據(jù)UDF首部圖3-2 UDP數(shù)據(jù)報格式首部很簡單,共8字節(jié),如圖3-3:W位源端口號16位目的端口號15 1616位UTF長度16

43、位皿F檢查和數(shù)據(jù) 如果有)圖3-3 UDP首部包括:源端口 ( Source Port ) : 2字節(jié),源端口號。目的端口(Destination Port ) : 2字節(jié),目的端口號。長度(Length) : 2字節(jié),UDFffl戶數(shù)據(jù)報的總長度,以字節(jié)為單位。檢驗和(Checksum : 2字節(jié),用于校驗UD嗷據(jù)報的數(shù)字段和包含UDPt據(jù)報首部的 “偽首部”。盡管UD市驗和的基本計算方法與IP首部校驗和的計算方法類似(16bit 字的二進(jìn)制反碼和),但是它們之間存在不同的地方,UD嗷據(jù)報長度可以為奇數(shù)字節(jié), 但是校驗和的算法是把若干個16bit字相加。解決方法是必要時在最后增加填充字節(jié) 0

44、, 這只是為了校驗和的計算(也就是說,可能增加的填充字節(jié)不被傳送)。UD嗷據(jù)報和TCPS都包含一個12字節(jié)長的偽首部,它是為了計算校驗和而設(shè)置 的。偽首部包含IP首部一些字段,其目的是讓 UDP兩次檢查數(shù)據(jù)是否已經(jīng)正確到達(dá)目 的地(例如,IP有沒有接受地址不是本主機(jī)的數(shù)據(jù)報,以及IP有沒有把應(yīng)傳給另一高層的數(shù)據(jù)報傳送給UDP 。 UD嚶?lián)笾械膫问撞扛袷饺鐖D3-4所示:133132位源工F地址加位目的工E地址08位陰浪16位皿F長度16位源端口號16位目的端口號16位UDF長度15位ITOF檢查和數(shù)據(jù)15 16圖3-4 UDP數(shù)據(jù)報的偽首部格式UDF首都J 皿p偽首部3.1.4 TCP數(shù)據(jù)包的

45、封裝TCP&據(jù)被封裝在一個IP數(shù)據(jù)報中網(wǎng),如圖3-5所示:W工F數(shù)據(jù)報TCP報文段1F首部TCF首部TCF數(shù)據(jù)20字節(jié)出字節(jié)圖3-5 TCP數(shù)據(jù)在IP數(shù)據(jù)報中的封裝圖3-6顯示TCP首部的數(shù)據(jù)格式。如果不計任選字段,它通常是 20個字節(jié)16位源端口號16位目的端口號3范序號32位確認(rèn)序號4噓部球留6位】梁:川I16位窗口大小18位檢驗和16位緊急指針選項數(shù)據(jù)口嶺 1631圖3-6 TCP包首部143.1.5 ICMP數(shù)據(jù)包的封裝IP協(xié)議提供的是面向無連接的服務(wù),不存在關(guān)于網(wǎng)絡(luò)連接的建立和維護(hù)過程,也 不包括流量控制與差錯控制功能,但需要對網(wǎng)絡(luò)的狀態(tài)有一些了解,因此在網(wǎng)際層提供 了因特網(wǎng)控制消息

46、協(xié)議 (Internet control message protocoJ簡稱ICMP)來檢測網(wǎng)絡(luò),包 括路由、擁塞、服務(wù)質(zhì)量等問題。在網(wǎng)絡(luò)中,ICMP文將作為IP層數(shù)據(jù)報的數(shù)據(jù),封 裝在IP數(shù)據(jù)報中進(jìn)行傳輸,如圖3-7所示,但I(xiàn)CMP并不是高層協(xié)議,而仍被視為網(wǎng)絡(luò) 層協(xié)議。長工WF數(shù)據(jù)報MIF報頭工CMF報頭工CMF信息K 翻據(jù)報圖3-7 ICMP數(shù)據(jù)在IP數(shù)據(jù)報中的封裝ICMP報文的類型很多,且各自又有各自的代碼,因此,ICMP并沒有一個統(tǒng)一的 報文格式,不同的ICMP類別分別有不同的報文字段。ICMP報文只是在前4個字節(jié)有 統(tǒng)一的格式,共有類型、代碼和校驗和 3個字段。如圖3-8所示。類

47、型(8bits)代舄(8bi ;s )n校驗和(16bits:ICMF數(shù)據(jù)部分,不同類型和代碼有不同內(nèi)容圖3-8 ICMP報文的格式其中類型字段表示ICMP報文的類型;代碼字段是為了進(jìn)一步區(qū)分某種類型的幾種不同 情況;校驗和字段用來檢驗整個ICMP報文,接著的4個字節(jié)的內(nèi)容與ICMP的類型有關(guān), 再后面是數(shù)據(jù)字段,其長度取決于ICMP的類型。154實現(xiàn)與分析WinPcap環(huán)境配置WinPcap 下載從 HYPERLINK /devel.htm /devel.htm 下載 winpcap 的開發(fā)庫從 HYPERLINK /install/default.htm /install/default.

48、htm 下載 winpcap 馬區(qū)動WinPcap 配置1)安裝WinPcap驅(qū)動,安裝完成后重啟電腦。2)解壓下載的 WinPcap開發(fā)包,將Include文件夾里的文件全部復(fù)制到 VC目錄下 的Include文件夾中,同理復(fù)制開發(fā)包中 Lib文件夾中的文件到 VC目錄下的Lib文件 夾中。3)把 WinPcap的靜態(tài)鏈接庫 wsock32.lib添加到VC+中,步驟如下:進(jìn)入 VC+ 中,選取“工程”按鈕,選取“設(shè)置”,點擊“ LINK”標(biāo)簽,在“對象/庫模塊”下添 力口 wsock32.lib。至止匕WinPcap的環(huán)境配置完成。程序的實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)捕獲的基本流程一個完整的基于 WinPc

49、ap的網(wǎng)絡(luò)數(shù)據(jù)捕獲程序應(yīng)由兩部分組成9:內(nèi)核部分和用戶 分析部分。其中內(nèi)核部分負(fù)責(zé)從網(wǎng)絡(luò)中捕獲和過濾數(shù)據(jù),這可以通過調(diào)用WinPcap豐富的接口函數(shù)實現(xiàn)。用戶分析部分主要負(fù)責(zé)界面、數(shù)據(jù)轉(zhuǎn)化與處理、格式化、協(xié)議分析 等。實現(xiàn)流程如圖4-1所示。16圖4-1基于WinPcap的網(wǎng)絡(luò)數(shù)據(jù)捕獲基本流程 簡單地說來就是打開網(wǎng)卡,抓包,分析包。獲取網(wǎng)卡信息#include pcap.hvoid main()(pcap_if_t *alldevs;pcap_if_t *d;int i=0;char errbufPCAP_ERRBUF_SIZE;/*未獲取網(wǎng)卡,返回網(wǎng)卡列表,alldevs指向表頭*/if (

50、pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) = -1)(fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf);exit(1);17/*打印列表*/for(d=alldevs;d;d=d-next)(printf(%d. %s, +i, d-name);if (d-description)printf( (%s)n, d-description);else printf( (No description available)n);if(i=0)(printf

51、(nNo interfaces found! Make sure WinPcap is installed.n);return;/*不需要網(wǎng)卡列表,釋放空間*/pcap_freealldevs(alldevs);捕獲數(shù)據(jù)包/*打開設(shè)備*/if(adhandle=pcap_open (d-name,/設(shè)備名65536保證能捕獲到數(shù)據(jù)鏈路層上的每個數(shù)據(jù)包的全部內(nèi)容PCAP_OPENFLAG_PROMISCUOUS, / 混雜模式1000,/讀取超時時間NULL,/遠(yuǎn)程機(jī)器驗證errbuf/錯誤緩沖池)= NULL)/*開始捕獲*/pcap_l00P(adhandle, 0, packet_hand

52、ler, NULL);18return 0;void packet_handler(u_char *param, const struct pcap_pkthdr *header, constu_char*pkt_data)struct tm *ltime;char timestr16;ip_header *ih;udp_header *uh;tcp_header *th;icmp_header *ich;u_int ip_len;u_short totallen;myvector.push_back(pkt_data) / 把收到的包放到一個向量 myvector 里面 ltime=loca

53、ltime(&header-ts.tv_sec);strftime( timestr, sizeof timestr, %H:%M:%S, ltime);ih = (ip_header *) (pkt_data +14);從包中解開 IP 頭并將其賦給 ihip_len = (ih-ver_ihl & 0 xf) * 4;totallen = ntohs(ih-tlen);totallen += 18;mycount.push_back(totallen)/將整個包的大小值放到一個向量 mycount里面PACKET *pkt = new PACKET;strcpy(pkt-timestr,

54、timestr);memcpy(&(pkt-IpHead), ih, sizeof(ip_header);if(int(ih-proto) = 17) /如果是UDP包就從解開UDP頭并將其賦給uhuh = (udp_header *) (u_char*)ih + ip_len);memcpy(&(pkt-UdpHead), uh, sizeof(udp_header);)if(int(ih-proto) = 6)/如果是TCP包就從解開TCP頭并將其賦給th19th = (tcp_header *)(u_char*)ih + ip_len);memcpy(&(pkt-TcpHead), th

55、, sizeof(tcp_header);)if(int(ih-proto) = 1)/如果是ICMP包就從解開ICMP頭并將其賦給ich(ich = (icmp_header *)(u_char*)ih + ip_len);memcpy(&(pkt-IcmpHead), ich, sizeof(icmp_headei);)分析數(shù)據(jù)包這里列舉UDP包的分析實現(xiàn)代碼:char ip_len8=;char szLer8=;char identifier16=;char offset12=;char live8=;char proto8=;char checksun16=;char srcIP16=

56、;char desIF16=;char srcport16=;char despor(16=;char dramlen16=;char crc16=;if(pDoc-GetCount() != -1) IP 頭長,8bits/ 總長,8bits/ 標(biāo)識,16bits/分段偏移,12bits/生命周期,8bits/ 協(xié)議,8bits首部檢驗和,16bits源 IP, 16bits/ 目的 IP, 16bits UDP 源端口,16bits UDP 目的端口,16bits UDP 長度,16bits UDP 檢驗和,16bits int mycon = pDoc-GetCount();/讀取存放在

57、向量中的包頭的信息,解開包的IP頭pDC-TextOut(0, 0, IP 頭)20pDC-TextOut(0, height,版本號:);pDC-TextOut(7* width, height, 4);pDC-TextOut(0, 2* height, IP 頭長:);sprintf(ip_len, %d, (mypacketmycon.IpHead.ver_ihl & 0 xf) * 4);pDC-TextOut(7*width, 2*height, ip_len);pDC-TextOut(0, 3*height,服務(wù)類型:);pDC-TextOut(7*width, 3*height,

58、 mypacketmycon.IpHead.tos);pDC-TextOut(0, 4*height,總長:);sprintf(szLen, %d, ntohs(mypacketmycon.IpHead.tlen)+18);pDC-TextOut(7*width, 4*height, szLen);pDC-TextOut(0, 5*height,標(biāo)識:);sprintf(identifier, %d, ntohs(mypacketmycon.IpHead.identification);pDC-TextOut(7*width, 5*height, identifier);pDC-TextOut

59、(0, 6*height,分段偏移:);sprintf(offset, %d, (char)(ntohs(mypacketmycon.IpHead.flags_fo) & 0 x1fff);pDC-TextOut(7*width, 6*height, offset);pDC-TextOut(0, 7*height,生命期(S):);sprintf(live, %d, int(mypacketmycon.IpHead.ttl);pDC-TextOut(7*width, 7*height, live);pDC-TextOut(0, 8*height,協(xié)議:);sprintf(proto, %d,

60、int(mypacketmycon.IpHto);pDC-TextOut(7*width, 8*height, proto);if(int(mypacketmycon.IpHto) = 17)pDC-TextOut(8*width, 8*height, (UDP);pDC-TextOut(0, 9*height,頭校驗和:);sprintf(checksum, %d, ntohs(mypacketmycon.IpHead.crc);pDC-TextOut(7*width, 9*height, checksum);pDC-TextOut(0, 10*height,源地址:);sprintf(sr

溫馨提示

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

評論

0/150

提交評論