Linux C代码 获取IP地址


Ubuntu 16.04下,可编译通过:

 1 #include <stdio.h>
 2 #include <ifaddrs.h>
 3 #include <arpa/inet.h>
 4 #include <cstring>
 5 
 6 #define MAX_LENGTH 254
 7 
 8 int main(void)  9 { 10     char ipAddr[MAX_LENGTH]; 11 
12     ipAddr[0] = '\0'; 13 
14     struct ifaddrs * ifAddrStruct = NULL; 15     void * tmpAddrPtr = NULL; 16 
17     if (getifaddrs(&ifAddrStruct) != 0) 18  { 19         //if wrong, go out!
20         printf("Somting is Wrong!\n"); 21         return -1; 22  } 23 
24     struct ifaddrs * iter = ifAddrStruct; 25 
26     while (iter != NULL) { 27         if (iter->ifa_addr->sa_family == AF_INET) { //if ip4 28             // is a valid IP4 Address
29             tmpAddrPtr = &((struct sockaddr_in *)iter->ifa_addr)->sin_addr; 30             char addressBuffer[INET_ADDRSTRLEN]; 31  inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN); 32             if (strlen(ipAddr) + strlen(addressBuffer) < MAX_LENGTH - 1) 33  { 34                 if (strlen(ipAddr) > 0) 35  { 36                      strcat(ipAddr, ";"); 37  } 38  strcat(ipAddr, addressBuffer); 39  } 40             else
41  { 42                 printf("Too many ips!\n"); 43                 break; 44  } 45  } 46         //else if (ifaddrstruct->ifa_addr->sa_family == af_inet6) { // check it is ip6
47 
48         /* deal ip6 addr */
49         // tmpaddrptr = &((struct sockaddr_in *)ifaddrstruct->ifa_addr)->sin_addr; 50         // char addressbuffer[inet6_addrstrlen]; 51         // inet_ntop(af_inet6, tmpaddrptr, addressbuffer, inet6_addrstrlen); 52 
53         //}
54         iter = iter->ifa_next; 55  } 56     //releas the struct
57  freeifaddrs(ifAddrStruct); 58 
59     printf("The ips: %s\n", ipAddr); 60 
61     return 0; 62 }

效果:

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM