Linux C ++如何以编程方式获取LAN上所有适配器的MAC地址

如何在我的(小型)本地networking上使用C或C ++ PROGRAM (无命令行)来获取MAC地址(如果IP地址是“免费”的话,我也会使用它们)。 这是一个embedded式的Busybox Linux,所以我需要一个简单的答案,希望不需要移植一些库。 我没有libnet或libpcap。 如果DHCP主机,arpcaching似乎从不包含任何东西,但不包含MAC。

Solutions Collecting From Web of "Linux C ++如何以编程方式获取LAN上所有适配器的MAC地址"

完整的源代码

打开/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); 

这是直接从BusyBox的arp实现,在BusyBox 1.21.0 tarball的 busybox-1_21_0/networking/arp.c目录中。 请特别arp_show()函数。

如果你害怕C:

命令arp -a应该给你你想要的,MAC地址和IP地址。

要获取子网上的所有MAC地址,可以尝试

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