linux – 在使用ioctlSIOCGIFADDRSIOCGIFCONF找出如何在Mac OS X上获取以太网接口信息时遇到问题?

linux – 在使用ioctlSIOCGIFADDRSIOCGIFCONF找出如何在Mac OS X上获取以太网接口信息时遇到问题?,第1张

概述您是否在使用ioctl / SIOCGIFADDR / SIOCGIFCONF了解如何在Mac OS X上获取接口信息时遇到问题? 我很难在Linux上获得能够在Mac OS X上运行的代码. 复制粘贴到main.c和gcc main.c&& ./a.out应该工作(列出所有网络接口,它们的ipv4 / 6地址,网络掩码和MAC地址,如果相关): 适用于Mac OSX和iOS iPad / iPh 您是否在使用ioctl / SIocgIFADDR / SIocgIFCONF了解如何在Mac OS X上获取接口信息时遇到问题?

我很难在Linux上获得能够在Mac OS X上运行的代码.

解决方法 复制粘贴到main.c和gcc main.c&& ./a.out应该工作(列出所有网络接口,它们的ipv4 / 6地址,网络掩码和MAC地址,如果相关):

适用于Mac OSX和iOS iPad / iPhone:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <net/if.h>#include <net/if_dl.h>#include <ifaddrs.h>#include <errno.h>int main() {  struct ifaddrs *if_addrs = NulL;  struct ifaddrs *if_addr = NulL;  voID *tmp = NulL;  char buf[INET6_ADDRSTRLEN];  if (0 == getifaddrs(&if_addrs)) {        for (if_addr = if_addrs; if_addr != NulL; if_addr = if_addr->ifa_next) {      printf("name : %s\n",if_addr->ifa_name);      // Address      if (if_addr->ifa_addr->sa_family == AF_INET) {        tmp = &((struct sockaddr_in *)if_addr->ifa_addr)->sin_addr;      } else {        tmp = &((struct sockaddr_in6 *)if_addr->ifa_addr)->sin6_addr;      }      printf("addr : %s\n",inet_ntop(if_addr->ifa_addr->sa_family,tmp,buf,sizeof(buf)));      // Mask      if (if_addr->ifa_netmask != NulL) {        if (if_addr->ifa_netmask->sa_family == AF_INET) {          tmp = &((struct sockaddr_in *)if_addr->ifa_netmask)->sin_addr;        } else {          tmp = &((struct sockaddr_in6 *)if_addr->ifa_netmask)->sin6_addr;        }        printf("mask : %s\n",inet_ntop(if_addr->ifa_netmask->sa_family,sizeof(buf)));      }      // MAC address      if (if_addr->ifa_addr != NulL && if_addr->ifa_addr->sa_family == AF_link) {        struct sockaddr_dl* sdl = (struct sockaddr_dl *)if_addr->ifa_addr;        unsigned char mac[6];        if (6 == sdl->sdl_alen) {          memcpy(mac,LLADDR(sdl),sdl->sdl_alen);          printf("mac  : %02x:%02x:%02x:%02x:%02x:%02x\n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);        }      }      printf("\n");    }    freeifaddrs(if_addrs);    if_addrs = NulL;  } else {    printf("getifaddrs() Failed with errno =  %i %s\n",errno,strerror(errno));    return -1;  }}
总结

以上是内存溢出为你收集整理的linux – 在使用ioctl / SIOCGIFADDR / SIOCGIFCONF找出如何在Mac OS X上获取以太网接口信息时遇到问题?全部内容,希望文章能够帮你解决linux – 在使用ioctl / SIOCGIFADDR / SIOCGIFCONF找出如何在Mac OS X上获取以太网接口信息时遇到问题?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1030418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存