如何获取当前配置的IPV6地址的前缀长度(掩码)
来源:互联网 发布:招商证券交易软件 编辑:程序博客网 时间:2024/06/05 00:12
首先问个问题:IPV6是否有掩码?
答: 有
GOOGLE上查了一圈没有找到好的方法,字节摸索了一套可行的方法,同分享:
下述程序打印处掩码长度,由此判断前缀长度,good!
#include <sys/socket.h> #include <netdb.h> #include <ifaddrs.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <net/if.h> #include <netinet/in.h> #include <sys/types.h> int main(int argc, char *argv[]) { struct ifaddrs *ifaddr, *ifa; int family, s; char host[NI_MAXHOST]; char host_netmask[NI_MAXHOST]; struct sockaddr_in6 *pip6 = NULL; int i; if (getifaddrs(&ifaddr) == -1) { perror("getifaddrs"); exit(EXIT_FAILURE); } /* Walk through linked list, maintaining head pointer so we can free list later */ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr == NULL) continue; family = ifa->ifa_addr->sa_family; /* Display interface name and family (including symbolic form of the latter for the common families) */ printf("%s address family: %d%s\n", ifa->ifa_name, family, (family == AF_PACKET) ? " (AF_PACKET)" : (family == AF_INET) ? " (AF_INET)" : (family == AF_INET6) ? " (AF_INET6)" : ""); /* For an AF_INET* interface address, display the address */ if (family == AF_INET || family == AF_INET6) { s = getnameinfo(ifa->ifa_addr, (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (s != 0) { printf("getnameinfo() failed: %s\n", gai_strerror(s)); exit(EXIT_FAILURE); } getnameinfo(ifa->ifa_netmask, (family == AF_INET)? sizeof(struct sockaddr_in): sizeof(struct sockaddr_in6), host_netmask, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if(AF_INET6==family) {pip6 = (struct sockaddr_in6 *)(ifa->ifa_netmask);char *p = (char *)&(pip6->sin6_addr); for(i=0;i<16;i++) {printf("%d ",*p);p++;} } printf("\taddress: <%s>\n", host); printf("\tnetmaks: <%s>\n", host_netmask); } } freeifaddrs(ifaddr); exit(EXIT_SUCCESS); }
- 如何获取当前配置的IPV6地址的前缀长度(掩码)
- 获取接口所有IPV6地址和前缀的方法
- linux下ipv6地址的获取
- IPv6地址前缀
- XP怎样配置ipv6的ip地址
- XP怎样配置ipv6的ip地址
- CentOS下的IPV6地址配置
- IPv6地址的无状态自动配置
- IPv6地址是如何表示的?
- Linux 接口地址的获取-暨获取本地IP地址(所有地址,包括IPv4,IPV6,MAC 地址)
- 获取当前IE的地址
- 获取当前浏览器的地址
- 如何通过hostname获取已使用IPv6协议的IPv4地址
- IPV6的地址
- ipv6地址的分类
- IPv6的地址解析
- IPV6的地址
- IPV6的地址
- 覆盖equals时遵守通用约定
- android 短信发送器
- 判别分析
- NYOJ-283-对称排序-2013年11月5日22:11:16
- Computer vision with iOS Part 1: Building an OpenCV framework
- 如何获取当前配置的IPV6地址的前缀长度(掩码)
- 第五章【回溯法】批处理作业调度问题
- DP题集
- dbo与db_owner区别
- QtGui实现计算圆的面积
- Linux下驱动开发之一-------Tiny 6410
- 在Linux下简单编写、编译并执行一个C语言程序
- 玉兔号月球车?
- Oracle中Hint深入理解