協(xié)議解析器程序winpcap資料_第1頁
協(xié)議解析器程序winpcap資料_第2頁
協(xié)議解析器程序winpcap資料_第3頁
協(xié)議解析器程序winpcap資料_第4頁
協(xié)議解析器程序winpcap資料_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)四編寫協(xié)議解析器程序一、 實(shí)驗(yàn)要求及目的使用 libpcap/winpcap 進(jìn)行網(wǎng)絡(luò)抓包,并解析網(wǎng)絡(luò)數(shù)據(jù)包的各層首部字段。通過編寫程序,捕獲一段時(shí)間內(nèi)以本機(jī)為源地址或目的地址的 IP 數(shù)據(jù)包,統(tǒng)計(jì) IP 數(shù)據(jù)包的信息,解析首部字段,幫助加深對(duì) IP 協(xié)議的工作原理和工作過程的認(rèn)識(shí)以及掌握 winpcap 抓包原理。二、實(shí)驗(yàn)運(yùn)行環(huán)境本實(shí)驗(yàn)是是用 winpcap 進(jìn)行網(wǎng)絡(luò)抓包,基于 windows 系統(tǒng),下載 WpdPack 4.1.2 安裝包,在 Visio stdio 2012 上配置 winpcap 抓包環(huán)境,再編寫 C+代碼實(shí)現(xiàn)網(wǎng)絡(luò)抓包。三、 實(shí)驗(yàn)原理TCP/IP 協(xié)議族的分層結(jié)構(gòu)包

2、括應(yīng)用層, 傳輸層,互聯(lián)網(wǎng)絡(luò)層和主機(jī) -網(wǎng)絡(luò)層,其結(jié)構(gòu)如圖 1 所示 :應(yīng)用層Telnet、 TFP、SMTPDNS、 TFTP、SNMP傳輸層TCPUDP互聯(lián)網(wǎng)絡(luò)層IP主機(jī) -網(wǎng)絡(luò)層Ethernet,Token Ring,X.25,SLIP,PPP圖 1 TCP/IP 協(xié)議族的分層結(jié)構(gòu)其中 IP 協(xié)議是保證以太網(wǎng)正常運(yùn)行的最重要的協(xié)議之一,只要用于負(fù)責(zé)IP尋址,路由選擇和 IP 數(shù)據(jù)報(bào)的分割與組裝。 IP 協(xié)議是直接位于數(shù)據(jù)鏈路層之上,負(fù)責(zé)將源主機(jī)的報(bào)文分組發(fā)送到目的主機(jī)。 IP 協(xié)議是一種不可靠,無連接的數(shù)據(jù)報(bào)傳送服務(wù)協(xié)議, 它提供的是一種 “盡力而為 ”的服務(wù)。 為了向傳輸層屏蔽的通信子

3、網(wǎng)的差異, IP 協(xié)議制訂了統(tǒng)一的 IP 數(shù)據(jù)報(bào)格式。IP 數(shù)據(jù)報(bào)的長度是可變的,它分為報(bào)頭和數(shù)據(jù)兩個(gè)部分?;镜?0B.選項(xiàng)字段的長度范圍是 040B,所以 IP 數(shù)據(jù)報(bào)報(bào)頭的長度是范圍是IP 報(bào)頭是20-60B。IPV4 IP 數(shù)據(jù)報(bào)的結(jié)構(gòu)如圖2 所示:圖 2 IP 數(shù)據(jù)包格式IP 首部封裝具體解釋如下:(1)版本 占 4 位,是指 IP 協(xié)議的版本。通信雙方使用的 IP 協(xié)議版本必須一致。目前廣泛使用的 IP 協(xié)議版本號(hào)為 4(即 IPv4 )(2)首部長度 占 4 位,可表示的最大十進(jìn)制數(shù)值是 15。這個(gè)字段所表示數(shù)的單位是 32 位字長( 1 個(gè) 32 位字長是 4 字節(jié)),因此,當(dāng)

