我正在尝试使用pcap
库进行数据包嗅探。到目前为止,我已经能够从本地网络流量中捕获IP和ARP数据包。现在,我想将ARP请求发送到默认网关服务器。我不确定,但是我认为我必须使用pcap_sendpacket
函数。我没有得到如何构建arp请求的信息,因为当我检查arphdr
中定义的net/if_arp.h
结构时,它是这样的:
struct arphdr
{
unsigned short int ar_hrd; /* Format of hardware address. */
unsigned short int ar_pro; /* Format of protocol address. */
unsigned char ar_hln; /* Length of hardware address. */
unsigned char ar_pln; /* Length of protocol address. */
unsigned short int ar_op; /* ARP opcode (command). */
#if 0
/* Ethernet looks like this : This bit is variable sized
however... */
unsigned char __ar_sha[ETH_ALEN]; /* Sender hardware address. */
unsigned char __ar_sip[4]; /* Sender IP address. */
unsigned char __ar_tha[ETH_ALEN]; /* Target hardware address. */
unsigned char __ar_tip[4]; /* Target IP address. */
#endif
};
可以看出,硬件地址区位于#if 0..#endif
块中,这意味着已被有效注释掉。我不明白为什么要那样做。为了发送ARP请求,我必须填写这些字段。有人可以对如何使用pcap_sendpacket发送一个ARP请求并在arphdr中填写这些字段提出任何建议吗?