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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、存時間字段常用的的英文縮寫是TTL(Time ToLive) ,表明是數(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ù)報。(9)協(xié)議 占 8 位,協(xié)議字段指出此數(shù)據(jù)報攜帶的數(shù)據(jù)是使用何種協(xié)議,以便使目的主機的 IP 層知道應(yīng)將數(shù)據(jù)部分上交給哪個處理過程。(10)首部檢驗和 占 16 位。這個字段只檢驗

8、數(shù)據(jù)報的首部,但不包括數(shù)據(jù)部分。這是因為數(shù)據(jù)報每經(jīng)過一個路由器, 路由器都要重新計算一下首部檢驗和(一些字段,如生存時間、標(biāo)志、片偏移等都可能發(fā)生變化)。不檢驗數(shù)據(jù)部分可減少計算的工作量。(11)源 IP 地址占 32 位。表示發(fā)送數(shù)據(jù)報的源主機的IP 地址(12)目的 IP 地址占 32 位。本實驗的 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 對網(wǎng)絡(luò)數(shù)據(jù)包進行抓取。 winpcap 是為 windows 開發(fā)環(huán)境提供的庫函數(shù),而 libpcap 則是為 Linux 開發(fā)環(huán)境提供

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

11、部指針,根據(jù)報頭信息可以獲得源IP、目的 IP、上層協(xié)議、頭部長度、總長度等信息。四、實驗編程思路在本次實驗編程中使用winpcap 捕獲 IP 數(shù)據(jù)包的過程如下:首先獲取網(wǎng)絡(luò)設(shè)備的列表,這一步驟通過函數(shù) pcap_lookupdev()來實現(xiàn),第二步是用函數(shù) pcap_open_live()打開找到的網(wǎng)卡設(shè)備。 pcap_open_live()中有一個參數(shù)為超時返回的間隔, 通常設(shè)為 500ms即可。第三步是用 pcap_compile()編譯抓包的過濾規(guī)則。第四步用 pcap_compile()來編譯抓包的過濾規(guī)則,最后 pcap_loop() 開 始 抓 包 。 最 后 用 函 數(shù) ip_protool_packet_callback 以 及 函 數(shù)ethernet_protocol_packet_callback來輸出抓包后分析的首部信息。五、程序運行結(jié)果及分析本次實驗一共抓取 5 個數(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論