macos — Mac OS X: горячая отправка arp-запросов в Stack Overflow

Я новичок в программировании на 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 «УСТРОЙСТВО, КОТОРОЕ ВЫ ХОТИТЕ УСТАНОВИТЬ, E.G: 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/#introduction

0

Другие решения

Других решений пока нет …