4、 IP 的首部長度為 1111 時(shí)(即十進(jìn)制的 15),首部長度就達(dá)到 60 字節(jié)。當(dāng) IP 分組的首部長度不是 4 字節(jié)的整數(shù)倍時(shí), 必須利用最后的填充字段加以填充。 因此數(shù)據(jù)部分永遠(yuǎn)在 4 字節(jié)的整數(shù)倍開始,這樣在實(shí)現(xiàn) IP 協(xié)議時(shí)較為方便。首部長度限制為 60 字節(jié)的缺點(diǎn)是有時(shí)可能不夠用。 但這樣做是希望用戶盡量減少開銷。 最常用的首部長度就是 20 字節(jié)(即首部長度為 0101),這時(shí)不使用任何選項(xiàng)。(3)區(qū)分服務(wù) 占 8 位,用來獲得更好的服務(wù)。這個(gè)字段在舊標(biāo)準(zhǔn)中叫做服務(wù)類型,但實(shí)際上一直沒有被使用過。 1998 年 IETF 把這個(gè)字段改名為區(qū)分服務(wù) DS(Differentiat

5、ed Services)。只有在使用區(qū)分服務(wù)時(shí),這個(gè)字段才起作用。(4)總長度總長度指首部和數(shù)據(jù)之和的長度,單位為字節(jié)。總長度字段為 16 位,因此數(shù)據(jù)報(bào)的最大長度為216-1=65535 字節(jié)。(5)標(biāo)識(shí) (identification) 占 16 位。 IP 軟件在存儲(chǔ)器中維持一個(gè)計(jì)數(shù)器,每產(chǎn)生一個(gè)數(shù)據(jù)報(bào),計(jì)數(shù)器就加 1,并將此值賦給標(biāo)識(shí)字段。但這個(gè) “標(biāo)識(shí) ”并不是序號(hào),因?yàn)?IP 是無連接服務(wù),數(shù)據(jù)報(bào)不存在按序接收的問題。當(dāng)數(shù)據(jù)報(bào)由于長度超過網(wǎng)絡(luò)的 MTU 而必須分片時(shí),這個(gè)標(biāo)識(shí)字段的值就被復(fù)制到所有的數(shù)據(jù)報(bào)的標(biāo)識(shí)字段中。相同的標(biāo)識(shí)字段的值使分片后的各數(shù)據(jù)報(bào)片最后能正確地重裝成為原來的

6、數(shù)據(jù)報(bào)。(6)標(biāo)志 (flag)占 3 位,但目前只有 2 位有意義。標(biāo)志字段中的最低位記為 MF(More Fragment)。MF=1 即表示后面 “還有分片 ” 的數(shù)據(jù)報(bào)。 MF=0 表示這已是若干數(shù)據(jù)報(bào)片中的最后一個(gè)。標(biāo)志字段中間的一位記為 DF(Dont Fragment),意思是 “不能分片 ”。只有當(dāng) DF=0 時(shí)才允許分片。(7)片偏移占 13 位。片偏移指出:較長的分組在分片后,某片在原分組中的相對(duì)位置。也就是說,相對(duì)用戶數(shù)據(jù)字段的起點(diǎn),該片從何處開始。片偏移以 8 個(gè)字節(jié)為偏移單位。這就是說,每個(gè)分片的長度一定是 8 字節(jié)( 64 位)的整數(shù)倍。(8)生存時(shí)間占 8 位,生

7、存時(shí)間字段常用的的英文縮寫是TTL(Time ToLive) ,表明是數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中的壽命。由發(fā)出數(shù)據(jù)報(bào)的源點(diǎn)設(shè)置這個(gè)字段。其目的是防止無法交付的數(shù)據(jù)報(bào)無限制地在因特網(wǎng)中兜圈子, 因而白白消耗網(wǎng)絡(luò)資源。最初的設(shè)計(jì)是以秒作為 TTL 的單位。每經(jīng)過一個(gè)路由器時(shí),就把 TTL 減去數(shù)據(jù)報(bào)在路由器消耗掉的一段時(shí)間。 若數(shù)據(jù)報(bào)在路由器消耗的時(shí)間小于 1 秒,就把 TTL 值減 1。當(dāng) TTL 值為 0 時(shí),就丟棄這個(gè)數(shù)據(jù)報(bào)。(9)協(xié)議 占 8 位,協(xié)議字段指出此數(shù)據(jù)報(bào)攜帶的數(shù)據(jù)是使用何種協(xié)議,以便使目的主機(jī)的 IP 層知道應(yīng)將數(shù)據(jù)部分上交給哪個(gè)處理過程。(10)首部檢驗(yàn)和 占 16 位。這個(gè)字段只檢驗(yàn)

