數(shù)據(jù)包捕獲及解析_第1頁
數(shù)據(jù)包捕獲及解析_第2頁
數(shù)據(jù)包捕獲及解析_第3頁
數(shù)據(jù)包捕獲及解析_第4頁
數(shù)據(jù)包捕獲及解析_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、-. z.數(shù)據(jù)包捕獲與分析摘 要 本課程設(shè)計(jì)通過Ethereal捕捉實(shí)時(shí)網(wǎng)絡(luò)數(shù)據(jù)包,并根據(jù)網(wǎng)絡(luò)協(xié)議分析流程對數(shù)據(jù)包在TCP/IP各層協(xié)議中進(jìn)展實(shí)際解包分析,讓網(wǎng)絡(luò)研究人員對數(shù)據(jù)包的認(rèn)識上升到一個(gè)感性的層面,為網(wǎng)絡(luò)協(xié)議分析提供技術(shù)手段。最后根據(jù)Ethereal的工作原理,用Visual C編寫一個(gè)簡單的數(shù)據(jù)包捕獲與分析軟件。關(guān)鍵詞 協(xié)議分析;Ethereal;數(shù)據(jù)包;Visual C1引言本課程設(shè)計(jì)通過技術(shù)手段捕獲數(shù)據(jù)包并加以分析,追蹤數(shù)據(jù)包在TCP/IP各層的封裝過程,對于網(wǎng)絡(luò)協(xié)議的研究具有重要的意義。Ethereal是當(dāng)前較為流行的圖形用戶接口的抓包軟件,是一個(gè)可以用來監(jiān)視所有在網(wǎng)絡(luò)上被傳送

2、的包,并分析其內(nèi)容的程序。它通常被用來檢查網(wǎng)絡(luò)工作情況,或是用來發(fā)現(xiàn)網(wǎng)絡(luò)程序的bugs。通過ethereal對TCP、UDP、SMTP、telnet和FTP等常用協(xié)議進(jìn)展分析,非常有助于網(wǎng)絡(luò)故障修復(fù)、分析以及軟件和協(xié)議開發(fā)。,它以開源、免費(fèi)、操作界面友好等優(yōu)點(diǎn)廣為世界各地網(wǎng)絡(luò)研究人員使用為網(wǎng)絡(luò)協(xié)議分析搭建了一個(gè)良好的研究平臺(tái)。1.1課程設(shè)計(jì)的內(nèi)容(1)掌握數(shù)據(jù)包捕獲和數(shù)據(jù)包分析的相關(guān)知識;(2)掌握Ethreal軟件的安裝、啟動(dòng),并熟悉用它進(jìn)展局域網(wǎng)數(shù)據(jù)捕獲和分析的功能;(3)設(shè)計(jì)一個(gè)簡單的數(shù)據(jù)包捕獲與分析軟件。1.2課程設(shè)計(jì)的要求(1)按要求編寫課程設(shè)計(jì)報(bào)告書,能正確闡述設(shè)計(jì)結(jié)果。(2)通過

3、課程設(shè)計(jì)培養(yǎng)學(xué)生嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度,認(rèn)真的工作作風(fēng)和團(tuán)隊(duì)協(xié)作精神。(3)學(xué)會(huì)文獻(xiàn)檢索的根本方法和綜合運(yùn)用文獻(xiàn)的能力。(4)在教師的指導(dǎo)下,要求每個(gè)學(xué)生獨(dú)立完成課程設(shè)計(jì)的全部內(nèi)容。1.3課程設(shè)計(jì)平臺(tái)Windows *P;Ethereal;Visual C2使用Ethereal對數(shù)據(jù)包進(jìn)展捕獲與分析2.1軟件Ethereal 簡介Ethereal Ethereal:A Network Packet Sniffing Tool是當(dāng)前較為流行的一種計(jì)算機(jī)網(wǎng)絡(luò)調(diào)試和數(shù)據(jù)包嗅探軟件。Ethereal 根本類似于tcpdump,但Ethereal 還具有設(shè)計(jì)完美的 GUI 和眾多分類信息及過濾選項(xiàng)。用戶通過 E

4、thereal,同時(shí)將網(wǎng)卡插入混合模式,可以查看到網(wǎng)絡(luò)中發(fā)送的所有通信流量。 Ethereal 應(yīng)用于故障修復(fù)、分析、軟件和協(xié)議開發(fā)以及教育領(lǐng)域。它具有用戶對協(xié)議分析器所期望的所有標(biāo)準(zhǔn)特征,并具有其它同類產(chǎn)品所不具備的有關(guān)特征。Ethereal 主要具有以下特征: 在實(shí)時(shí)時(shí)間內(nèi),從網(wǎng)絡(luò)連接處捕獲數(shù)據(jù),或者從被捕獲文件處讀取數(shù)據(jù);Ethereal 可以讀取從 tcpdumplibpcap、網(wǎng)絡(luò)通用嗅探器被壓縮和未被壓縮、SnifferTM 專業(yè)版、Net*rayTM、Sun snoop 和 atmsnoop、Shomiti/Finisar 測試員、AI* 的 iptrace、Microsoft

5、的網(wǎng)絡(luò)監(jiān)控器、Novell 的 LANalyzer、RAD 的 WAN/LAN 分析器、 ISDN4BSD 工程的 HP-U* nettl 和 i4btrace、Cisco 平安 IDS iplog 和 pppd 日志 pppdump 格式、WildPacket 的 EtherPeek/TokenPeek/AiroPeek 或者可視網(wǎng)絡(luò)的可視 UpTime 處捕獲的文件。此外 Ethereal 也能從 Lucent/Ascend WAN 路由器和 Toshiba ISDN 路由器中讀取跟蹤報(bào)告,還能從 VMS 的 TCPIP 讀取輸出文本和 DBS Etherwatch。 從以太網(wǎng)、FDDI、

