linux – 在使用ioctl / SIOCGIFADDR / SIOCGIFCONF找出如何在Ma
发布时间:2020-12-14 01:52:03 所属栏目:Linux 来源:网络整理
导读:您是否在使用ioctl / SIOCGIFADDR / SIOCGIFCONF了解如何在Mac OS X上获取接口信息时遇到问题? 我很难在Linux上获得能够在Mac OS X上运行的代码. 解决方法 复制粘贴到main.c和gcc main.c ./a.out应该工作(列出所有网络接口,它们的ipv4 / 6地址,网络掩码和MA
您是否在使用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 : %sn",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 : %sn",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 : %sn",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:%02xn",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 %sn",errno,strerror(errno)); return -1; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读