Я пытаюсь использовать библиотеку 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, я должен заполнить эти поля. Может ли кто-нибудь дать какие-либо предложения по , как отправить один ARP-запрос с использованием pcap_sendpacket и заполнить эти поля в arphdr?