以下内容來自于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是實體的廣播位址

是我的MAC位址; 08 06 表示ARP協定;00 01表示以太網
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的最小值