6、PPP、令牌環(huán)、IEEE 802.11、ATM 上的 IP 和回路接口至少是*些系統(tǒng),不是所有系統(tǒng)都支持這些類型上讀取實(shí)時(shí)數(shù)據(jù)。 通過 GUI 或 TTY 模式 tethereal 程序,可以訪問被捕獲的網(wǎng)絡(luò)數(shù)據(jù)。通過 editcap 程序的命令行交換機(jī),有方案地編輯或修改被捕獲文件。 當(dāng)前602協(xié)議可被分割。 輸出文件可以被保存或打印為純文本或 PostScript格式。 通過顯示過濾器準(zhǔn)確顯示數(shù)據(jù)。 顯示過濾器也可以選擇性地用于高亮區(qū)和顏色包摘要信息。所有或局部被捕獲的網(wǎng)絡(luò)跟蹤報(bào)告都會(huì)保存到磁盤中1。2.2利用Ethereal捕獲數(shù)據(jù)包安裝完Ethereal后,單擊Capture下的Opt

7、ion菜單,翻開捕獲選項(xiàng)對話框,設(shè)置好捕捉接口interface和過濾器(capture filter),設(shè)置混雜模式promiscuous mode選項(xiàng)(此選項(xiàng)使得網(wǎng)卡并不檢驗(yàn)數(shù)據(jù)幀的目的地址,用以截獲網(wǎng)上的任何幀),其他選項(xiàng)可采用默認(rèn)設(shè)置如圖2-1,再單擊Start按鈕即可實(shí)時(shí)截獲數(shù)據(jù)包。用Ethereal的捕獲窗口如圖2-2,捕獲到的實(shí)時(shí)網(wǎng)絡(luò)數(shù)據(jù)包的局部截圖見圖2-3。所截獲的數(shù)據(jù)包分別在包列表(PackList)、包細(xì)節(jié)Packet Details和包字節(jié)(PackeBytes)三欄窗口中顯示。其中上欄的包列表窗口按截獲的時(shí)間順序顯示出數(shù)據(jù)包的根本信息:編號代表收到數(shù)據(jù)包的次序、時(shí)間、

8、源地址、目的地址協(xié)議名稱以及關(guān)于此數(shù)據(jù)包的摘要信息;中間欄的包細(xì)節(jié)窗口以樹形顯示當(dāng)前數(shù)據(jù)包在各協(xié)議層的封裝細(xì)節(jié),包括首部和數(shù)據(jù);下欄的包字節(jié)窗口則以十六進(jìn)制和ASCII碼顯示被截獲數(shù)據(jù)包的詳細(xì)內(nèi)容左邊一欄顯示偏移量,中間一欄顯示十六進(jìn)制數(shù)值,右邊一欄顯示解碼后相對應(yīng)的字符控制字符示為1個(gè)點(diǎn)。圖2-1Ethereal的設(shè)置圖2-2捕獲狀態(tài)窗口圖2-3捕獲的數(shù)據(jù)包2.2 利用Ethereal對捕獲數(shù)據(jù)包進(jìn)展分析Ethereal是當(dāng)前較為流行的一種計(jì)算機(jī)網(wǎng)絡(luò)調(diào)試和數(shù)據(jù)包嗅探軟件,是一個(gè)可以用來監(jiān)視所有在網(wǎng)絡(luò)上被傳送的包,并分析其內(nèi)容的程序。它通常被用來檢查網(wǎng)絡(luò)工作情況,或是用來發(fā)現(xiàn)網(wǎng)絡(luò)程序的bugs

9、。通過ethereal對TCP、UDP、SMTP、telnet和FTP等常用協(xié)議進(jìn)展分析,非常有助于網(wǎng)絡(luò)故障修復(fù)、分析以及軟件和協(xié)議開發(fā)。1ARP協(xié)議分析ARP,全稱Address Resolution Protocol,地址解析協(xié)1它工作在數(shù)據(jù)鏈路層,在本層和硬件接口聯(lián)系,同時(shí)對上壓供效勞。TP數(shù)據(jù)包常通過以太網(wǎng)發(fā)送,以太網(wǎng)設(shè)備并不識別32IP地址,它們是以48位以太網(wǎng)地址傳輸以太網(wǎng)數(shù)據(jù)包。必須把IP目的地址轉(zhuǎn)換成以太網(wǎng)目的地址。因此,在以太網(wǎng)中,一個(gè)主機(jī)要和另一個(gè)主機(jī)進(jìn)展直接通信,必須要知道目標(biāo)主機(jī)的MAC地址。但這個(gè)目標(biāo)MAC地址是如何獲得的呢它就是通過地址解析協(xié)議獲得的。圖2-4就是對

10、ARP捕獲的狀態(tài)窗口。ARP協(xié)議用于將網(wǎng)絡(luò)中的IP地址解析為的硬件地址(MAC地址),以保證通信的順利進(jìn)展。網(wǎng)絡(luò)當(dāng)中經(jīng)常會(huì)使用到ARP協(xié)議,所以可以使用Ethereal抓取網(wǎng)絡(luò)中的ARP數(shù)據(jù)包,如圖2-5,從圖2-5中看到,已經(jīng)捕獲到了一些ARP的數(shù)據(jù)包,每個(gè)數(shù)據(jù)包占一行,比方第1個(gè)ARP數(shù)據(jù)包,從它的info信息里面可以看到對于這個(gè)數(shù)據(jù)包的簡要的說明:Who has.140 Tell .250。這個(gè)info說明ARP協(xié)議的主要功能:通過IP地址找對方的MAC地址。針對ARP協(xié)議還可以具體分析它的構(gòu)造,以往的教學(xué)中學(xué)生只能從課本上看到ARP協(xié)議的圖,如圖6,學(xué)生容易產(chǎn)生疑問,難道真的是這樣嗎在