8、數(shù)據(jù)報(bào)的首部,但不包括數(shù)據(jù)部分。這是因?yàn)閿?shù)據(jù)報(bào)每經(jīng)過一個(gè)路由器, 路由器都要重新計(jì)算一下首部檢驗(yàn)和(一些字段,如生存時(shí)間、標(biāo)志、片偏移等都可能發(fā)生變化)。不檢驗(yàn)數(shù)據(jù)部分可減少計(jì)算的工作量。(11)源 IP 地址占 32 位。表示發(fā)送數(shù)據(jù)報(bào)的源主機(jī)的IP 地址(12)目的 IP 地址占 32 位。本實(shí)驗(yàn)的 IP 數(shù)據(jù)包首部定義如下:struct ip_header#if defined(WORDS_BIENDIAN)u_int8_tip_version:4,ip_header_length:4;#elseu_int8_tip_header_length:4,ip_version:4;#endif

9、u_int8_tip_tos;u_int16_tip_length;u_int16_tip_id;u_int16_tip_off;u_int8_tip_ttl;u_int8_tip_protocol;u_int16_tip_checksum;struct in_addr ip_souce_address;struct in_addr ip_destination_address;捕獲 IP 數(shù)據(jù)包,一般借助 winpcap 或 libpcap 提供的 API 對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行抓取。 winpcap 是為 windows 開發(fā)環(huán)境提供的庫函數(shù),而 libpcap 則是為 Linux 開發(fā)環(huán)境提供

10、的庫函數(shù)。它們都是一個(gè)強(qiáng)大的網(wǎng)絡(luò)開發(fā)庫,可以實(shí)現(xiàn)許多功能,如獲取可用的網(wǎng)絡(luò)適配器、獲取指定適配器信息(比如名稱和描述信息)、捕獲指定網(wǎng)卡的數(shù)據(jù)封包、 發(fā)送數(shù)據(jù)封包、 過濾捕獲的包以獲取特定包等。 兩者提供的接口基本一致, 只是某些函數(shù)名略有不同。 在使用前必須將 winpcap 或 libpcap 安裝在系統(tǒng)上,在使用時(shí)必須在工程中加入對(duì)應(yīng)的開發(fā)包并在程序中聲明。在抓取數(shù)據(jù)包后, 對(duì)其進(jìn)行分析, 要參考數(shù)據(jù)包的格式, 所以數(shù)據(jù)包的格式是相當(dāng)重要的。在抓包時(shí),首先是獲得鏈路層的幀,根據(jù)幀頭可以獲得源 mac 和目的 mac 以及上層的協(xié)議。根據(jù)幀頭的長度將指針往后移,然后可以獲得IP 數(shù)據(jù)報(bào)的頭

11、部指針,根據(jù)報(bào)頭信息可以獲得源IP、目的 IP、上層協(xié)議、頭部長度、總長度等信息。四、實(shí)驗(yàn)編程思路在本次實(shí)驗(yàn)編程中使用winpcap 捕獲 IP 數(shù)據(jù)包的過程如下:首先獲取網(wǎng)絡(luò)設(shè)備的列表,這一步驟通過函數(shù) pcap_lookupdev()來實(shí)現(xiàn),第二步是用函數(shù) pcap_open_live()打開找到的網(wǎng)卡設(shè)備。 pcap_open_live()中有一個(gè)參數(shù)為超時(shí)返回的間隔, 通常設(shè)為 500ms即可。第三步是用 pcap_compile()編譯抓包的過濾規(guī)則。第四步用 pcap_compile()來編譯抓包的過濾規(guī)則,最后 pcap_loop() 開 始 抓 包 。 最 后 用 函 數(shù) ip_protool_packet_callback 以 及 函 數(shù)ethernet_protocol_packet_callback來輸出抓包后分析的首部信息。五、程序運(yùn)行結(jié)果及分析本次實(shí)驗(yàn)一共抓取 5 個(gè)數(shù)據(jù)包,分析出了數(shù)據(jù)包的長度, MAC 幀源地址,目的地址以及的分析出來上層協(xié)議是 IP 協(xié)議。解析 IP 數(shù)據(jù)包的首部,輸

溫馨提示

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

評(píng)論

0/150

提交評(píng)論