标签:net ifconf 前台 mac ifreq str struct include close
Linux 下 可以使用ioctl()函数以及结构体 struct ifreq和结构体struct ifconf来获取网络接口的各种信息。
如图,有br0和br1两个接口,当前需要获取br1的ip地址(当然其他接口信息如mac、子网掩码等都可以),方法如下:
具体过程是先通过ictol获取本地的所有接口信息,存放到ifconf结构中,再从其中取出每个ifreq表示的ip信息(一般每个网卡对应一个IP地址,如:”eth0…、eth1…”)。
头文件:
1 #include <arpa/inet.h> 2 #include <net/if.h> 3 #include <sys/ioctl.h> 4 #include <sys/socket.h>
代码:
1 static int cmc_lanGetBr1IpAddr(const char *ifName, char *ipAddr, UINT32 addrLen) 2 { 3 int ret = -1; 4 struct ifreq ifr; 5 struct sockaddr_in *sin; 6 int sock; 7 8 printf("ifname:%s", ifr.ifr_name); 9 sock = socket(AF_INET, SOCK_DGRAM, 0); 10 UTIL_STRNCPY(ifr.ifr_name, ifName, sizeof(ifr.ifr_name)); 11 12 if (0 > (ret = ioctl(sock, SIOCGIFADDR, &ifr))) 13 { 14 printf("ioctl get SIOCGIFADDR failed!!"); 15 return -1; 16 } 17 close(sock); 18 19 sin = (struct sockaddr_in *)&(ifr.ifr_addr); 20 if (NULL == inet_ntoa(sin->sin_addr)) 21 { 22 return -1; 23 } 24 UTIL_STRNCPY(ipAddr, inet_ntoa(sin->sin_addr), addrLen); 25 26 return ret; 27 }
获取成功存入数据库并给前台:
标签:net ifconf 前台 mac ifreq str struct include close
原文地址:https://www.cnblogs.com/xuqiushuo/p/10246612.html