ARP協議的報文格式

原文地址爲: ARP協議的報文格式

結構ether_header定義了以太網幀首部;結構arphdr定義了其後的5個字段,其信息
用於在任何類型的介質上傳送ARP請求和回答;ether_arp結構除了包含arphdr結構外,
還包含源主機和目的主機的地址。

定義常量

#define EPT_IP   0x0800    /* type: IP */
#define EPT_ARP   0x0806    /* type: ARP */
#define EPT_RARP 0x8035    /* type: RARP */
#define ARP_HARDWARE 0x0001    /* Dummy type for 802.3 frames */
#define ARP_REQUEST 0x0001    /* ARP request */
#define ARP_REPLY 0x0002    /* ARP reply */

定義以太網首部
typedef struct ehhdr 
{
unsigned char eh_dst[6];   /* destination ethernet addrress */
unsigned char eh_src[6];   /* source ethernet addresss */
unsigned short eh_type;   /* ethernet pachet type */
}EHHDR, *PEHHDR;

定義以太網arp字段
typedef struct arphdr
{
//arp首部
unsigned short arp_hrd;    /* format of hardware address */
unsigned short arp_pro;    /* format of protocol address */
unsigned char arp_hln;    /* length of hardware address */
unsigned char arp_pln;    /* length of protocol address */
unsigned short arp_op;     /* ARP/RARP operation */

unsigned char arp_sha[6];    /* sender hardware address */
unsigned long arp_spa;    /* sender protocol address */
unsigned char arp_tha[6];    /* target hardware address */
unsigned long arp_tpa;    /* target protocol address */
}ARPHDR, *PARPHDR;

定義整個arp報文包,總長度42字節
typedef struct arpPacket
{
EHHDR ehhdr;
ARPHDR arphdr;
} ARPPACKET, *PARPPACKET;

ARP請求包的分析:如下所示爲一個ARP請求包

0000   ff   ff    ff    ff   ff   ff 00 0c f1 d4 d9 60 08 06 00 01 ...........`....
0010   08 00 06 04 00 01 00 0c f1 d4 d9 60 c0 a8 01 0f ...........`....
0020   00 00 00 00 00 00 c0 a8 01 02                              ..........
根據定義,頭6個字節是以太網目的地址 ff ff ff ff ff ff 這是一個廣播地址,全網下的所有終端都能接收到,緊跟着的6個字節是以太網源地址,即發送者的MAC地址( 00 0c f1 d4 d9 60 是我的MAC地址)。

幀類型0806佔兩個字節,到這裏以太網幀頭就結束了。0806指的是後面的數據是屬於arp包的。

接着分析ARP包頭。頭兩個字節是硬件類型 00 01,接着兩個字節是協議類型,即ARP使用的是IP協議代號08 00硬件地址長度和協議地址長度分別是6和4。這與ARP報文格式是對應的。後面的2個字節OP指示當前包是請求包還是應答包,對應的值分別是0x0001和0x0002。原始數據裏是00 01所以這是一個請求包,然後6個字節又是發送者MAC地址00 0c f1 d4 d9 60 ,後面4個字節是發送者IP地址c0 a8 01 0f ,轉換成點分十進制格式即192.168.1.15,這是我的IP,接下來的6個字節留空,00 00 00 00 00 00 在arp請求包裏也可以是其他數據,因爲稍後IP地址爲c0 a8 01 02 (192.168.1.2)會把自己的MAC地址填充進這6個字節中。
填充完後,arp包裏的發送者硬件地址|目標硬件地址和以太網首部的以太網目的地址|以太網源地址正好對調。最後把這個封裝好的ARP包發送出去,這樣一個來回就可以讓兩臺終端互相知道對方的IP和MAC。

ARP欺騙的3種基本方式:

1. 主機C冒充網關欺騙主機B;

2. 主機c冒充主機B欺騙網關;

3. 主機C同時欺騙主機B和網關,實現數據中轉,並監聽到所有主機B的數據。

PT下仿真如下:

 

這是使用的是Ethernet V2 MAC幀,然後封裝ARP幀。另一臺機器會返回:

這樣兩臺PC都知道ip和MAC地址了。

 


轉載請註明本文地址: ARP協議的報文格式