c - 带有 getifaddrs 的 MAC 地址

标签 c interface ip mac-address

有没有办法通过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/

相关文章:

c# - 在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口(interface)

php - 如何创建一个由其他接口(interface)组成的接口(interface)?

c# - Cast List<object> 和 Cast IEnumerable<object> 有什么区别

C语言编程 "Access violation writing location 0x00000000."

c - 在 get_line 实现中,如何允许用户移动光标?

c - 如何使用 C 与 COM 对象交互?

c++ - PfCreateInterface 返回错误 120(未实现)

c - 摆脱编译一些语句集

php - 如何使用 PHP 检查 ip 是否已存在于 MySQL 中?

tomcat - 通过域名访问tomcat部署的应用程序(aws)(www.mydomain.com)