11、我們可以通過分析抓取到的數(shù)據(jù)包來切切實(shí)實(shí)地看一下它的構(gòu)造到底是什.么樣的,對照圖2-6看一下到底是不是一致。隨便找一個(gè)ARP的數(shù)據(jù)包,將其展開可以看到圖2-7的構(gòu)造,比照圖2-7中框局部與圖2-6中框局部,可以發(fā)現(xiàn)兩者是一致的,通過比照學(xué)生就會(huì)對ARP的構(gòu)造有更深刻的認(rèn)識2。圖2-4ARP捕獲狀態(tài)窗口圖2-5捕獲的ARP數(shù)據(jù)包圖2-6ARP報(bào)文構(gòu)造圖2-7ARP構(gòu)造2利用Ethereal分析TCP/IP機(jī)制TCP是一種面向連接的、可靠的傳輸層協(xié)議,TCP數(shù)據(jù)傳(只有連接建立后才可進(jìn)展數(shù)據(jù)傳輸)需要通過在客戶端和服端建立特定的虛電路連接來完成,該過程通常被稱為三次握手,如圖2-8,即發(fā)送方先發(fā)送

12、連接請求,然后承受方進(jìn)展連接確認(rèn),最發(fā)送方對承受方再次進(jìn)確認(rèn)。下面就以Ethereal捕獲的建TCP連接過程的三個(gè)數(shù)據(jù)包為例對TCP/IP協(xié)議進(jìn)展分析。圖2-8三次握手示意圖為了能夠捕獲到三次握手過程中的數(shù)據(jù)包,首先讓Ethereal一直保持捕獲狀態(tài)(圖2-9),因?yàn)槭峭ㄟ^TCP來建立的,可以將Ethereal的過濾器設(shè)置為TCP,此時(shí)只捕獲所有經(jīng)過計(jì)算機(jī)的TCP協(xié)議數(shù)據(jù)包。圖2-9TCP捕獲狀態(tài)窗口在保持捕獲的狀態(tài)下,翻開一個(gè)新的網(wǎng)頁,如.163.,由于訪問網(wǎng)頁首先需要通過三次握手建立連接,然后才能進(jìn)展數(shù)據(jù)的傳輸,此時(shí),Ethereal就可以捕獲到在訪問網(wǎng)頁過程中建立連接的TCP數(shù)據(jù)包(圖2

13、-10)圖2-10 TCP捕獲狀態(tài)窗口在捕獲狀態(tài)窗口中點(diǎn)擊停頓,將所有捕獲到的數(shù)抿所顯示出圖2-11顯示的就是所捕到的前4個(gè)數(shù)據(jù)包,從圖中可以看到1號數(shù)據(jù)包一3號數(shù)據(jù)包是連接建立過程中的數(shù)據(jù)包,4號數(shù)據(jù)包是在連接建立完成以后開場傳輸數(shù)據(jù)。圖2-11捕獲到的數(shù)據(jù)包客戶端發(fā)送連接請求,從圖2-12可以看出,該數(shù)據(jù)包封裝了三個(gè)頭信息:以太網(wǎng)(Eth-ernet)幀、IP數(shù)據(jù)報(bào)IP數(shù)據(jù)報(bào)首部格式如圖2-12和TCP報(bào)文段(TCP報(bào)文段固定首部格式如圖2-13)。在物理鏈路層,數(shù)據(jù)以幀的方式進(jìn)展傳輸。以太網(wǎng)幀頭信息中,描述了該數(shù)據(jù)包的接收方MACMAC的構(gòu)造如圖2-14地址為00:03:0f:00:0c

14、:4b發(fā)起連接請求的源主機(jī)MAC為00:03:0d:a4:0f:72,在幀中封裝的協(xié)議類型type值為0*0800,即IP數(shù)據(jù)報(bào)。在網(wǎng)絡(luò)層,加工的主要數(shù)據(jù)對象是IP數(shù)據(jù)報(bào)。IP協(xié)議是TCPIP協(xié)議族中的核心協(xié)議之一,所有的TCP、UDP、ICMP數(shù)據(jù)都以IP數(shù)據(jù)報(bào)格式傳輸。從以上請求數(shù)據(jù)包的IP首部可以看出,此IP數(shù)據(jù)報(bào)版本號(version)為4(即這個(gè)數(shù)據(jù)報(bào)為IPv4),首部(head length)為20bytes,效勞類型(services field)為0*00,數(shù)據(jù)報(bào)總長(total length,即IP首部+數(shù)據(jù)載荷)為48,標(biāo)識(identification)為0*96b53,

15、標(biāo)志(flags)為0*04表示報(bào)文不分段,段偏移(fragmen offset)為0,生存時(shí)間(time to live)為128,數(shù)據(jù)報(bào)中上層協(xié)議類型protocol值為0*06 (即TCP報(bào)文段),頭部校驗(yàn)和0*1206表示正確,請求主機(jī)的IP地址為.226,目的主機(jī)的IP地址為0。在運(yùn)輸層,主要數(shù)據(jù)對象是TCP報(bào)文。在以上的TCP報(bào)文段中,描述了請求方源端口號(source port)為1615;目的端口號(destination port)為80,其中0是HTTP協(xié)議的保存端口號;序列號SEQ是本次連接的初始序號,因此在連接請求時(shí)相對初始值是0,其實(shí)際值是246815a1;確認(rèn)號是0

