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