Linux下獲取網絡接口ip地址
阿新 • • 發佈:2019-01-09
n) p地址 分享 lan pre src 數據庫 信息 方法
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 }
獲取成功存入數據庫並給前臺:
Linux下獲取網絡接口ip地址