16、0000070;頭部長度(header length)為28bytes;標(biāo)志位(flags)為O*0002,指示ACK標(biāo)志為0說明確認(rèn)號被忽略,SYN=1表示正在進(jìn)展連接請求,通過SYN和ACK也可以用來區(qū)分Connection Request和Connection Accepted,在連接請求中,SYN=1、ACK=0,連接響應(yīng)時(shí),SYN=1、ACK=1;PSH為0;窗口字段(window size)指示發(fā)送方想要接收的最大字節(jié)數(shù)為65535;校驗(yàn)和(checksum)為0*f6a說明正確;最后是8bytes的選項(xiàng)字段3。比特0 4 8 16 19 24 31圖2-12 IP數(shù)據(jù)報(bào)首部格式比

17、特 0 8 16 24 31圖2-13 TCP報(bào)文段固定首部格式字節(jié) 6 6 2 46-105 4 圖2-14以太網(wǎng)V2 MAC幀格式圖2-15發(fā)送方發(fā)出的連接請求數(shù)據(jù)包對此數(shù)據(jù)包的具體分析過程如圖2-12,在此我們僅涉及連接的過程中一些重要地方的變化:數(shù)據(jù)包由效勞端0發(fā)至客戶端.226。在響應(yīng)TCP報(bào)文段中,源端口和目的端口地址相對改變,相應(yīng)數(shù)據(jù)包的起始序列號SEQ為ef84c89b,確認(rèn)號為246817a2(實(shí)際上是請求數(shù)據(jù)的起始序號加1,也表示下一個(gè)希望接收的數(shù)據(jù)的起始位置),標(biāo)志位0*0010指示ACK標(biāo)志為1說明確認(rèn)號有效、SYN仍然為1。圖2-16效勞端響應(yīng)數(shù)據(jù)包客戶端連接確認(rèn)在T

18、CP連接建立的最后階段如圖2-17,客戶端對承受到的效勞器相應(yīng)進(jìn)展確認(rèn),到此為止建立完整的TCP連接,開場全雙工模式的數(shù)據(jù)傳輸過程。圖2-17客戶端確認(rèn)數(shù)據(jù)包在確認(rèn)階段,數(shù)據(jù)包由客戶端.226發(fā)送至效勞端0,TCP中的序列號為246815a2(即上次效勞器響應(yīng)報(bào)文確實(shí)認(rèn)號),報(bào)文段中的本次確認(rèn)號為73 ff 17 ff(即上次的序列號加1)表示客戶端下一次希望從主機(jī)接收的數(shù)據(jù)的起始位置;標(biāo)志位O*0010指示ACK標(biāo)志為1說明確認(rèn)號有效,SYN置為0表示連接建立完畢。通過上述利用Ethereal對TCP連接過程的三個(gè)數(shù)據(jù)包的分析,可以看出TCP/IP協(xié)議的Three-way handshaki

19、ng過程如下:第一步,客戶端發(fā)出連接請求,TCP數(shù)據(jù)為:SEQ=24 68 15 a2,ACKNUM=00 00 00 00,SYN=1,ACK=0。第二步,效勞端確認(rèn)可以連接,TCP數(shù)據(jù)為:SEQ=ef 84 c8 9b,ACKNUM=24 68 15 a2,SYN=1,ACK=1。第三步,客戶端建立連接,TCP數(shù)據(jù)為:SEQ=24 68 15 a2,ACKNUM=ef84c89b,SYN=0,ACK=1。TCP/IP協(xié)議是一個(gè)協(xié)議族,包含大小上百個(gè)協(xié)議和標(biāo)準(zhǔn)。通過以上對TCP連接過程的分析,只是提出了使用Ethereal進(jìn)展協(xié)議分析的思路和方法,使用Ethereal也可方便地對其它協(xié)議進(jìn)展

20、分析,例如分析HTTP協(xié)議的客戶端請求與效勞器應(yīng)答過程及它們的頭部格式,分析ICMP協(xié)議的錯(cuò)誤報(bào)告和信息反應(yīng)機(jī)制等,具體分析方法與上面的分析相似,這里不再贅述4。圖2-17客戶端確認(rèn)數(shù)據(jù)包3用Visual C設(shè)計(jì)一個(gè)簡單的數(shù)據(jù)包捕獲和分析軟件3.1Visual C+簡介Visual C即VC,微軟公司出品的高級可視化計(jì)算機(jī)程序開發(fā)工具。他提供了一套開發(fā)環(huán)境:Visual Studio,Visual Studio本身包括一個(gè)文本編輯器、資源編輯器、工程編譯工具、一個(gè)增量連接器、源代碼瀏覽器、集成調(diào)試工具,以及一套聯(lián)機(jī)文檔,借助這套工具,用戶可以隨心所欲地開發(fā)出各種功能的應(yīng)用軟件以及借助OpenG

21、L和Direct*技術(shù)開發(fā)游戲軟件。Visual C+可以識別C/C+并編譯,支持MFC類庫,并提供了一系列模板,常用的MFCAppWizard(E*E/DLL),MFC Active*ControlWizard,Win32Application,Win32ConsoleApplication,ATLAppWizard。這種可視化編程環(huán)境可以令程序員花更多精力在程序功能的實(shí)現(xiàn)上,而不是底層的建立上,這就大大加快了程序開發(fā)速度和效率,這也是Visual C+一個(gè)顯著的特點(diǎn)。利用Visual C+編譯出的程序空間小,運(yùn)行快,比其他的編譯工具編譯出的軟件占據(jù)較多優(yōu)勢?,F(xiàn)在常用的版本有Visual C

