注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

老和山小和尚

敬天爱人

 
 
 

日志

 
 
 
 

Linux中用C语言查找本机所有接口的IP(IPv4)  

2009-06-18 17:12:55|  分类: 开发相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本程序改写自UNP2。 今天想找一个方法,如何判断某个IP是本机IP,好像linux没有现成的函数可以调 用,只好找了这样一个方法凑活用一下。好像还可以用getifaddrs来获取。


 1 #include <stdio.h>
  2 #include <sys/types.h>
  3 #include <sys/socket.h>
  4 #include <sys/ioctl.h>
  5 #include <arpa/inet.h>
  6 #include <net/if.h>
  7
  8 /* 255.255.255.255\0 */
  9 #define INET_ADDRSTRLEN 16
 10
 11 int main(int argc, char **argv)
 12 {
 13     int                 sockfd, len;
 14     char                *ptr, buf[2048], addrstr[INET_ADDRSTRLEN];
 15     struct ifconf       ifc;
 16     struct ifreq        *ifr;
 17     struct sockaddr_in  *sinptr;
 18
 19     sockfd = socket(AF_INET, SOCK_DGRAM, 0);
 20
 21     ifc.ifc_len = sizeof(buf);
 22     ifc.ifc_req = (struct ifreq *) buf;
 23     ioctl(sockfd, SIOCGIFCONF, &ifc);
 24
 25     for (ptr = buf; ptr < buf + ifc.ifc_len; ptr += sizeof(struct ifreq)) {
 26         ifr = (struct ifreq *) ptr;
 27
 28         switch (ifr->ifr_addr.sa_family) {
 29             case AF_INET:
 30                 sinptr = (struct sockaddr_in *) &ifr->ifr_addr;
 31                 printf("%s\t%s\n", ifr->ifr_name,
 32                         inet_ntop(AF_INET, &sinptr->sin_addr, addrstr, sizeof(addrstr)));
 33                 break;
 34
 35             default:
 36
 37                 break;
 38         }
 39
 40     }
 41
 42     return 0;
 43 }
 44

  评论这张
 
阅读(976)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018