Mac OS X: горячая отправка запросов arp в C++
Я новичок в программировании на Mac. Я хочу всегда гарантировать, что все сетевые интерфейсы, управляемые моей программой, имеют MAC-адрес для GW в кэше ARP. Для этого я хочу программно отправить запрос ARP в GW, если я обнаружу, что его MAC-адрес отсутствует.
Похоже, что в Mac OS X нет поддержки необработанных сокетов в семействе адресов и протоколе AF_PACKET/PF_PACKET. Есть ли другой способ сделать это в C++? Например, есть ли API, который можно использовать для отправки запроса ARP?
1 ответ
Если вам нужно убедиться, что у каждого хоста есть правильная запись ARP, связанная со шлюзом по умолчанию, вы можете установить статическую запись ARP. Статическая запись ARP навсегда остается в таблице ARP, поэтому вам не нужно периодически отправлять запрос ARP.
arp -s "IP_GW" "MAC_GW" -i "УСТРОЙСТВО, КОТОРОЕ ВЫ ХОТИТЕ УСТАНОВИТЬ, EG: en0"
В любом случае вы можете отправить ARP-запрос, используя библиотеку C "libnet" (доступно также для Windows и Linux). Это библиотека более низкого уровня, вам нужно обрабатывать пакеты на уровне байтов и их заголовки. Для создания запроса ARP вы должны использовать:
libnet_autobuild_arp () libnet_autobuild_ethernet ()
Здесь вы можете найти учебник по libnet: https://repolinux.wordpress.com/2011/09/18/libnet-1-1-tutorial/