22、+ 6.0/.Net/20055。3.2WinPcap簡介WinPcap是一個(gè)在Windows操作系統(tǒng)下的免費(fèi)、公開的用于直接訪問網(wǎng)絡(luò)的開發(fā)工具包編程API。大多數(shù)Windows網(wǎng)絡(luò)應(yīng)用程序都是通過Winsock APIWindows套接口這類高級編程接口訪問網(wǎng)絡(luò)的。這種方法允許在網(wǎng)絡(luò)上進(jìn)展簡單的數(shù)據(jù)傳送,因?yàn)椴僮飨到y(tǒng)的TCP/IP協(xié)議棧實(shí)現(xiàn)軟件會(huì)處理底層細(xì)節(jié)協(xié)議操作、流程重組等等,并提供一個(gè)類似于讀寫文件的函數(shù)接口。然而,有時(shí)候簡便方法并不能滿足實(shí)際需要。有些程序希望繞過TCP/IP協(xié)議棧,直接處理底層網(wǎng)絡(luò)中的通信數(shù)據(jù),它們需要對網(wǎng)絡(luò)進(jìn)展底層進(jìn)展直接訪問,即在沒有類似協(xié)議棧TCP/IP協(xié)議棧

23、的實(shí)體介入條件下對網(wǎng)絡(luò)進(jìn)展原始訪問?;赪insock API編程,應(yīng)用程序是通過調(diào)用操作系統(tǒng)提供的編程接口訪問TCP/IP協(xié)議棧實(shí)現(xiàn)網(wǎng)絡(luò)通信的。基于WinPcap編程,網(wǎng)絡(luò)程序?qū)嶋H上是繞開操作系統(tǒng)的TCP/IP協(xié)議棧直接通過底層網(wǎng)絡(luò)發(fā)送數(shù)據(jù),因此網(wǎng)絡(luò)程序可以實(shí)現(xiàn)一些更低級、更靈活的功能6。3.3建立工程在VC+ 6.0下創(chuàng)立一個(gè)單文檔的MFC應(yīng)用程序,工程名:Sniffer如圖3-1-圖3-2-圖3-3。圖3-1建立工程圖3-2選中單文檔圖3-3自動(dòng)生成的類列表到./devel.htm下載WinPca.zip,然后解壓,解壓縮就可以看見Includelib;在Project-Settings

24、標(biāo)簽欄中選擇C/C+,在Preprocessor definitions的輸入框里添加WPCAP;再選擇Link,在Object/library modules的輸入框里添加wpcap.lib 。然后再設(shè)置VC+環(huán)境變量:選擇Tools-options-Directories的include里面參加下載的winpcap開發(fā)包解壓以后的include文件選擇Tools-options-Directories的lib里面參加下載的winpcap開發(fā)包解壓以后的lib文件夾7。3.4進(jìn)展界面的設(shè)計(jì)工程建好了,下面進(jìn)展界面的設(shè)計(jì):首先,對菜單欄進(jìn)展修改,去掉原來單文檔所自帶的文件、編輯菜單項(xiàng)選擇項(xiàng),保

25、存查看和幫助,新建文件,下面有開場抓包ID_FILE_START、停頓抓包ID_FILE_STOP、退出ID_APP_E*IT三個(gè)菜單項(xiàng)選擇項(xiàng)。再建適配器菜單,下面有選擇適配器ID_ADP_CHOOSE選項(xiàng),并對每個(gè)新建的選項(xiàng)進(jìn)展注釋說明。如圖3-4:圖3-4 菜單欄然后,翻開Sniffer.rc文件,對工具欄進(jìn)展修改。自做了一個(gè)工具欄圖片Toolbar1.bmp來代替原來工程的Toolbar.bmp,然后將多余的復(fù)制粘貼等工具按鈕信息刪除掉,回到界面處,再對每個(gè)按鈕圖標(biāo)進(jìn)展ID設(shè)置。如圖:,從左向右依次是:開場抓包、停頓抓包、選擇適配器、幫助圖標(biāo)按鈕。最后,新建一個(gè)選擇適配器的根本對話框,I

26、D標(biāo)識為IDD_ADP_DIALOG,雙擊此對話框新建一個(gè)類:CAdpterDlg。在此根本對話框上拖入一個(gè)Tree Contrl控件和List Contrl控件,對控件屬性界面進(jìn)展調(diào)整,翻開類向?qū)В瑢ree Contrl成員變量設(shè)置為:m_treeCtrl,List Contrl成員變量設(shè)置為m_listCtrl。如圖3-5:圖3-5 選擇適配器對話框3.5程序設(shè)計(jì)思想本程序中,主要有四種類型的類,主控類:CMainFrame,視圖類:CCapPackView、CProTreeView,對話框類:CAdpterDlg以及報(bào)文類。圖3-6為整體的類之間的調(diào)用流程圖。圖3-6總體類調(diào)用流程圖C

27、MainFrame,是用于主控的類,它起到分區(qū)、處理消息、傳遞消息的功能。將用戶區(qū)分為兩個(gè)視圖,點(diǎn)擊菜單里的按鈕,觸發(fā)翻開適配器對話框或者開場抓包、停頓抓包的動(dòng)作。圖3-7為CMainFrame類中方法調(diào)用流程圖。表3-1 CMainFrame類說明為CMainFrame函數(shù)成員的說明。表3-1 CMainFrame類說明CMainFrame類父類CFrameWnd類成員函數(shù)參數(shù)功能OnCreateClient()LPCREATESTRUCT lpcs, CCreateConte*t* pConte*t將用戶區(qū)分為左右兩個(gè)視圖ProTreeView、CapPackViewOnAdpChoose

28、()消息處理函數(shù)無為適配器對話框初始化值,即點(diǎn)擊選中適配器按鈕彈出適配器對話框OnFileStart()消息處理函數(shù)無設(shè)置抓包狀態(tài),釋放所有包,清空內(nèi)容,啟動(dòng)收包線程,開場捕獲包。OnFileStop()消息處理函數(shù)無停頓抓包OnUpdateFileStart()消息處理函數(shù)CCmdUI* pCmdUI當(dāng)在捕獲包時(shí),禁用抓包按鈕OnUpdateFileStop()消息處理函數(shù)CCmdUI* pCmdUI當(dāng)停頓捕獲包時(shí),禁用停頓按鈕成員變量類型含義*PackViewCCapPackView顯示所有抓到的包的簡要信息*ProTreeViewCProTreeView顯示選中的包的具體信息,用解析樹表

