




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)包捕獲與分析摘要 本課程設(shè)計(jì)通過(guò)Ethereal 捕捉實(shí)時(shí)網(wǎng)絡(luò)數(shù)據(jù)包,并根據(jù)網(wǎng)絡(luò)協(xié)議分析流程對(duì)數(shù)據(jù)包在 TCP/IP 各層協(xié)議中進(jìn)行實(shí)際解包分析,讓網(wǎng)絡(luò)研究人員對(duì)數(shù)據(jù)包的認(rèn)識(shí)上升到一個(gè)感性的層面,為網(wǎng)絡(luò)協(xié)議分析提供技術(shù)手段。最后根據(jù)Ethereal的工作原理,用VisualC 編寫一個(gè)簡(jiǎn)單的數(shù)據(jù)包捕獲與分析軟件。關(guān)鍵詞協(xié)議分析;Ethereal;數(shù)據(jù)包;Visual C + +1 引言本課程設(shè)計(jì)通過(guò)技術(shù)手段捕獲數(shù)據(jù)包并加以分析,追蹤數(shù)據(jù)包在TCP/IP 各層的封裝過(guò)程,對(duì)于網(wǎng)絡(luò)協(xié)議的研究具有重要的意義。Ethereal 是當(dāng)前較為流行的圖形用戶接口的抓包軟件,是一個(gè)可以用來(lái)監(jiān)視所有在網(wǎng)絡(luò)上
2、被傳送的包,并分析其內(nèi)容的程序。它通常被用來(lái)檢查網(wǎng)絡(luò)工作情況,或是用來(lái)發(fā)現(xiàn)網(wǎng)絡(luò)程序的 bugs。通過(guò)ethereal對(duì)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)。課程設(shè)計(jì)的內(nèi)容(1)掌握數(shù)據(jù)包捕獲和數(shù)據(jù)包分析的相關(guān)知識(shí);掌握Ethreal軟件的安裝、啟動(dòng),并熟悉用它進(jìn)行局域網(wǎng)數(shù)據(jù)捕獲和分析的功能;(3)設(shè)計(jì)一個(gè)簡(jiǎn)單的數(shù)據(jù)包捕獲與分析軟件。課程設(shè)計(jì)的要求(1)按要求編寫課程設(shè)計(jì)報(bào)告書,能正確闡述設(shè)計(jì)結(jié)果。(2)通過(guò)
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ì)的全部?jī)?nèi)容。課程設(shè)計(jì)平臺(tái)Windows XP; Ethereal; Visual C 2 使用 Ethereal 對(duì)數(shù)據(jù)包進(jìn)行捕獲與分析軟件 Ethereal 簡(jiǎn)介Ethereal (Ethereal: A Network Packet Sniffing Tool) 是當(dāng)前較為流行的一種計(jì)算機(jī)網(wǎng)絡(luò)調(diào)試和嗅探。Ethereal 基本類似于,但Ethereal 還具有設(shè)計(jì)完美的和眾多分類信息及過(guò)濾選項(xiàng)。用戶通過(guò) Ethereal,同時(shí)將插
4、入混合模式,可以查看到網(wǎng)絡(luò)中發(fā)送的所有通信流量。Ethereal 應(yīng)用于故障修復(fù)、分析、軟件和協(xié)議開發(fā)以及教育領(lǐng)域。它具有用戶對(duì)協(xié)議分析器所期望的所有標(biāo)準(zhǔn)特征,并具有其它同類產(chǎn)品所不具備的有關(guān)特征。 Ethereal 主要具有以下特征:在實(shí)時(shí)時(shí)間內(nèi),從網(wǎng)絡(luò)連接處捕獲數(shù)據(jù),或者從被捕獲文件處讀取數(shù)據(jù);Ethereal 可以讀取從tcpdump( libpcap ) 、 網(wǎng)絡(luò)通用嗅探器(被壓縮和未被壓縮)、SnifferTM 專業(yè)版、NetXrayTM 、 Sun snoop 和atmsnoop、 Shomiti/Finisar 測(cè)試員、的 iptrace 、 的網(wǎng)絡(luò)監(jiān)控器、的LANalyzer
5、、 RADCOM 的 WAN/LAN 分析器、ISDN4BSD 項(xiàng)目的 HP-UX nettl 和 i4btrace、 Cisco 安全 IDS iplog 和 pppd 日 志( pppdump 格式)、WildPacket 的 EtherPeek/TokenPeek/AiroPeek 或者可視網(wǎng)絡(luò)的可視UpTime 處捕獲的文件。此外Ethereal 也能從 Lucent/Ascend WAN路由器和Toshiba ISDN 路由器中讀取跟蹤報(bào)告,還能從的 TCPIP 讀取輸出文本和 DBS Etherwatch 。從、上的和回路接口(至少是某些系統(tǒng),不是所有系統(tǒng)都支持這些類型)上讀取實(shí)時(shí)
6、數(shù)據(jù)。通過(guò) 或 模式 tethereal 程序,可以訪問(wèn)被捕獲的網(wǎng)絡(luò)數(shù)據(jù)。通過(guò)editcap 程序的命令行交換機(jī),有計(jì)劃地編輯或修改被捕獲文件。當(dāng)前 602 協(xié)議可被分割。輸出文件可以被保存或打印為純文本或PostScript 格式。 通過(guò)顯示過(guò)濾器精確顯示數(shù)據(jù)。顯示過(guò)濾器也可以選擇性地用于高亮區(qū)和顏色包摘要信息。所有或部分被捕獲的網(wǎng)絡(luò)跟蹤報(bào)告都會(huì)保存到磁盤中1。利用 Ethereal 捕獲數(shù)據(jù)包安裝完Ethereal后,單擊Capture下的Option菜單,打開捕獲選項(xiàng)對(duì)話框,設(shè)置好 捕捉接口( inteface) 和過(guò)濾器(capture filter), 設(shè)置混雜模式(promiscu
7、ous mod* 選項(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ù)包的基本信息:編號(hào)(代表收到數(shù)據(jù)包的次序) 、時(shí)間、源地址、目的地址協(xié)議名稱以及關(guān)于此數(shù)據(jù)包的摘要信息;中間欄的包細(xì)節(jié)窗口以樹形顯示當(dāng)前數(shù)據(jù)包在各協(xié)議層的封裝細(xì)節(jié),包括首部和數(shù)
8、據(jù);下欄的包字節(jié)窗口則以十六進(jìn)制和ASCII 碼顯示被截獲數(shù)據(jù)包的詳細(xì)內(nèi)容左邊一欄顯示偏移量,中間一欄顯示十六進(jìn)制數(shù)值,右邊一欄顯示解碼后相對(duì)應(yīng)的字符(控制字符示為1 個(gè)點(diǎn)) 。圖 2-1Ethereal 的設(shè)置圖 2-2 捕獲狀態(tài)窗口圖 2-3 捕獲的數(shù)據(jù)包利用 Ethereal 對(duì)捕獲數(shù)據(jù)包進(jìn)行分析Ethereal是當(dāng)前較為流行的一種計(jì)算機(jī)網(wǎng)絡(luò)調(diào)試和數(shù)據(jù)包嗅探軟件,是一個(gè)可以用來(lái)監(jiān)視所有在網(wǎng)絡(luò)上被傳送的包,并分析其內(nèi)容的程序。它通常被用來(lái)檢查網(wǎng)絡(luò)工作情況,或是用來(lái)發(fā)現(xiàn)網(wǎng)絡(luò)程序的 bug"通過(guò)ethereal對(duì)TCP、UDP、SMTP、telnet和FTP等常 用協(xié)議進(jìn)行分析,非常
9、有助于網(wǎng)絡(luò)故障修復(fù)、分析以及軟件和協(xié)議開發(fā)。( 1) ARP 協(xié)議分析ARP, 全稱 Address Resolution Protocol, 地址解析協(xié)1 它工作在數(shù)據(jù)鏈路層,在本層和硬件接口聯(lián)系,同時(shí)對(duì)上壓供服務(wù)。TP 數(shù)據(jù)包常通過(guò)以太網(wǎng)發(fā)送,以太網(wǎng)設(shè)備并不識(shí)別321P地址,它們是以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 地址是如何獲得的呢它就是通過(guò)地址解析協(xié)議獲得的。圖2-4 就是對(duì) ARP 捕獲的狀態(tài)窗口。ARP 協(xié)議用于將網(wǎng)絡(luò)中的IP 地址解析
10、為的硬件地址(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 信息里面可以看到對(duì)于這個(gè)數(shù)據(jù)包的簡(jiǎn)要的說(shuō)明 :Who has .140 Tell .250。這個(gè) info 表明 ARP 協(xié)議的主要功能:通過(guò) IP 地址找對(duì)方的MAC 地址。針對(duì)ARP 協(xié)議還可以具體分析它的結(jié)構(gòu),以往的教學(xué)中學(xué)生只能從課本上看到ARP 協(xié)議的圖,如圖6,學(xué)生容易產(chǎn)生疑問(wèn),難道真的是這樣嗎在我們可以通過(guò)
11、分析抓取到的數(shù)據(jù)包來(lái)切切實(shí)實(shí)地看一下它的結(jié)構(gòu)到底是什.么樣的,對(duì)照?qǐng)D2-6 看一下到底是不是一致。隨便找一個(gè)ARP 的數(shù)據(jù)包,將其展開可以看到圖 2-7 的結(jié)構(gòu),對(duì)比圖2-7 中框部分與圖2-6 中框部分,可以發(fā)現(xiàn)兩者是一致的,通過(guò)對(duì)比學(xué)生就會(huì)對(duì)ARP 的結(jié)構(gòu)有更深刻的認(rèn)識(shí)2。圖 2-4ARP 捕獲狀態(tài)窗口圖 2-5 捕獲的 ARP 數(shù)據(jù)包圖 2-6ARP 報(bào)文結(jié)構(gòu)2-7ARP 結(jié)構(gòu)(2)利用Ethereal分析TCP/IP機(jī)制TCP 是一種面向連接的、可靠的傳輸層協(xié)議,TCP 數(shù)據(jù)傳(只有連接建立后才可進(jìn)行數(shù)據(jù)傳輸)需要通過(guò)在客戶端和服端建立特定的虛電路連接來(lái)完成,該過(guò)程通常被稱為“三次握手
12、 ”, 如圖2-8,即發(fā)送方先發(fā)送連接請(qǐng)求,然后接受方進(jìn)行連接確認(rèn),最發(fā)送方對(duì)接受方再次進(jìn)確認(rèn)。下面就以Ethereal捕獲的建TCP連接過(guò)程的三個(gè)數(shù)據(jù)包為例對(duì)TCP/IP 協(xié)議進(jìn)行分析。圖 2-8 三次握手示意圖為了能夠捕獲到 三次握手”過(guò)程中的數(shù)據(jù)包,首先讓Ethereal一直保持捕獲狀態(tài)(圖 2-9),因?yàn)槭峭ㄟ^(guò)TCP來(lái)建立的,可以將Ethereal的過(guò)濾器設(shè)置為TCP,此時(shí)只捕獲所 有經(jīng)過(guò)計(jì)算機(jī)的TCP 協(xié)議數(shù)據(jù)包。圖 2-9TCP 捕獲狀態(tài)窗口圖 2-10 TCP 捕獲狀態(tài)窗口在捕獲狀態(tài)窗口中點(diǎn)擊停止,將所有捕獲到的數(shù)抿所顯示出圖2-11 顯示的就是所捕到的前4 個(gè)數(shù)據(jù)包,從圖中可以
13、看到1 號(hào)數(shù)據(jù)包一3 號(hào)數(shù)據(jù)包是連接建立過(guò)程中的數(shù)據(jù)包, 4 號(hào)數(shù)據(jù)包是在連接建立完成以后開始傳輸數(shù)據(jù)。圖 2-11 捕獲到的數(shù)據(jù)包客戶端發(fā)送連接請(qǐng)求,從圖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ù)包的接收方 MAC (MAC的結(jié)構(gòu)如圖2-14)地址為00:03:0f:00:0c:4b發(fā)起連 接請(qǐng)求的源主機(jī)MAC為00:03:0d:a4:0f:72,在幀中封裝白協(xié)議類型type值為0x0800
14、,即IP 數(shù)據(jù)報(bào)。在網(wǎng)絡(luò)層,加工的主要數(shù)據(jù)對(duì)象是IP 數(shù)據(jù)報(bào)。 IP 協(xié)議是 TCPIP 協(xié)議族中的核心協(xié)議之一,所有的TCP、 UDP、 ICMP 數(shù)據(jù)都以IP 數(shù)據(jù)報(bào)格式傳輸。從以上請(qǐng)求數(shù)據(jù)包的IP首部可以看出,止匕IP數(shù)據(jù)報(bào)版本號(hào)(version)為4(即這個(gè)數(shù)據(jù)報(bào)為IPv4),首部(head length)為20bytes服務(wù)類型(services巾eld)為0x00,數(shù)據(jù)報(bào)總長(zhǎng)(total length,即IP首部+數(shù)據(jù) 載荷)為48,標(biāo)識(shí)(identfication)為0x96b53標(biāo)志(flags)為0x04表示報(bào)文不分段,段偏移 (fragmen offset)為0,生存時(shí)間(
15、time to live)為128,數(shù)據(jù)報(bào)中上層協(xié)議類型 protocol值為 0x06 (即TCP報(bào)文段),頭部校驗(yàn)和0x1206表示正確,請(qǐng)求主機(jī)的IP地址為26, 目的主機(jī)的IP地址為。在運(yùn)輸層,主要數(shù)據(jù)對(duì)象是TCP報(bào)文。在以上的TCP報(bào)文段中, 描述了請(qǐng)求方源端口號(hào)(source port)為1615;目的端口號(hào)(destination port)為80,其中0是HTTP協(xié)議的保留端口號(hào)廿列號(hào)SEQ是本次連接的初始序號(hào),因此在連接請(qǐng)求時(shí)相對(duì)初 始值是0,其實(shí)際值是24 68 15 al確認(rèn)號(hào)是00 00 00 70;頭部長(zhǎng)度(header length) 28byt
16、es; 標(biāo)志位(flags)為Ox0002,指示ACK標(biāo)志為0表明確認(rèn)號(hào)被忽略,SYN=1表示正在進(jìn)行連 接請(qǐng)求,通過(guò) SYN 和 ACK 也可以用來(lái)區(qū)分 Connection Request和 Connection Accepted, 在連接請(qǐng)求中,SYN=1 、 ACK=0, 連接響應(yīng)時(shí),SYN=1 、 ACK=1;PSH 為 0;窗口字段(windowsize才旨示發(fā)送方想要接收的最大字節(jié)數(shù)為65535校馬和(checksum)為0xf6a表明正確;最后是8bytes的選項(xiàng)字段3。比特 04816192431圖 2-12 IP 數(shù)據(jù)報(bào)首部格式比特 08162431圖 2-13 TCP 報(bào)
17、文段固定首部格式字節(jié) 66246-1054圖 2-14以太網(wǎng) V2 MAC 幀格式圖 2-15 發(fā)送方發(fā)出的連接請(qǐng)求數(shù)據(jù)包對(duì)此數(shù)據(jù)包的具體分析過(guò)程如圖2-12,在此我們僅涉及連接的過(guò)程中一些重要地方的變化:數(shù)據(jù)包由服務(wù)端發(fā)至客戶端.226。在響應(yīng)TCP 報(bào)文段中,源端口和目的端口地址相對(duì)改變,相應(yīng)數(shù)據(jù)包的起始序列號(hào)SEQ為ef 84 c8 9b確認(rèn)號(hào)為24 68 17 a2儀際上是請(qǐng)求數(shù)據(jù)的起始序號(hào)加1,也表示下一個(gè)希望接收的數(shù)據(jù)的起始位置),標(biāo)志位 0x0010 指示ACK 標(biāo)志為 1 表明確認(rèn)號(hào)有效、SYN 仍然為1。圖 2-16 服務(wù)端響應(yīng)數(shù)據(jù)包客戶端連接確認(rèn)在TCP 連接建立的最后階段
18、如圖2-17,客戶端對(duì)接受到的服務(wù)器相應(yīng)進(jìn)行確認(rèn),到此為止建立完整的TCP 連接,開始全雙工模式的數(shù)據(jù)傳輸過(guò)程。圖 2-17客戶端確認(rèn)數(shù)據(jù)包在確認(rèn)階段,數(shù)據(jù)包由客戶端.226發(fā)送至服務(wù)端,TCP中的序列號(hào)為24 68 15 a2(即上次服務(wù)器響應(yīng)報(bào)文的確認(rèn)號(hào)),報(bào)文段中的本次確認(rèn)號(hào)為73 ff 17 ff(即上次的序 列號(hào)加 1)表示客戶端下一次希望從主機(jī)接收的數(shù)據(jù)的起始位置;標(biāo)志位Ox0010 指示ACK 標(biāo)志為 1 表明確認(rèn)號(hào)有效,SYN 置為 0表示連接建立結(jié)束。通過(guò)上述利用Ethereal對(duì) TCP 連接過(guò)程的三個(gè)數(shù)據(jù)包的分析,可以看出TCP/IP 協(xié)議的 Three-way hand
19、shaking過(guò)程如下:第一步,客戶端發(fā)出連接請(qǐng)求,TCP數(shù)據(jù)為:SEQ=24 68 15 a2,ACKNUM=00 00 00 00,SYN=1,ACK=0 。 第 二 步 ,服 務(wù) 端 確 認(rèn) 可 以 連 接 ,TCP 數(shù) 據(jù) 為 :SEQ=ef 84 c8 9b,ACKNUM=24 68 15 a2,SYN=1,ACK=1 。 第三步,客戶端建立連接,TCP 數(shù)據(jù)為 :SEQ=2468 15 a2,ACKNUM=ef 84 c8 9b,SYN=0,ACK=1 。 TCP/IP 協(xié)議是一個(gè)協(xié)議族,包含大小上百個(gè)協(xié)議和標(biāo)準(zhǔn)。通過(guò)以上對(duì)TCP 連接過(guò)程的分析,只是提出了使用Ethereal 進(jìn)
20、行協(xié)議分析的思路和方法,使用 Ethereal 也可方便地對(duì)其它協(xié)議進(jìn)行分析,例如分析HTTP 協(xié)議的客戶端請(qǐng)求與服務(wù)器應(yīng)答過(guò)程及它們的頭部格式,分析 ICMP 協(xié)議的錯(cuò)誤報(bào)告和信息反饋機(jī)制等,具體分析方法與上面的分析相似,這里不再贅述4。圖 2-17 客戶端確認(rèn)數(shù)據(jù)包3 用 Visual C 設(shè)計(jì)一個(gè)簡(jiǎn)單的數(shù)據(jù)包捕獲和分析軟件Visual C+ 簡(jiǎn)介Visual C+ +即VC,微軟公司出品的高級(jí)可視化計(jì)算機(jī)程序開發(fā)工具。他提供了一套開發(fā)環(huán)境:Visual Studio , Visual Studio 本身包括一個(gè)文本編輯器、資源編輯器、工程編譯工具、一個(gè)增量連接器、源代碼瀏覽器、集成調(diào)試工
21、具,以及一套聯(lián)機(jī)文檔,借助這套工具,用戶可以隨心所欲地開發(fā)出各種功能的應(yīng)用軟件以及借助OpenGL 和 DirectX 技術(shù)開發(fā)游戲軟件。Visual C+ 可以識(shí)別C/C+ 并編譯, 支持 MFC 類庫(kù), 并提供了一系列模板,常用的 MFC AppWizard(EXE/DLL),MFCActiveXControlWizard,Win32Application,Win32ConsoleApplication,ATLCOMAppWi zard。這種可視化編程環(huán)境可以令程序員花更多精力在程序功能的實(shí)現(xiàn)上,而不是 底層的建設(shè)上,這就大大加快了程序開發(fā)速度和效率,這也是 Visual C+ 一個(gè)顯著的
22、特點(diǎn)。利用Visual C+ 編譯出的程序空間小,運(yùn)行快,比其他的編譯工具編譯出的軟件占據(jù)較多優(yōu)勢(shì)?,F(xiàn)在常用的版本有Visual C+ .Net/2005 5。簡(jiǎn)介WinPcap是一個(gè)在 Windows操作系統(tǒng)下的免費(fèi)、公開的用于直接訪問(wèn)網(wǎng)絡(luò)的開發(fā)工 具包(編程API)。大多數(shù) Windows網(wǎng)絡(luò)應(yīng)用程序都是通過(guò) Winsock API (Windows套接 口)這類高級(jí)編程接口訪問(wèn)網(wǎng)絡(luò)的。這種方法允許在網(wǎng)絡(luò)上進(jìn)行簡(jiǎn)單的數(shù)據(jù)傳送,因?yàn)椴僮飨到y(tǒng)的TCP/IP 協(xié)議棧實(shí)現(xiàn)軟件會(huì)處理底層細(xì)節(jié)(協(xié)議操作、流程重組等等),并提供一個(gè)類似于讀寫文件的函數(shù)接口。然而,有時(shí)候“簡(jiǎn)便方法 ”并不能滿足實(shí)際需要。
23、有些程序希望繞過(guò)TCP/IP 協(xié)議棧,直接處理底層網(wǎng)絡(luò)中的通信數(shù)據(jù),它們需要對(duì)網(wǎng)絡(luò)進(jìn)行底層進(jìn)行直接訪問(wèn),即在沒(méi)有類似協(xié)議棧( TCP/IP 協(xié)議棧) 的實(shí)體介入條件下對(duì)網(wǎng)絡(luò)進(jìn)行原始訪問(wèn)?;赪insock API 編程,應(yīng)用程序是通過(guò)調(diào)用操作系統(tǒng)提供的編程接口訪問(wèn) TCP/IP 協(xié)議棧實(shí)現(xiàn)網(wǎng)絡(luò)通信的?;赪inPcap 編程,網(wǎng)絡(luò)程序?qū)嶋H上是繞開操作系統(tǒng)的 TCP/IP 協(xié)議棧直接通過(guò)底層網(wǎng)絡(luò)發(fā)送數(shù)據(jù),因此網(wǎng)絡(luò)程序可以實(shí)現(xiàn)一些更低級(jí)、更靈活的功能6。建立工程在VC+下創(chuàng)建一個(gè)單文檔的 MFC應(yīng)用程序,工程名:Sniffer如圖3-1->圖3-2-> 圖 3-3。圖3-1建立工程圖3
24、-2選中單文檔圖3-3自動(dòng)生成的類列表到下載p 4.0.2,然后解壓,解壓縮就可以看見Includelib;在"Project->Settings"fe簽 欄中選擇"C/C+",在"Preprocessor definitions"的輸入框里添加"WPCAP";再選擇"Link", 在"Object/library modules"的輸入框里添加 ""。然后再設(shè)置 VC+環(huán)境變量:選擇 Tools->options->Directorie
25、s 的 include 里面力口入下載的 winpcap開發(fā)包解壓以后的 include 文件選擇Tools->options->Directories的lib里面加入下載的winpcap開發(fā)包解壓以后的 lib文件夾7。進(jìn)行界面的設(shè)計(jì)工程建好了,下面進(jìn)行界面的設(shè)計(jì):首先,對(duì)菜單欄進(jìn)行修改,去掉原來(lái)單文檔所自帶的文件”、編輯”菜單選項(xiàng),保留 查看”和 幫助”,新建 文件”,下面有 開始抓包(ID_FILE_START) ”、停止抓包 (ID_FILE_STOP) ”、退出(ID_APP_EXIT ) ”三個(gè)菜單選項(xiàng)。再建 適配器”菜單,下 面有 選擇適配器(ID_ADP_CHOOS
26、E) ”選項(xiàng),并對(duì)每個(gè)新建的選項(xiàng)進(jìn)行注釋說(shuō)明。如 圖 3-4:圖3-4菜單欄然后,打開文件,對(duì)工具欄進(jìn)行修改。自做了一個(gè)工具欄圖片來(lái)代替原來(lái)工程的, 然后將多余的復(fù)制粘貼等工具按鈕信息刪除掉,回到界面處,再對(duì)每個(gè)按鈕圖標(biāo)進(jìn)行ID 設(shè)置。如圖:叵0L割JtlO ,從左向右依次是:開始抓包、停止抓包、選擇適配 器、幫助圖標(biāo)按鈕。最后,新建一個(gè)選擇適配器的基本對(duì)話框,ID標(biāo)識(shí)為IDD_ADP_DIALOG ,雙擊此 對(duì)話框新建一個(gè)類:CAdpterDlg。在此基本對(duì)話框上拖入一個(gè) Tree Contrl控件和List Contrl控件,對(duì)控件屬性界面進(jìn)行調(diào)整,打開類向?qū)В瑢?Tree Contrl成
27、員變量設(shè)置為: m_treeCtrl, List Contrl 成員變量設(shè)置為 m_listCtrl。如圖 3-5:圖3-5選擇適配器對(duì)話框程序設(shè)計(jì)思想本程序中,主要有四種類型的類,主控類: CMainFrame視圖類:CCapPackView CProTreeView,對(duì)話框類:CAdpterDlg以及報(bào)文類。圖3-6為整體的類之間的調(diào)用流程 圖。圖3-6總體類調(diào)用流程圖CMainFrame,是用于主控的類,它起到分區(qū)、處理消息、傳遞消息的功能。將用 戶區(qū)分為兩個(gè)視圖,點(diǎn)擊菜單里的按鈕,觸發(fā)打開適配器對(duì)話框或者開始抓包、停止抓 包的動(dòng)作。圖3-7為CMainFrame類中方法調(diào)用流程圖。表
28、3-1 CMainFrame類說(shuō)明為 CMainFrame函數(shù)成員的說(shuō)明。表 3-1 CMainFrame 類說(shuō)明CMainFrame 類父類CFrameWnd 類成員函數(shù)參數(shù)功能OnCreateClient()LPCREATESTRUCTlpcs, CCreateContext* pContext將用戶區(qū)分為左右兩個(gè)視圖ProTreeView、CapPackViewOnAdpChoose()消息處理函數(shù)無(wú)為適配器對(duì)話框初始化值,即點(diǎn)擊 選中適配器按鈕彈出適配器對(duì)話框OnFileStart()消息處理函數(shù)無(wú)設(shè)置抓包狀態(tài),釋放所有包,清空 內(nèi)容,啟動(dòng)收包線程,開始捕狀包。OnFileStop()
29、消息處理函數(shù)無(wú)停止抓包OnUpdateFileStart()消息處理函數(shù)CCmdUI* pCmdUI當(dāng)在才甫獲包時(shí),禁用 抓包”按鈕OnUpdateFileStop()消息處理函數(shù)CCmdUI* pCmdUI當(dāng)停止捕獲包時(shí),禁用停止”按鈕成員變量含義*PackViewCCapPackView顯示所有抓到的包的簡(jiǎn)要信息*ProTreeViewCProTreeView顯示選中的包的具體信息,用解析樹表達(dá)*alldevspcap_if_t適配器鏈表*devpcap_if_t適配器鏈表isStartbool是含開始抓包isStopbool是否停止抓包圖3-7 CMainFrame類中方法調(diào)用流程圖CA
30、dpterDlg:對(duì)話框類,此對(duì)話框分為兩部分:樹形控件和list控件。當(dāng)對(duì)話框被觸發(fā)后,樹形控件顯示了本機(jī)所有的適配器列表,雙擊選中網(wǎng)卡,list控件顯示其名稱、描述、子網(wǎng)掩碼、IP地址等信息。點(diǎn)擊確定按鈕即綁定了此網(wǎng)卡,注意虛擬網(wǎng)卡是不能 被綁定的。表3-2為類CAdpterDlg的成員函數(shù)及成員變量的說(shuō)明。CAdpterDlg類中函數(shù)調(diào)用流程圖如圖3-8所示。表 3-2 CAdpterDlg 類說(shuō)明CAdpterDlg 類父類CDialog 類成員函數(shù)參數(shù)功能OnInitDialog()公有無(wú)初始化樹形控件,設(shè)置list控件, 讀取適配器并將適配器列表顯示 在樹形控件中。當(dāng)網(wǎng)卡綁定以后再
31、 次打開此對(duì)話框,直接顯示其信 息。續(xù)表3-2:OnClickAdpTree()消息處理函數(shù)NMHDR*pNMHDR,LRESULT* pResult當(dāng)雙擊選中網(wǎng)卡時(shí),找到選中的 網(wǎng)卡,設(shè)置list控件,并顯示網(wǎng) 卡名稱、描述等信息。OnOK()消息處理函數(shù)無(wú)對(duì)選中的網(wǎng)卡進(jìn)行判斷,不可以選虛擬網(wǎng)卡也不RJ不選。OnCancel()消息處理函數(shù)無(wú)關(guān)閉對(duì)話框成員變量含義*devpcap_if_t適配器鏈表*alldevspcap_if_t適配器鏈表errbufPCAP_ERRBUF_SIZEchar存儲(chǔ)錯(cuò)誤信息的字符串圖3-8 CAdpterDlg類中函數(shù)調(diào)用流程圖CCapPackView,視圖類
32、,主要功能是實(shí)現(xiàn)接收從類MainFrm傳遞過(guò)來(lái)的消息和報(bào)文,將數(shù)據(jù)包的頭部及數(shù)據(jù)包的數(shù)據(jù)內(nèi)容分別保存在CArray數(shù)組中,然后調(diào)用報(bào)文類IPGram、ARPGram、RARPGram中的函數(shù),將數(shù)據(jù)包簡(jiǎn)要信息顯示于界面。表 3-3為 CCapPackView的成員函數(shù)及成員變量的說(shuō)明。圖 3-9為其類中方法調(diào)用流程圖。表 3-3 CCapPackView 類說(shuō)明CCapPackView 類父類CListView 類成員函數(shù)參數(shù)功能OnInitialUpdate()公有無(wú)設(shè)置CapPackView視圖的視圖風(fēng) 格,設(shè)置具列信息。OnPacketReceive()消息處理函數(shù)pcap_pkthdr
33、*pkt_header,constu_char*pkt_data顯示所有抓到的包的簡(jiǎn)要信息OnItemchanged()消息處理函數(shù)NMHDR* pNMHDR,LRESULT* pResult當(dāng)點(diǎn)擊列表中某行信息,將向 ProTreeView發(fā)送消息,并傳遞報(bào)文 信息。成員變量含義indexint序號(hào)totalmemint收到的報(bào)文占用總字節(jié)數(shù)timeint流逝的秒數(shù)deltaint一秒內(nèi)收到的字節(jié)數(shù)圖3-9 CCapPackView類中函數(shù)調(diào)用流程圖CProTreeView,視圖類,主要功能是接收來(lái)自于 CapPackView的消息,調(diào)用消息處 理函數(shù)OnPacketSelect()在顯示數(shù)
34、據(jù)前清空列表及捕獲的數(shù)據(jù)包。對(duì)傳遞過(guò)來(lái)的報(bào)文頭 部和內(nèi)容進(jìn)行分析,調(diào)用報(bào)文類IPGram、ARPGram、RARPGram中的函數(shù)將具體信息顯示于樹形列表中。表3-4為CProTreeView的成員函數(shù)及成員變量的說(shuō)明表 3-4 CProTreeView 類說(shuō)明CProTreeView 類父類CTreeView 類成員函數(shù)參數(shù)功能OnInitialUpdate()無(wú)設(shè)置 ProTreeView視圖的視圖風(fēng)格,解析樹。OnPacketSelect()消息處理函數(shù)pcap_pkthdr*pkt_header,constu_char*pkt_data(報(bào)文頭部和內(nèi)容指 針)以樹形結(jié)構(gòu)顯示選中的包的具
35、體 信息。OnClick()NMHDR* pNMHDR,LRESULT* pResult無(wú)成員變量含義*ipIPGram指向IP報(bào)文的指針*etherEtherHead指向以太幀的指針*arpint指向ARP報(bào)文的指針*rarpint指向RARP報(bào)文的指針程序設(shè)計(jì)對(duì)菜單中的按鈕項(xiàng)分別建立類向?qū)?、增加函?shù),如選擇適配器”的消息映射關(guān)系為ON_COMMAND(ID_ADP_CHOOSE, OnAdpChoose),開始抓包”的消息映射關(guān)系為 ON_COMMAND(ID_FILE_START, OnFileStart);彳亭止抓包”的消息映射關(guān)系為 ON_COMMAND(ID_FILE_STOP,
36、OnFileStop)以及菜單項(xiàng)是否禁用的菜單項(xiàng)的狀態(tài)的響 應(yīng)消息映射關(guān)系。這些都是在 CMainFrame類里面定義或聲明的,CMainFrame作為一 個(gè)主控類,當(dāng)操作時(shí),其調(diào)用其他的對(duì)話框類、視圖類,然后再調(diào)用報(bào)文類。網(wǎng)卡的綁定,為ID_ADP_CHOOSE選擇適配器建立類向?qū)?,新建函?shù): OnAdpChoose(),打開適配器對(duì)話框,并對(duì)網(wǎng)卡鏈表進(jìn)行傳遞。具體代碼如下:void CMainFrame:OnAdpChoose() CAdpterDlg adp;26)進(jìn)行數(shù)據(jù)包捕獲的按鈕,導(dǎo)致一直沒(méi)有捕獲到任何的數(shù)據(jù)包(如圖4-1)。這是當(dāng)然的,因?yàn)闆](méi)有選擇針對(duì)那個(gè)IP進(jìn)行捕獲,根本沒(méi)有源
37、IP,當(dāng)然沒(méi)有數(shù)據(jù)包,這使我的設(shè)計(jì)剛開始就頻頻出錯(cuò)。后來(lái)查閱資料時(shí),發(fā)了這一個(gè)錯(cuò)誤,改正后立即可以捕獲數(shù)據(jù)包。所發(fā)生的錯(cuò)誤如圖4-2。圖 4-1 數(shù)據(jù)包捕獲窗口圖 4-2 出現(xiàn)的提示錯(cuò)誤信息5 結(jié)束語(yǔ)經(jīng)過(guò)兩周的課程設(shè)計(jì),剛開始時(shí)還認(rèn)為兩周時(shí)間還是很長(zhǎng),有足夠的時(shí)間完成這個(gè)設(shè)計(jì),想不到一眨眼間,兩周的時(shí)間就這樣匆匆過(guò)去了?,F(xiàn)在感覺(jué)到時(shí)間過(guò)得真快,從一開始對(duì)Ethereal這個(gè)抓包軟件沒(méi)有任何基礎(chǔ)的,現(xiàn)在已能對(duì)這個(gè)軟件所捕獲的數(shù)據(jù)包進(jìn)行簡(jiǎn)單的分析,以及怎么樣設(shè)置這個(gè)軟件的參數(shù)。在用 Visual C 編程的這一步中,實(shí)在花了我的不少時(shí)間,這個(gè)我認(rèn)為是在我這個(gè)設(shè)計(jì)中最難的一步,雖然在網(wǎng)上能找到相關(guān)程
38、序,但所找到的那些程序都基本上有一兩處錯(cuò)誤,而對(duì)于我這個(gè)只有一點(diǎn)Visual C 基礎(chǔ)的來(lái)說(shuō)無(wú)疑是一個(gè)天大的麻煩。但是,經(jīng)過(guò)這兩周的努力,還是能改正了這些錯(cuò)誤,而且在同學(xué)的幫助下,終于把這個(gè)程序給做出來(lái)了。經(jīng)過(guò)這一次的設(shè)計(jì),這對(duì)以后的工作需要提供了很大的幫助。最后,我得感謝一下在這次課程設(shè)計(jì)中幫助過(guò)我的同學(xué),還有在設(shè)計(jì)過(guò)程中給老師帶來(lái)了諸多麻煩,很感謝您這么細(xì)心的為我講導(dǎo)。我想,如果這次課程我不可能按時(shí)完成。這是我的第一次課程設(shè)計(jì),其中許多不足,還請(qǐng)老師給與批平、指正。參考文獻(xiàn)12Craig Zacker. TCP/IP 網(wǎng)絡(luò)管理.北京:中國(guó)水利水電出版社,3謝希仁.計(jì)算機(jī)網(wǎng)絡(luò).北京:電子工業(yè)
39、出版社,4黃筱燕.基于Ethereal的網(wǎng)絡(luò)協(xié)議分析.熱帶農(nóng)業(yè)工程第33卷第1期567周靄如、林偉健.C+程序設(shè)計(jì)基礎(chǔ).北京:電子工業(yè)出版社,8張青.C#®程思想與實(shí)踐.北京:冶金工業(yè)出版社,附錄:1 網(wǎng)卡的綁定void CMainFrame:OnAdpChoose()CAdpterDlg adp;/為適配器對(duì)話框初始化值=this;=this->alldevs;=this->dev;if()=IDOK)/ 將適配器信息返回this->alldevs=;this->dev=;2 報(bào)文類IPGram: IP 報(bào)文class IPGramint version; /IP 版本int IHL; /IP 報(bào)文頭長(zhǎng),包含多少個(gè)32位int servicetype; /服務(wù)類型int precedence; /優(yōu)先級(jí)bool delay; /延遲bool throughtput;/吞吐量bool reliability; /可靠性u(píng)nsigned int totallen; /IP 報(bào)文總長(zhǎng)bool DF;/是否分段,為1 表示沒(méi)有分段bool MF;/是否有進(jìn)一步分段,為1 表示有int fragoffset;/偏移量int TTL; /生命期time to liveint protocol; /協(xié)議:TCP,UDP, ICMP
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)寵物租房合同范例
- 包裝物購(gòu)銷合同范例
- 中介合同范本樣本
- 農(nóng)副產(chǎn)品馬蹄收購(gòu)合同范本
- 別墅土建付款合同范本
- 涼山校園保潔合同范本
- 人資服務(wù)合同范本
- 全款車抵押合同范本
- 公里樁合同范本
- 勞務(wù)派遣未簽合同范例
- 合同簽訂培訓(xùn)課件
- 《災(zāi)害的概述》課件
- 國(guó)產(chǎn)氟塑料流體控制件生產(chǎn)企業(yè)
- 1投影的形成和分類投影的形成投影的分類工程中常用的投影圖28課件講解
- 貨物學(xué) 課件2.1貨物的分類
- 中國(guó)糖尿病防治指南(2024版)解讀2
- 2025屆廣東省佛山一中石門中學(xué)高考臨考沖刺數(shù)學(xué)試卷含解析
- 2025年奇瑞汽車招聘筆試參考題庫(kù)含答案解析
- XX縣人民醫(yī)院信息化建設(shè)方案數(shù)字化整體規(guī)劃方案
- 2024-2025學(xué)年外研版七年級(jí)英語(yǔ)上學(xué)期期末復(fù)習(xí) 專題04 閱讀理解CD篇20篇 【考題猜想】
- 年產(chǎn)50000噸再生鋁精深加工生產(chǎn)線項(xiàng)目可行性研究報(bào)告
評(píng)論
0/150
提交評(píng)論