天天看點

WinPcap使用小結(一)

以下内容來自于http://hi.baidu.com/lewvan/home

winpcap(windows packet capture)是windows平台下一個免費,公共的網絡通路系統。

要使用WinPcap,需要:Winpcap程式員開發包和Winpcap驅動安裝包

ARP包被封裝在以太網資料幀裡,我所用的以太網環境是Ethernet II即DIX 2.0,是Xerox與DEC、Intel在1982年制定的以太網标準幀格式,Cisco名稱為:ARPA。一個這樣的以太網資料幀由以下幾部分組成:

ff ff ff ff ff ff是實體的廣播位址

WinPcap使用小結(一)

是我的MAC位址; 08 06 表示ARP協定;00 01表示以太網

WinPcap使用小結(一)
WinPcap使用小結(一)

1)前導字元,在每種格式的以太網幀的開始處都有64比特(8位元組)的前導字元,其中,前7個位元組稱為前同步碼(Preamble),内容是16進制數 0xAA,最後1位元組為幀起始标志符0xAB,它辨別着以太網幀的開始。前導字元的作用是使接收節點進行同步并做好接收資料幀的準備。

以太網傳輸層(并不是使用者需要通路的):

2)目标MAC,共6位元組,表示該資料幀被區域網路中哪台主機接收。

3)源MAC,共6位元組,表示該資料幀發出方的MAC。

4)類型,共2位元組,辨別出以太網幀所攜帶的上層資料類型,ether_type$ADDRESS_RESOLUTION  其中:

          1536 XEROX NS IDP

          2048 Internet 協定 (IP)

2049 X.752050NBS

2051 ECMA

2053 X.25第3層

          2054 ARP    (0x0806)

2055 XNS

4096 伯克利追蹤者

21000 BBS Simnet

24577 DEC MOP 轉儲/裝載

24578 DEC MOP 遠端控制台

24579 DEC 網 IV 段

24580 DEC LAT

24582 DEC

32773 HP 探示器

32821 RARP

32823 Apple Talk

32824 DEC 區域網路橋

如果使用Winpcap抓ARP包,那麼抓到的包中這兩位元組應該都是0x0806即十進制2054,表該幀承載一個ARP包,Winpcap就以這兩個自己來是别一個包屬于那種包(如果捕TCP或者UDP包,那麼這兩個位元組應該是2048,因為TCP和UDP等等很多協定都屬于IP族的協定)。

以太網包資料:

5)資料,長度為46-1500位元組,資料包的内容。對于ARP包,它應該是:

a)硬體位址類型,2位元組,為1時表示以太網,為6表示令牌環網格式等等。

b)協定位址類型,2位元組,同以太網幀的各種取值情況,因為ARP一般負責MAC和IP位址間的轉換,是以這兩個位元組一般固定取0x0800。

c)硬體位址長度,1位元組,表MAC位址的長度,一般取6.

d)協定位址長度,1位元組,表協定位址的長度,這跟b)中指定的協定類型有關,ip協定位址為4位元組,是以一般也固定取4.

e)操作碼,2位元組,表示該ARP包的用意,為1時表示已知IP位址查詢MAC,如上圖中第一個封包,

                                                  為2時表示應答一個IP位址對應的MAC,上圖第二個封包。

f)發送者硬體位址,長度由c)指定

g)發送者協定位址,長度由d)指定

h)目的方硬體位址,長度由c)指定

i)目的方協定位址,長度由d)指定

6)驗證碼,是4個位元組的幀校驗序列(Frame Check Sequence,FCS),采用32位CRC循環備援校驗對從"目标MAC位址"字段到"資料"字段的資料進行校驗。

如果用Winpcap抓取ARP包,隻能抓到從2)、3)、4)、5)的内容。用Winpcap抓到長度為42位元組的包,小于6+6+46的最小值