11.4.8 使用SOCK_PACKET编写ARP请求程序的例子
本节利用SOCK_PACKET套接字进行ARP请求的程序设计,并给出代码的例子。
1.ARP协议数据和结构
包含以太网头部数据的ARP协议数据结构如图11.16所示。
图11.16 ARP协议的数据示意图
ARP的数据结构在头文件<linux/if_arp.h>中定义,代码如下:
struct arphdr
{
__be16 ar_hrd; /*硬件类型*/
__be16 ar_pro; /*协议类型*/
unsigned char ar_hln; /*硬件地址长度*/
unsigned char ar_pln; /*协议地址长度*/
__be16 ar_op; /*ARP操作码*/
};
对于以太网上的ARP请求包,上述成员的值如表11.6所示。
表11.6 ARP在以太网上请求包的值和含义
成 员 |
成 员 含 义 |
值 |
值 含 义 |
ar_hrd |
硬件类型 |
1 |
硬件地址为以太网接口 |
ar_pro |
协议类型 |
0x0800 |
高层协议为IP协议 |
ar_hln |