一、ARP:地址解析协议
先看:
C:\Documents and Settings\xiaoj>arp -a
Interface: 192.1.8.84 on Interface 0x1000003
Internet Address Physical Address Type
192.1.8.12 00-0b-cd-03-c4-27 dynamic
192.1.8.15 00-0d-9d-93-09-f5 dynamic
192.1.8.18 00-e0-18-c1-86-3d dynamic
192.1.8.26 00-80-2d-78-4f-81 dynamic
192.1.8.33 00-0b-cd-0f-a4-c5 dynamic
192.1.8.38 00-30-6e-36-5f-99 dynamic
192.1.8.86 00-0b-cd-b8-0c-ae dynamic
192.1.8.247 00-50-ba-e5-20-af dynamic
192.1.8.248 00-0d-56-19-ba-56 dynamic
第一列显示的是主机的IP地址,第二列就是主机的网卡MAC地址。
ARP协议就是提供IP地址到对应的硬件地址提供动态映射。这个过程一般是系统自动完成的。ARP发送一份ARP请求给以太网上的主机,该请求中包含目的主机的IP地址,其意思是“如果你是这个IP的拥有者,请回答你的硬件地址”。当目的主机的ARP层收到这份广播报文时,识别出这是发送端在询问它的IP地址,于是就会发送一个ARP应答,这个ARP应答包括IP地址及对应的硬件地址。
二、ARP分组格式
以太网目的地址6 | 以太网源地址6 | 帧类型2 | 硬件类型2 | 协议类型2 | 硬件地址长度 1 |
协议地址长度1 | 请求应答1 | 发送者硬件地址6 | 发送者IP地址 4 |
目的硬件地址6 | 目的IP地址4 |
先看定义:
//ARP首部
struct arphdr(
u_short ar_hrd; //硬件类型
u_short ar_pro; //协议类型
u_char ar_hln; //硬件地址长度
u_char ar_pln; //协议地址长度
u_short ar_op; // 请求还是应答
u_char arp_sha[6]; //发送者硬件地址
u_char arp_spa[4]; //发送者IP地址
u_char arp_tha[6]; //目的硬件地址
u_char arp_tpa[4]; //目的IP地址
u_char arp_zero[18]; //填充字段
};