29、達(dá)*alldevspcap_if_t適配器鏈表*devpcap_if_t適配器鏈表isStartbool是否開場抓包isStopbool是否停頓抓包圖3-7 CMainFrame類中方法調(diào)用流程圖CAdpterDlg:對話框類,此對話框分為兩局部:樹形控件和list控件。當(dāng)對話框被觸發(fā)后,樹形控件顯示了本機(jī)所有的適配器列表,雙擊選中網(wǎng)卡,list控件顯示其名稱、描述、子網(wǎng)掩碼、IP地址等信息。點(diǎn)擊確定按鈕即綁定了此網(wǎng)卡,注意虛擬網(wǎng)卡是不能被綁定的。表3-2為類CAdpterDlg的成員函數(shù)及成員變量的說明。CAdpterDlg類中函數(shù)調(diào)用流程圖如圖3-8所示。表3-2 CAdpterDlg類說

30、明CAdpterDlg類父類CDialog類成員函數(shù)參數(shù)功能OnInitDialog()公有無初始化樹形控件,設(shè)置list控件,讀取適配器并將適配器列表顯示在樹形控件中。當(dāng)網(wǎng)卡綁定以后再次翻開此對話框,直接顯示其信息。續(xù)表3-2:OnClickAdpTree()消息處理函數(shù)NMHDR*pNMHDR, LRESULT* pResult當(dāng)雙擊選中網(wǎng)卡時(shí),找到選中的網(wǎng)卡,設(shè)置list控件,并顯示網(wǎng)卡名稱、描述等信息。OnOK()消息處理函數(shù)無對選中的網(wǎng)卡進(jìn)展判斷,不可以選虛擬網(wǎng)卡也不可不選。OnCancel()消息處理函數(shù)無關(guān)閉對話框成員變量類型含義*devpcap_if_t適配器鏈表*alldev

31、spcap_if_t適配器鏈表errbufPCAP_ERRBUF_SIZEchar存儲(chǔ)錯(cuò)誤信息的字符串圖3-8 CAdpterDlg類中函數(shù)調(diào)用流程圖CCapPackView,視圖類,主要功能是實(shí)現(xiàn)接收從類MainFrm傳遞過來的消息和報(bào)文,將數(shù)據(jù)包的頭部及數(shù)據(jù)包的數(shù)據(jù)內(nèi)容分別保存在CArray數(shù)組中,然后調(diào)用報(bào)文類IPGram、 ARPGram、RARPGram中的函數(shù),將數(shù)據(jù)包簡要信息顯示于界面。表3-3為CCapPackView的成員函數(shù)及成員變量的說明。圖3-9為其類中方法調(diào)用流程圖。表3-3 CCapPackView類說明CCapPackView類父類CListView類成員函數(shù)參數(shù)

32、功能OnInitialUpdate()公有無設(shè)置CapPackView視圖的視圖風(fēng)格,設(shè)置其列信息。OnPacketReceive()消息處理函數(shù)pcap_pkthdr*pkt_header,constu_char*pkt_data顯示所有抓到的包的簡要信息OnItemchanged()消息處理函數(shù)NMHDR* pNMHDR, LRESULT* pResult當(dāng)點(diǎn)擊列表中*行信息,將向ProTreeView發(fā)送消息,并傳遞報(bào)文信息。成員變量類型含義inde*int序號totalmemint收到的報(bào)文占用總字節(jié)數(shù)timeint流逝的秒數(shù)deltaint一秒內(nèi)收到的字節(jié)數(shù)圖3-9 CCapPack

33、View類中函數(shù)調(diào)用流程圖CProTreeView,視圖類,主要功能是接收來自于CapPackView的消息,調(diào)用消息處理函數(shù)OnPacketSelect(),在顯示數(shù)據(jù)前清空列表及捕獲的數(shù)據(jù)包。對傳遞過來的報(bào)文頭部和內(nèi)容進(jìn)展分析,調(diào)用報(bào)文類IPGram、 ARPGram、RARPGram中的函數(shù)將具體信息顯示于樹形列表中。表3-4為CProTreeView的成員函數(shù)及成員變量的說明。表3-4 CProTreeView類說明CProTreeView類父類CTreeView類成員函數(shù)參數(shù)功能OnInitialUpdate()無設(shè)置ProTreeView視圖的視圖風(fēng)格,解析樹。OnPacketSe

34、lect()消息處理函數(shù)pcap_pkthdr*pkt_header,constu_char*pkt_data報(bào)文頭部和內(nèi)容指針以樹形構(gòu)造顯示選中的包的具體信息。OnClick()NMHDR* pNMHDR, LRESULT* pResult無成員變量類型含義*ipIPGram指向IP報(bào)文的指針*etherEtherHead指向以太幀的指針*arpint指向ARP報(bào)文的指針*rarpint指向RARP報(bào)文的指針3.5程序設(shè)計(jì)對菜單中的按鈕項(xiàng)分別建立類向?qū)?、增加函?shù),如選擇適配器的消息映射關(guān)系為ON_MAND(ID_ADP_CHOOSE, OnAdpChoose),開場抓包的消息映射關(guān)系為ON_

