Linux C ++ Как программно получить MAC-адрес для всех адаптеров в локальной сети

Как я могу использовать C или C ++ ПРОГРАММА (без командной строки), чтобы получить MAC-адреса (я также возьму IP-адреса, если они «свободны») в моей (маленькой) локальной сети. Это встроенный Busybox Linux, поэтому мне нужен минималистичный ответ, который, надеюсь, не требует портирования какой-либо библиотеки. У меня нет libnet или libpcap. Кажется, что кеш arp никогда не содержит ничего, кроме MAC, если это DHCP-хост.

5

Решение

Полный источник здесь.

открыто /proc/net/arp, затем прочитайте каждую строку следующим образом:

char line[500]; // Read with fgets().
char ip_address[500]; // Obviously more space than necessary, just illustrating here.
int hw_type;
int flags;
char mac_address[500];
char mask[500];
char device[500];

FILE *fp = xfopen("/proc/net/arp", "r");
fgets(line, sizeof(line), fp);    // Skip the first line (column headers).
while(fgets(line, sizeof(line), fp))
{
// Read the data.
sscanf(line, "%s 0x%x 0x%x %s %s %s\n",
ip_address,
&hw_type,
&flags,
mac_address,
mask,
device);

// Do stuff with it.
}

fclose(fp);

Это было взято прямо из реализации arp BusyBox в busybox-1_21_0/networking/arp.c каталог Тарбол BusyBox 1.21.0. Посмотрите на arp_show() функция в частности.

Если вы боитесь C:

Команда arp -a должен дать вам то, что вы хотите, как MAC-адреса, так и IP-адреса.

Чтобы получить все MAC-адреса в подсети, вы можете попробовать

nmap -n -sP <subnet>
arp -a | grep -v incomplete
9

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

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