【发布时间】:2014-10-23 08:38:40
【问题描述】:
我无法以 IPv6/前缀格式显示所有 IPv6 地址。 我怎样才能做到这一点? 我正在使用 getifaddrs 获取所有接口 IPv6 地址,然后我应该使用什么?
谢谢!
只是粗略地展示我想要实现的目标:
struct ifaddrs *ifa = NULL;
struct ifaddrs *ifap = NULL;
int res = 0;
void *p = NULL;
char addressOutputBuffer[INET6_ADDRSTRLEN];
res = getifaddrs(&ifa);
...
for (ifap = ifa; ifap != NULL; ifap = ifap->ifa_next) {
// Filter out by AF
if (ifap->ifa_addr->sa_family != AF_INET6) {
continue;
}
p = &((struct sockaddr_in6 *)ifap->ifa_addr)->sin6_addr;
inet_ntop(ifap->ifa_addr->sa_family, p,addressOutputBuffer,sizeof(addressOutputBuffer));
// I want to display IPv6/prefix format
}
【问题讨论】:
-
你目前有什么代码?
-
当您说“IPv6/前缀”时,表明您可以通过该名称找到显示格式的标准。我没有在 Wikipedia 上的 IPv6 Presentation 或其他地方看到它作为演示格式的名称。谷歌也没有任何意义。这就是为什么为示例案例展示您的程序所需输出的具体示例 非常重要的原因之一。您希望看到输出什么字符串?
-
如果你抓住
&((struct sockaddr_in6 *)ifa->ifa_netmask)->sin6_addr并遍历地址的 16 个字节,从末尾开始,你可以数零位数以获得前缀,然后将其添加到末尾addressOutputBuffer。这确实很脏。