1. 程式人生 > >Linux下獲取網絡接口ip地址

Linux下獲取網絡接口ip地址

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地址