gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:11:52 26 4
gpt4 key购买 nike

我如何使用 C 或 C++ PROGRAM(无命令行)在我的(小型)本地获取 MAC 地址(如果它们是“免费的”,我也会获取 IP 地址)网络。它是一个嵌入式 Busybox Linux,所以我需要一个极简主义的答案,希望不需要移植一些库。我没有 libnet 或 libpcap。如果是 DHCP 主机,arp 缓存似乎只包含 MAC。

最佳答案

Full source here.

打开/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 tarballbusybox-1_21_0/networking/arp.c 目录中。请特别注意 arp_show() 函数。

如果你害怕 C:

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

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

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

关于c++ - Linux C++ 如何以编程方式获取 LAN 上所有适配器的 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21031755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com