如何获取当前配置的IPV6地址的前缀长度(掩码)
2013-12-02 20:48
459 查看
首先问个问题:IPV6是否有掩码?
答: 有
GOOGLE上查了一圈没有找到好的方法,字节摸索了一套可行的方法,同分享:
下述程序打印处掩码长度,由此判断前缀长度,good!
答: 有
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); }
相关文章推荐
- Tomcat初始化方法中如何注入配置文件内容以及获取当前服务器端口号
- 如何用批处理文件写:获取当前日期的前一天
- java中获取当前项目类路径下的配置文件
- 解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
- 如何获取当前&nbsp;select&nbsp;元素的值
- Android如何获取网络连接状态及怎样调用网络配置界面
- ASP.NET DEMO 5:如何在GridView的RowCommand事件中获取当前的GridViewRow
- 获取实体属性在hibernate配置中对应字段的长度
- jquery 获取点击事件的id;jquery如何获取当前触发事件的控件ID值
- BLE固件开发--如何获取当前连接状态
- C/C++中如何获取数组的长度?
- Jsp中如何在<c:forEach >标签内获取items集合的长度方法
- Mysql 如何设置字段自动获取当前时间
- shell脚本如何获取当前时间
- OpenCV如何获取视频当前的一帧图像
- 如何是用js 获取当前的浏览器版本(类型)
- .NET Core2.1如何获取自定义配置文件信息详解
- 如何获取ViewPager中的当前Item对象
- 关于如何获取当前焦点控件并判断控件类型
- 如何从编码过的当前url中通过get获取参数