linux下获取本机ip地址,ipv4和ipv6
2012-07-12 10:33
477 查看
#include <stdio.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #include <netdb.h> #include <net/if.h> #include <ifaddrs.h> #include <netinet/in.h> int GetIP_v4_and_v6_linux(int family, char *address, int size) { struct ifaddrs *ifap0, *ifap; char buf[NI_MAXHOST]; char *interface = "eth0"; struct sockaddr_in *addr4; struct sockaddr_in6 *addr6; int ret; if( NULL == address ) { return -1; } if(getifaddrs(&ifap0)) { return -1; } for( ifap = ifap0; ifap != NULL; 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 = (struct sockaddr_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); freeifaddrs(ifap0); return 0; } else break; } e 4000 lse if(AF_INET6 == ifap->ifa_addr->sa_family) { addr6 = (struct sockaddr_in6 *)ifap->ifa_addr; if(IN6_IS_ADDR_MULTICAST(&addr6->sin6_addr)){ continue; } 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)){ continue; } if(IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr)){ continue; } if ( NULL != inet_ntop(ifap->ifa_addr->sa_family, (void *)&(addr6->sin6_addr), buf, NI_MAXHOST) ){ if(size <= strlen(buf) ) break; strcpy(address, buf); freeifaddrs(ifap0); return 0; } else break; } } freeifaddrs(ifap0); return -1; }
相关文章推荐
- Linux 接口地址的获取-暨获取本地IP地址(所有地址,包括IPv4,IPV6,MAC 地址)
- linux下获取本机ip地址,ipv4和ipv6
- Linux 接口地址的获取-暨获取本地IP地址(所有地址,包括IPv4,IPV6,MAC 地址)
- #获取本机IP地址时排除IPv6类型,只返回IPv4地址的方法
- [记]WIndow/Linux 获取本机(全部)IPv4、IPv6、MAC地址方法 (C/C++)
- 虚拟机下的Linux自动获取IP地址
- ZZ: linux IPV4 IPV6 sockaddr 几个结构体及其关系: sockaddr sockaddr_in sockaddr_in6
- 获取本机ip地址(适用于linux、windows)
- Linux 如何通过命令仅获取IP地址
- C#获取机器信息(IPV4.IPV6.MAC.硬盘信息,机器厂商/型号)
- windows或linux系统下获取多网卡的ip地址
- linux 获取网卡的IP地址
- Python获取Linux IP地址
- Linux函数实现获取本机IP和设置IP地址
- Linux 如何通过命令仅获取IP地址
- Linux下获取本机IP地址的代码
- LINUX下Live555不能获取ip地址解决方法
- linux 获取ip地址 MAC地址 netMask地址
- Linux网络编程 (获取ip地址 gethostbyname)
- linux下获取电信,网通,铁通IP地址