Как отправлять ARP-ответы, используя pcap_sendpacket - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь использовать библиотеку 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?

...