//定义一个以太网头部
typedef struct ehhdr
{
UCHAR eh_dst[6]; /* 以太网源地址 */
UCHAR eh_src[6]; /* 以太网目的地址s */
USHORT eh_type; /* 2字节以太网帧类型 对于ARP为0x0806 */
}EHHEADR, *PEHHEADR;
//28字节的ARP请求/应答
typedef struct arphdr
{
USHORT arp_hrd; /* 2字节表示硬件地址类型 ,1表示以太网地址 */
USHORT arp_pro; /* 2字节表示要映射的协议地址类型,0x0800表示IP地址 */
UCHAR arp_hln; /* 1字节硬件地址长度, 对于ARP请求应答为6 */
UCHAR arp_pln; /* 1字节协议地址长度, 对于ARP请求应答为4 */
USHORT arp_op; /* 指出始终操作类型,ARP请求为1,ARp应答2, RARP为3,RARP应答为4 */
UCHAR arp_sha[6]; /* 发送端的硬件地址(MAC) */
ULONG arp_spa; /* 发送端的协议地址 (IP)*/
UCHAR arp_tha[6]; /* 目的端的硬件地址 */
ULONG arp_tpa; /* 目的端的协议地址 */
}ARPHEADR, *PARPHEADR;
//把上面定义的两种结构封装起来
typedef struct arpPacket
{
EHHEADR ehhdr;
ARPHEADR arphdr;
} ARPPACKET, *PARPPACKET;