【正文】
學(xué)習(xí)鑒于對(duì)驅(qū)動(dòng)程序的各種特性的不了解最終在韓斌韓老師和宋波宋老師的建議下改用 Winpcap 來(lái)實(shí)現(xiàn)。 ip_header *ih。header, amp。 (%d,dport)。而上面有介紹到了各個(gè)協(xié)議類(lèi)型的首部信息,可以很清楚的看出數(shù)據(jù)到底是如何被解讀出來(lái)的 。另外就是感覺(jué)程序在穩(wěn)定性這個(gè)方面只能說(shuō)是差強(qiáng)人意,很多地方都還有待改進(jìn)啊。 在設(shè)計(jì)中主要是完成了對(duì)于網(wǎng)卡信息的獲取還有對(duì)于網(wǎng)絡(luò)數(shù)據(jù)包捕獲功能的實(shí)現(xiàn)的函數(shù),其中參考了一些網(wǎng)絡(luò)上的教程和書(shū)籍,通過(guò)閱讀和實(shí)踐來(lái)修改學(xué)習(xí),最終通過(guò)掃描可用網(wǎng)絡(luò)接口并打開(kāi)網(wǎng)卡接口來(lái)獲取到網(wǎng)卡的信息,然后再通過(guò)更改設(shè)置網(wǎng)卡的混雜模式后調(diào)用 Winpcap 中的函數(shù)來(lái)實(shí)現(xiàn)對(duì)于網(wǎng)絡(luò)數(shù)據(jù)包的捕獲并 且分析顯示出來(lái)。除非另有說(shuō)明,本文的工作是原始性工作。Bleeding! ? Nobody ever said anything about bleeding!39。Why don39。What are cramps?39。 第 26 頁(yè) 共 27 頁(yè) 致 謝 本文是在韓斌老師的熱情關(guān)心和指導(dǎo)下完成的,真的十分感謝他,他淵博的知識(shí)和嚴(yán)謹(jǐn)?shù)闹螌W(xué)作風(fēng)使我受益匪淺,在我畢業(yè)設(shè)計(jì)期間給 了我巨大的幫助,耐心的認(rèn)真的回復(fù)我每一個(gè)問(wèn)題,對(duì)我們十分的認(rèn)真負(fù)責(zé),這次能夠順利完成本課題韓老師起到了極大的作用。實(shí)際涉及到生產(chǎn)的設(shè)計(jì)是嚴(yán)謹(jǐn)?shù)?、科學(xué)的、有根據(jù)的、完整的。也就是說(shuō)現(xiàn)在只能通過(guò)用我寫(xiě)的小程序來(lái)預(yù)先測(cè)試本機(jī)上有多少塊可用的網(wǎng)絡(luò)接口然后再來(lái)選擇打開(kāi)哪一個(gè),這點(diǎn)上來(lái)說(shuō)不夠人性化,還有待改進(jìn)。 //將數(shù)據(jù)包內(nèi)容依次寫(xiě)入 pcap_dump_open()指定的文件中 return 0。 (%d,headerlen)。 /*釋放所有設(shè)備列表 */ pcap_freealldevs(alldevs)。 int i=0。因?yàn)檫@些只是一些struct 定義而已,將各個(gè)首部中的各種相關(guān)屬性定義到一起。 //定義 buffers的大小 3*4+3+1,后面的 +3+1分別是代表 3個(gè)“ .”和 1個(gè)結(jié)束符 static short which。 //源 IP (row,4,desip)。其他的控件都比較簡(jiǎn)單就不在這里多說(shuō)了。 圖 5 功能模塊圖 第 12 頁(yè) 共 27 頁(yè) 系統(tǒng)流程圖 下圖 6 是程序流程圖 圖 6 程序流程圖 根據(jù)流程圖可以清楚明白的看到每一步的流程,程序是怎么樣執(zhí)行下去的,有助于理解程序。 3 設(shè)計(jì)方案與系統(tǒng)功能描述 設(shè)計(jì)方案 在多方參考的情況下打算采用 Winpcap和 Winsock中的一種來(lái)實(shí)現(xiàn)抓包等相應(yīng)的功能。 a) int pcap_setfilter(pcap_t *p,struct bpf_program *fp) 第 9 頁(yè) 共 27 頁(yè) //此函數(shù)設(shè)置 BPF 過(guò)濾規(guī)則 ,由參數(shù) fp確定 b) int pcap_pile(pcap_t *p,struct bpf_program *program,char *buf,int optimize,bpf_u_int32 mask) //此函數(shù)的功能是編譯 BPF 過(guò)濾規(guī)則。使用 進(jìn)行數(shù)據(jù)包捕獲的編程與使用 Libpcap 一樣簡(jiǎn)單。它是提供給開(kāi)發(fā)者的一個(gè)接口,使用它就可以調(diào)用 Winpcap 的函數(shù),它是一個(gè)較低層的開(kāi)發(fā)接口。 我采用 VC++ 的 MFC 來(lái)實(shí)現(xiàn)通過(guò)界面控制程序的運(yùn)行。 ,而 OSI 在開(kāi)始時(shí)只強(qiáng)調(diào)面向連接這一種服務(wù)。MAC 子層解決廣播型網(wǎng)絡(luò)中多用戶競(jìng)爭(zhēng)信道使用權(quán)問(wèn)題。所以真正想要找到一款操作簡(jiǎn)單使用方便的數(shù)據(jù)包捕獲軟件并不容易。 學(xué)位論文 網(wǎng)絡(luò)數(shù)據(jù)包捕獲工具的設(shè)計(jì)與實(shí)現(xiàn) 論文作者姓名: 申請(qǐng)學(xué)位專業(yè): 申請(qǐng)學(xué)位類(lèi)別: 指導(dǎo)教師姓名(職稱): 論文提交日期: 網(wǎng)絡(luò)數(shù)據(jù)包捕獲工具的設(shè)計(jì)與實(shí)現(xiàn) 摘 要 網(wǎng)絡(luò)數(shù)據(jù)包的捕獲對(duì)于網(wǎng)絡(luò)安全有著巨大的作用,為我們更好的分析網(wǎng)絡(luò)中的數(shù)據(jù)流提供了幫助。作為一名網(wǎng)絡(luò)工程專業(yè)的學(xué)生,熟悉常用的各種計(jì)算機(jī)相關(guān)軟件 ,特別是和網(wǎng)絡(luò)相關(guān)的軟件是應(yīng)該的。 LLC 的主要任務(wù)是將有噪聲的物理信道變成無(wú)傳輸差錯(cuò)的通信信道,提供數(shù)據(jù)成幀、差錯(cuò)控制、流量控制和鏈路控制等功能。一直到很晚才開(kāi)始制定另一種無(wú)連接服務(wù)的有關(guān)標(biāo)準(zhǔn)。之所以采用 VC++來(lái)實(shí)現(xiàn)是因?yàn)椋? 1.界面設(shè)計(jì)簡(jiǎn)單 2.面向?qū)ο缶幊?,比較容易實(shí)現(xiàn) 第 5 頁(yè) 共 27 頁(yè) 3.很容易調(diào)用 Windows 自身的函數(shù) 4.后臺(tái)存取規(guī)則容易 5.所見(jiàn)即所得 Winpcap開(kāi)發(fā)技術(shù)詳解 Winpcap 介紹 Winpcap( Windows Packet Capture)是 Windows 平臺(tái)下一個(gè)專業(yè)網(wǎng)絡(luò)數(shù)據(jù)包捕獲開(kāi)發(fā)包,是為 Libpcap 在 Windows 平臺(tái)下實(shí)現(xiàn)數(shù)據(jù)包的捕獲而設(shè)計(jì)的。 第三部分是動(dòng)態(tài)鏈接庫(kù) 。 Winpcap 數(shù)據(jù)結(jié)構(gòu) 詳細(xì)的一些數(shù)據(jù)結(jié)構(gòu)在后面的軟件編程中會(huì)給出, 此處只是給出一些比較核心的數(shù)據(jù)結(jié)構(gòu),并簡(jiǎn)單介紹。 說(shuō)明: 此處的過(guò)濾規(guī)則只是在內(nèi)核中過(guò)濾顯示協(xié)議信息,并非過(guò)濾數(shù)據(jù)包,并不能做到對(duì)數(shù)據(jù)包的阻塞功能,要想過(guò)濾數(shù)據(jù)包可以采用 NDIS 網(wǎng)絡(luò)驅(qū)動(dòng)在更底層來(lái)實(shí)現(xiàn),所以我并沒(méi)由添加這部分功能,這里只是提出來(lái)說(shuō)明下有這些功能。參考了《網(wǎng)絡(luò)安全開(kāi)發(fā)包詳解》和《 Windows 防火墻和網(wǎng)絡(luò)封包截獲技術(shù)》這兩本書(shū)后決定采用 Winpcap 來(lái)實(shí)現(xiàn)代碼。 4 編碼實(shí)現(xiàn) Winpcap環(huán)境設(shè)置 配置環(huán)境首先需要安裝 Winpcap,所使用的是 ,這個(gè)是必須安裝的,它是所有基于 Winpcap 的應(yīng)用程序運(yùn)行所必須的。 將 list 的屬性中的 style 里查看選項(xiàng)改成了 report 格式,然后通過(guò)插入語(yǔ) 第 15 頁(yè) 共 27 頁(yè) 句來(lái)實(shí)現(xiàn)對(duì)表項(xiàng)中每一列顯示信息種類(lèi)的設(shè)置。 //目的 IP (row,5,sourceport)。 u_char *p。所以這里為了大家方便理解就形象化的把個(gè)首部的信息用 excel 作出了插入到這里大家可以看看,代碼中很多地方都用到了一些相關(guān)信息。 char errbuf[PCAP_ERRBUF_SIZE]。 // 建立存儲(chǔ)截獲數(shù)據(jù)包的文件 pcap_dumper_t* dumpfile。 (%d.%d.%d.%d,ih,ih,ihe3,ih)。 } 程序中很多函數(shù)的作用功能的實(shí)現(xiàn)和參數(shù)的作用都給出了相應(yīng)的注釋,所以很多地方就不特別給出解釋了,只給出個(gè)人認(rèn)為比較不好理解的地方的一些東西。 整合到 MFC 界面中的程序測(cè)試 下面圖 18 中的是我的最終界面,也就是說(shuō)是通過(guò)其來(lái)控制我的整個(gè)程序的運(yùn)作。但我們所做 的課程設(shè)計(jì)是不完整的、不嚴(yán)謹(jǐn)?shù)?、是沒(méi)有考慮經(jīng)濟(jì)和使用價(jià)值為基礎(chǔ)的。在此向他表示我最衷心的感謝! 感謝宋波老師和張磊同學(xué)在課題研究初期給予的幫助,在我做畢業(yè)設(shè)計(jì)的過(guò)程中兩位同樣給我了很大的幫助,正是在你們的幫助下課題才得以很好的展開(kāi),有了一個(gè)很好的開(kāi)端!另外還要特別感謝 CSDN 網(wǎng)上的一些朋友們,在更大家的相互討論中使我對(duì)這個(gè)課題有了更加深刻的了解,也謝謝你們對(duì)我所遇到問(wèn)題時(shí)給予的無(wú)私幫助。 and she said, 39。t you turn this way a little? Bill asked. Can you give me a good reason? He showed her one, and she gave him a little more than he had asked for. Then she found herself with a little more than she had .asked for, but as usual, he kne would be easy to move it. Cirocco frowned. Just how big is it, then? The PoloAugust, she was almost sure it was August looked at her with that calm, strangely unsettling face. I should say about two or three kilometers. Poss。 and I said, 39。文中除了特別加以標(biāo)注地方外,不包含他人已經(jīng)發(fā)表或撰寫(xiě)過(guò)的研究成果 ,也不包含為獲得成都信息工程學(xué)院或其他教學(xué)機(jī)構(gòu)的學(xué)位或證書(shū)而使用過(guò)的材料。設(shè)計(jì)的目的就是經(jīng)濟(jì)又適用,達(dá)到實(shí)際生產(chǎn)的要求和目的,能更大更快的為使用廠家創(chuàng)造經(jīng)濟(jì)效益。也有可能是程序運(yùn)行過(guò)程中抓包程序始終占有著系統(tǒng)資源造成程序其他部分功能的運(yùn)行擱置,所以打算用線程來(lái)試試,看看問(wèn)題能不能得到解決。圖片的理解可以結(jié)合代碼部 圖 14 數(shù)據(jù)包的封裝和解析 分。 (%d,sport)。 //將捕獲的信息保存到抓包程序所在目錄下的 /* 此處循環(huán)調(diào)用 pcap_next_ex來(lái)接受數(shù)據(jù)報(bào) */ res = pcap_next_ex( adhandle, amp。 char timestr[16]。不論是監(jiān)聽(tīng)網(wǎng)絡(luò)狀 第 18 頁(yè) 共 27 頁(yè) 況還是防火墻的過(guò)濾規(guī)則安全策略,捕獲數(shù)據(jù)包并分析其中所包含的內(nèi)容絕對(duì)都是其中的關(guān)鍵和絕對(duì)的前提。in。 //目的端口號(hào) 其中數(shù)據(jù)包的顯示是通過(guò)定時(shí)器每隔一秒鐘觸發(fā)調(diào)用一次將捕捉到的數(shù)據(jù)包信息返回插入到 list 表中 定時(shí)器和系統(tǒng)時(shí)間的獲得 SetTimer(1,1000,NULL); //設(shè)置定時(shí)器 ,1000ms觸發(fā)一次 ? ? CDialog::OnTimer(nIDEvent)。 ( 1, _T(時(shí)間 ), LVCFMT_LEFT, 70)。該文件包括開(kāi)發(fā)用的頭文件和靜態(tài)鏈接庫(kù)文件,是開(kāi)發(fā)者要用到的。 通過(guò) Microsoft Visual C++ MFC 來(lái)實(shí)現(xiàn)可視化編程,通過(guò)一個(gè)簡(jiǎn)單的界面來(lái)實(shí)現(xiàn)對(duì)于捕獲網(wǎng)卡信息 、本機(jī) IP 地址、廣播地址和子網(wǎng)掩碼等信息的獲取顯示。 參數(shù)描述:參數(shù) p 表示 winpcap 的句柄;參數(shù) t為捕獲數(shù)據(jù)包的個(gè)數(shù)如果為 1 則表示無(wú)限個(gè);參數(shù) callback 表示回調(diào)函數(shù);參數(shù) user 表示回調(diào)函數(shù)中傳輸?shù)膮?shù)。 Pcap_if 數(shù)據(jù)結(jié)構(gòu)定義如下: Tpyedef struct pcap_if pcap_if_t; Struct pcap_if{ Struct pcap_if *next; //指向下一個(gè)網(wǎng)絡(luò)接口結(jié)點(diǎn) char *name; //網(wǎng)絡(luò)接口名字 char *description; //描述信息 Struct sockaddr *addresses; //網(wǎng)絡(luò)接口地址 Bpf_u_int32 flags; //標(biāo)記 }; 此數(shù)據(jù)結(jié)構(gòu)描述的是一個(gè)網(wǎng)絡(luò)接口,它其實(shí)是網(wǎng)絡(luò)接口鏈表中的一個(gè)結(jié)點(diǎn)。使用此接口進(jìn)行編程,幾乎可以把 linux 下使用 libpcap 寫(xiě)的程序原封不動(dòng)的搬到 Windows 平臺(tái)下。使用 Winpcap 開(kāi)發(fā)包,可以把在 Linux 下基于 Libpcap 的程序很容易的移植到 Winpcap 平臺(tái)下。隨著 OOP(面向?qū)ο缶幊蹋┫?OOD(面向?qū)ο笤O(shè)計(jì))和 OOA(面向?qū)ο蠓治觯┑陌l(fā)展,最終形成面向?qū)ο蟮能浖_(kāi)發(fā)方法 OMT(ObjectModellingTechnique)。 傳輸層: 主要目的在于彌補(bǔ)網(wǎng)絡(luò)層服務(wù)與用戶需求之間的差距。這些產(chǎn)品大多數(shù)品質(zhì)都不錯(cuò),各有各的特點(diǎn),所以選擇起來(lái)的難度也挺大。數(shù)據(jù)包的捕獲是實(shí)現(xiàn)防 火墻、網(wǎng)絡(luò)協(xié)議的分析或者網(wǎng)絡(luò)監(jiān)聽(tīng)等等功能的核心內(nèi)容,一般可以采用 Winsock 編程、Winpcap 或者 NDIS 網(wǎng)絡(luò)接口驅(qū)動(dòng)來(lái)實(shí)現(xiàn)。目前 sniffer 軟件種類(lèi)繁多,但是很多都存在一些問(wèn)題,比如說(shuō):效率低,效果差,分析困難等等。 物理層: 涉及在物理信道上傳輸原始比特,處理與物理傳輸介質(zhì)有關(guān)的機(jī)械的、電氣的和過(guò)程的接口。但 ISO 和 CCITT 最初只考慮到全世界都使用同一種統(tǒng)一的標(biāo)準(zhǔn)公用數(shù)據(jù)網(wǎng)將各種不同的系統(tǒng)互聯(lián)起來(lái)。 可視化( Visual)技術(shù)得到廣泛的重視越來(lái)越多的人開(kāi)始研究可視化技術(shù)。此過(guò)濾模塊實(shí)際上是一個(gè)驅(qū) 動(dòng)程序,被稱為 NPF( Netgroup Packet Filter)數(shù)據(jù)包驅(qū)動(dòng)程序。用的最多的還是 ,因?yàn)樗峁┝艘粋€(gè)更高級(jí)、更方便的編程接口。 參數(shù)描述:參數(shù) device 表示網(wǎng)絡(luò)接口的名字;參數(shù) s