35、MAND(ID_FILE_START, OnFileStart);停頓抓包的消息映射關(guān)系為ON_MAND(ID_FILE_STOP, OnFileStop)以及菜單項(xiàng)是否禁用的菜單項(xiàng)的狀態(tài)的響應(yīng)消息映射關(guān)系。這些都是在CMainFrame類里面定義或聲明的,CMainFrame作為一個(gè)主控類,當(dāng)操作時(shí),其調(diào)用其他的對話框類、視圖類,然后再調(diào)用報(bào)文類。網(wǎng)卡的綁定,為ID_ADP_CHOOSE選擇適配器建立類向?qū)?,新建函?shù):OnAdpChoose(),翻開適配器對話框,并對網(wǎng)卡鏈表進(jìn)展傳遞。具體代碼如下:void CMainFrame:OnAdpChoose() CAdpterDlg adp;/為

36、適配器對話框初始化值adp.mainFrm=this;adp.alldevs=this-alldevs;adp.dev=this-dev;if(adp.DoModal()=IDOK)/將適配器信息返回this-alldevs=adp.alldevs;this-dev=adp.dev;適配器對話框的數(shù)據(jù)初始化:在類向?qū)е袨轭怌AdpterDlg添加WM_INITDIALOG消息,并添加默認(rèn)函數(shù):OnInitDialog,點(diǎn)擊Edit Code對函數(shù)進(jìn)展編輯。Pcap 提供cap_findAlldevs() 這個(gè)函數(shù)來實(shí)現(xiàn)些功能,返回一個(gè)pcap_if 構(gòu)造的鏈表,鏈表的每項(xiàng)內(nèi)容都含有全面的網(wǎng)卡信

37、息,網(wǎng)卡名稱和網(wǎng)卡描述,特別是pcap_findalldevs()這個(gè)函數(shù)返回的每個(gè)pcap_if 構(gòu)造體都同包含一個(gè)pcap_addr 構(gòu)造的列表,它包含:一個(gè)地址列表,一個(gè)掩碼列表,一個(gè)播送地址列表和一個(gè)目的地址列表。為Tree Contrl 建立類向?qū)?,增加OnClickAdpTree(),實(shí)現(xiàn)雙擊網(wǎng)卡,在List Contrl中顯示網(wǎng)卡具體信息,要注意的是顯示網(wǎng)卡詳細(xì)信息時(shí),調(diào)用DeleteAllItems()刪除原來內(nèi)容。捕獲包并顯示數(shù)據(jù)包的簡要信息規(guī)劃捕獲包和分析數(shù)據(jù)包的界面,我準(zhǔn)備將視圖分為左右兩局部,左邊為一個(gè)ListView,右邊為一個(gè)TreeView。所以新建兩個(gè)類CapP

38、ackView(繼承CListView)、ProTreeView繼承CTreeView。CapPackView負(fù)責(zé)顯示所有抓到的包的簡要信息,ProTreeView負(fù)責(zé)顯示選中的包的具體信息。在主窗口按下開場抓包按鈕時(shí),啟動(dòng)捕獲包線程ReceivePacket,調(diào)用pcap_open_live(dev-name,65536,1,1000,errbuf)翻開網(wǎng)卡,在這里第三個(gè)參數(shù)設(shè)置為1代表將適配器設(shè)置為混雜模式,捕獲所有流經(jīng)此適配器的數(shù)據(jù)包。網(wǎng)卡一旦翻開,就可以調(diào)用pcap_loop()進(jìn)展數(shù)據(jù)的捕獲。每次捕獲到數(shù)據(jù)包時(shí),libpcap都會(huì)自動(dòng)調(diào)用回調(diào)函數(shù)pcap_handle,在回調(diào)函數(shù)里,

39、PostMessage向CapPackView發(fā)送消息,通知CapPackView處理收到的包。在這里,使用的是自定義消息來實(shí)現(xiàn)的,即首先自定義消息#define WM_MESSAGE_PACKET_RECEIVE WM_USER+1,類CCapPackView頭文件中聲明消息的數(shù)據(jù)包處理函數(shù):af*_msg void OnPacketReceive(const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)。CapPackView收到消息,調(diào)用OnPacketReceive將將所捕獲包的內(nèi)容復(fù)制下來,并保存到CArray數(shù)組中,

40、然后對包的類型進(jìn)展判斷,當(dāng)為IP數(shù)據(jù)包時(shí),調(diào)用類IPGram中的函數(shù)GetSrcAddr()獲取IP數(shù)據(jù)包的源IP地址,GetDestAddr()獲取IP數(shù)據(jù)包的目的IP地址,ip.GetService()得到IP數(shù)據(jù)包的協(xié)議類型,將這些信息及數(shù)據(jù)包的長度等顯示到界面。類似的,如果數(shù)據(jù)包為ARP或RARP類型,則相應(yīng)的調(diào)用類ARPGram、RARPGram中的GetSrcPrtAddr()、GetDestPrtAddr(),GetSrcPrtAddr()、GetDestPrtAddr()等函數(shù),并將信息逐行顯示于界面。選中CapPackView中的*條信息,將數(shù)據(jù)包的具體信息顯示于ProTre

41、eView中。定義響應(yīng)操作的消息#define WM_MESSAGE_PACKET_SELECT WM_USER+2,在類CProTreeView頭文件中聲明消息的處理函數(shù):af*_msg void OnPacketSelect(const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);在類CCpPackView中,調(diào)用PostMessage通知ProTreeView刷新為新選中的報(bào)文內(nèi)容。類CProTreeView接收到消息后,調(diào)用OnPacketSelect(),對數(shù)據(jù)包進(jìn)展分析,首先解析以太幀,調(diào)用類EtherHead中的

