Linux下靠谱的获取本机IP地址的C代码实现

2019-07-13 08:54发布

原文地址:http://blog.csdn.net/langeldep/article/details/8306603 版权声明:本文为博主原创文章,未经博主允许不得转载。 [cpp] view plain copy
  1. #include         
  2. #include   
  3. #include   
  4. #include    
  5. #include    
  6. #include   
  7. #include   
  8. #include   
  9. #include   
  10. #include   
  11. #include   
  12. #include   
  13. #include   
  14. #include   
  15. #include   
  16. #include   
  17. #include   
  18. #include   
  19. #include   
  20. #include   
  21.   
  22.   
  23. int main (int argc, const char * argv[])   
  24. {  
  25.   
  26.     struct ifaddrs * ifAddrStruct=NULL;  
  27.     void * tmpAddrPtr=NULL;  
  28.   
  29.     getifaddrs(&ifAddrStruct);  
  30.   
  31.     while (ifAddrStruct!=NULL)   
  32.     {  
  33.         if (ifAddrStruct->ifa_addr->sa_family==AF_INET)  
  34.         {   // check it is IP4  
  35.             // is a valid IP4 Address  
  36.             tmpAddrPtr = &((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;  
  37.             char addressBuffer[INET_ADDRSTRLEN];  
  38.             inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);  
  39.             printf("%s IPV4 Address %s ", ifAddrStruct->ifa_name, addressBuffer);   
  40.         }  
  41.         else if (ifAddrStruct->ifa_addr->sa_family==AF_INET6)  
  42.         {   // check it is IP6  
  43.             // is a valid IP6 Address  
  44.             tmpAddrPtr=&((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;  
  45.             char addressBuffer[INET6_ADDRSTRLEN];  
  46.             inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);  
  47.             printf("%s IPV6 Address %s ", ifAddrStruct->ifa_name, addressBuffer);   
  48.         }   
  49.         ifAddrStruct = ifAddrStruct->ifa_next;  
  50.     }  
  51.     return 0;  
  52. }  

编译
gcc -g -O0 -o showip main.c   
执行 ./showip
显示如下
[root@localhost ~]# ./showip 
lo IPV4 Address 127.0.0.1
eth0 IPV4 Address 192.168.1.103
lo IPV6 Address ::
eth0 IPV6 Address 0:0:fe80::20c:29ff