我很难在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上获取以太网接口信息时遇到问题?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)