linux系统下获取本地IP地址方法

[cpp]  view plain copy
  1. #include <arpa/inet.h>  
  2. #include <sys/socket.h>  
  3. #include <netdb.h>  
  4. #include <ifaddrs.h>  
  5. #include <stdio.h>  
  6. #include <stdlib.h>  
  7. #include <unistd.h>  
  8.   
  9. int main(int argc, char *argv[])  
  10. {  
  11.     struct ifaddrs *ifaddr, *ifa;  
  12.     int family, s;  
  13.     char host[NI_MAXHOST];  
  14.   
  15.     if (getifaddrs(&ifaddr) == -1) {  
  16.         perror("getifaddrs");  
  17.         exit(EXIT_FAILURE);  
  18.     }  
  19.   
  20.     /* Walk through linked list, maintaining head pointer so we 
  21.      *               can free list later */  
  22.   
  23.     for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {  
  24.         if (ifa->ifa_addr == NULL)  
  25.             continue;  
  26.   
  27.         family = ifa->ifa_addr->sa_family;  
  28.   
  29.         /* Display interface name and family (including symbolic 
  30.          *                   form of the latter for the common families) */  
  31.   
  32.         printf("%s  address family: %d%s\n",  
  33.                 ifa->ifa_name, family,  
  34.                 (family == AF_PACKET) ? " (AF_PACKET)" :  
  35.                 (family == AF_INET) ?   " (AF_INET)" :  
  36.                 (family == AF_INET6) ?  " (AF_INET6)" : "");  
  37.   
  38.         /* For an AF_INET* interface address, display the address */  
  39.   
  40.         if (family == AF_INET || family == AF_INET6) {  
  41.             s = getnameinfo(ifa->ifa_addr,  
  42.                     (family == AF_INET) ? sizeof(struct sockaddr_in) :  
  43.                     sizeof(struct sockaddr_in6),  
  44.                     host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);  
  45.             if (s != 0) {  
  46.                 printf("getnameinfo() failed: %s\n", gai_strerror(s));  
  47.                 exit(EXIT_FAILURE);  
  48.             }  
  49.             printf("\taddress: <%s>\n", host);  
  50.         }  
  51.     }  
  52.   
  53.     freeifaddrs(ifaddr);  
  54.     exit(EXIT_SUCCESS);  
  55. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值