欢迎来到天天文库
浏览记录
ID:38047867
大小:24.50 KB
页数:3页
时间:2019-05-24
《Linux 获取本机IP地址》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、IP地址分为IPv4和IPv6,本文只验证了IPv4的获取,至于IPv6还没有验证。 说明:family=AT_INET:IPv4family=AT_INET6:IPv6address:提取得到的IP地址所要保存的地址size=strlen(sampleIP)192.168.123.128 MAX_IPv4=15某些头文件应在其他方面,在本程序中没用得上。不过不影响程序的编译。programlist: #include#include#include#include#incl
2、ude#include#include#include#include#include#include #include #include #include #include intGetIP_v4_and_v6_linux(intfamily,char*address,intsize){ struc
3、tifaddrs*ifap0,*ifap; charbuf[NI_MAXHOST]; char*interface="eth0"; structsockaddr_in*addr4; structsockaddr_in6*addr6; intret; if(NULL==address) { return-1; } if(getifaddrs(&ifap0)) { return-1; } for(ifap=ifap0;ifap!=NULL
4、;ifap=ifap->ifa_next) { if(strcmp(interface,ifap->ifa_name)!=0)continue; if(ifap->ifa_addr==NULL)continue; if((ifap->ifa_flags&IFF_UP)==0)continue; if(family!=ifap->ifa_addr->sa_family)continue; if(AF_INET==ifap->ifa_addr->sa_family) { addr4=(stru
5、ctsockaddr_in*)ifap->ifa_addr; if(NULL!=inet_ntop(ifap->ifa_addr->sa_family, (void*)&(addr4->sin_addr),buf,NI_MAXHOST)) { if(size < strlen(buf))break; strcpy(address,buf); printf("IPv4=%s",address);//testing
6、 freeifaddrs(ifap0); return0; } elsebreak; } elseif(AF_INET6==ifap->ifa_addr->sa_family) { addr6=(structsockaddr_in6*)ifap->ifa_addr; if(IN6_IS_ADDR_MULTICAST(&addr6->sin6_addr)) {cont
7、inue; } if(IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr)) {continue; } if(IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr)) {continue; } if(IN6_IS_ADDR_UNSPECIFIED(&addr6->sin6_addr))
此文档下载收益归作者所有