有没有办法通过getifaddrs()
获取接口(interface)的MAC地址?
我已经有了这个,可以获取 IP 地址,但我有点错过了 MAC
。我试图在 getifaddrs()
中查找信息,但没有关于 MAC
地址
struct ifaddrs *iflist, *iface;
if (getifaddrs(&iflist) < 0)
{
perror("getifaddrs");
}
char addrp[INET6_ADDRSTRLEN];
char macp[INET6_ADDRSTRLEN];
int i=0;
for (iface = iflist; iface; iface = iface->ifa_next)
{
int af = iface->ifa_addr->sa_family;
const void *addr;
const void *mac;
switch (af)
{
case AF_INET:
addr = &((struct sockaddr_in *)iface->ifa_addr)->sin_addr;
break;
//get mac address somehow?
default:
addr = NULL;
}
if (addr)
{
if (inet_ntop(af, addr, addrp, sizeof addrp) == NULL)
{
perror("inet_ntop");
continue;
}
if (inet_ntop(af, mac, macp, sizeof macp) == NULL) // this is already for MAC add
{
perror("inet_ntop");
continue;
}
if (strcmp(addrp, "127.0.0.1") != 0)
{
strcat(tableO[i].IPaddr, addrp);
strcat(tableO[i].MACaddr, macp);
i++;
}
}
谢谢
最佳答案
getifaddrs() 已经提供了与每个接口(interface)关联的 MAC 地址。在 Linux 上,当你碰到一个家庭 == AF_PACKET that 就是 MAC 地址。在 OSX/BSD 上也是如此,但在那种情况下,系列将是 AF_LINK。
关于c - 带有 getifaddrs 的 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762766/