42、函數(shù)GetMacDestAddr()獲取目的MAC地址、GetMacSrcAddr()獲取源MAC地址。然后根據(jù)數(shù)據(jù)包類型的不同,調(diào)用IP數(shù)據(jù)包、ARP數(shù)據(jù)包、RARP數(shù)據(jù)包處理類IPGram、 ARPGram、RARPGram中的函數(shù),逐行插入數(shù)據(jù)包的具體信息。需要停頓抓包時(shí),點(diǎn)擊菜單項(xiàng)或圖標(biāo)按鈕停頓抓包。只需要添加消息處理函數(shù)OnFileStop(),設(shè)置一下開場抓包或停頓抓包狀態(tài)。完善程序。對一些可能出現(xiàn)的情況進(jìn)展錯(cuò)誤處理,如選擇網(wǎng)卡時(shí),抓包是時(shí)按鈕狀態(tài)是否禁用等等。到此,根本上完成了程序所需要的所有功能。8圖3-10 類向?qū)гO(shè)置變量3.6程序使用說明點(diǎn)擊菜單欄適配器下的選擇適配器菜單按

43、鈕,或工具欄中的適配器選項(xiàng)進(jìn)展適配器的綁定,如圖3-11。圖3-11 選擇適配器菜單項(xiàng)雙擊選中檢測的網(wǎng)卡,下方出現(xiàn)該網(wǎng)卡信息,按OK即完成網(wǎng)卡綁定。不能選虛擬網(wǎng)卡,即 沒有IP地址的網(wǎng)卡。如圖3-12。圖3-12 網(wǎng)卡綁定菜單文件開場抓包或工具欄按下,開場抓包。然后程序開場抓包,每一行為一個(gè)報(bào)文,左邊視圖中簡要顯示了每個(gè)報(bào)文的,源、目的IP地址,長度,類型信息。如圖3-13所示。圖3-13 數(shù)據(jù)包簡要信息選中一報(bào)文,則出現(xiàn)下列圖3-14。圖3-14 具體信息顯示TCP、UDP、ICMP報(bào)文解析樹展示,如圖3-15所示。圖3-15IP報(bào)文具體信息顯示ARP或RARP報(bào)文解析樹,如圖3-16所示。

44、圖3-16ARP數(shù)據(jù)包具體信息顯示4出現(xiàn)的問題與解決方法在用Ethereal捕獲數(shù)據(jù)包時(shí),沒有選擇我的IP.226進(jìn)展數(shù)據(jù)包捕獲的按鈕,導(dǎo)致一直沒有捕獲到任何的數(shù)據(jù)包如圖4-1。這是當(dāng)然的,因?yàn)闆]有選擇針對那個(gè)IP進(jìn)展捕獲,根本沒有源IP,當(dāng)然沒有數(shù)據(jù)包,這使我的設(shè)計(jì)剛開場就頻頻出錯(cuò)。后來查閱資料時(shí),發(fā)了這一個(gè)錯(cuò)誤,改正后立即可以捕獲數(shù)據(jù)包。所發(fā)生的錯(cuò)誤如圖4-2。圖4-1數(shù)據(jù)包捕獲窗口圖4-2出現(xiàn)的提示錯(cuò)誤信息5完畢語經(jīng)過兩周的課程設(shè)計(jì),剛開場時(shí)還認(rèn)為兩周時(shí)間還是很長,有足夠的時(shí)間完成這個(gè)設(shè)計(jì),想不到一眨眼間,兩周的時(shí)間就這樣匆匆過去了?,F(xiàn)在感覺到時(shí)間過得真快,從一開場對Ethereal這個(gè)

45、抓包軟件沒有任何根底的,現(xiàn)在已能對這個(gè)軟件所捕獲的數(shù)據(jù)包進(jìn)展簡單的分析,以及怎么樣設(shè)置這個(gè)軟件的參數(shù)。在用Visual C編程的這一步中,實(shí)在花了我的不少時(shí)間,這個(gè)我認(rèn)為是在我這個(gè)設(shè)計(jì)中最難的一步,雖然在網(wǎng)上能找到相關(guān)程序,但所找到的那些程序都根本上有一兩處錯(cuò)誤,而對于我這個(gè)只有一點(diǎn)Visual C根底的來說無疑是一個(gè)天大的麻煩。但是,經(jīng)過這兩周的努力,還是能改正了這些錯(cuò)誤,而且在同學(xué)的幫助下,終于把這個(gè)程序給做出來了。經(jīng)過這一次的設(shè)計(jì),這對以后的工作需要提供了很大的幫助。最后,我得感謝一下在這次課程設(shè)計(jì)中幫助過我的同學(xué),還有在設(shè)計(jì)過程中給教師帶來了諸多麻煩,很感謝您這么細(xì)心的為我講導(dǎo)。我想,

46、如果這次課程我不可能按時(shí)完成。這是我的第一次課程設(shè)計(jì) ,其中許多缺乏,還請教師給與批平、指正。參考文獻(xiàn)1 baike.baidu./view/69012.htmfr=ala0_12Craig Zacker.TCP/IP網(wǎng)絡(luò)管理.:中國水利水電,1998.93謝希仁.計(jì)算機(jī)網(wǎng)絡(luò).:電子工業(yè),2008.14黃筱燕.基于Ethereal的網(wǎng)絡(luò)協(xié)議分析.熱帶農(nóng)業(yè)工程第33卷第1期5baike.baidu./view/739888.html6baike.baidu./view/696423.htmfr=ala0_17周靄如、林偉健.C+程序設(shè)計(jì)根底.:電子工業(yè),2006.38*青.C#編程思想與實(shí)踐.:冶金工業(yè),2002.8附錄:附錄1網(wǎng)卡的綁定void CMainFrame:OnAdpChoose() CAdpterDlg adp;/為適配器對話框初始化值adp.mainFrm=this;adp.alldevs=this-alldevs;adp.dev=this-dev;if(adp.DoModal()=IDOK)/將適配器信息返回this-alldevs=adp.alldevs;this-dev=adp.dev;附錄2報(bào)文類IPGram:IP報(bào)文class IPGramintversion;/IP版本int IHL;/IP報(bào)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論