我想检测一个地址是否是临时ipv6地址,我使用getifaddrs获取地址列表但不知道如何从那里获取该信息。 如果可能的话,我希望它适用于linux,osx,solaris和windows。
我似乎在Linux中IFA_F_TEMPORARY设置在inet6_ifaddr-> ifa_flags中,但不确定我是如何从getifaddrs返回的ifaddrs中获得的。
似乎在OSX上我需要octl与SIOCSIFINFO_FLAGS,我不知道Solaris或Windows。
有任何机构可以做到这一点的示例代码。
更新(2016年8月3日):在这个问题上搜索过去几个月后(因为我实际上自己需要这个答案)。 我相信我找到了以Windows为中心的答案。 我只在Windows 10上测试了这个,所以我不知道旧版本。 但是如果有人想为我validation它,这个API应该不会改变:-)
所有_IP_ADAPTER_UNICAST_ADDRESS结构都具有地址前缀和后缀的枚举。 我现在很想看看它们,它们是解决这个问题的全部关键!
什么是临时IPv6地址….这是一个带有随机后缀的地址! 因此,对于IP_ADAPTER_UNICAST_ADDRESS中的所有IPv6地址,请查看IP_SUFFIX_ORIGIN,看看它是否是IpSuffixOriginRandom 。 而已。
我真的对网上这个话题有多少感到震惊,如果没有人知道如何为服务器端应用程序解决这个问题(即使是在个人电脑上运行的应用程序),对于网络应用程序开发人员来说这将是一个巨大的问题。 )
你先听到答案!
(原始答案):我一直在为跨平台应用程序查看这个确切的主题。 我想我找到了一种在Windows中过滤IPv6临时地址的方法。 基本上RFC 4941声称临时地址必须:
因此,对于C ++,当使用类似GetAdaptersAddresses的函数时,您可以在PIP_ADAPTER_ADDRESSES结构中查找_IP_ADAPTER_UNICAST_ADDRESS结构并评估ValidLifetime和PreferredLifetime成员。 过滤地址类型后(如果您需要知道Local-Link vs Public),您可以保持最长生命周期的运行记录。 最长的使用寿命(每个适配器)应该是公共地址!
要查看地址生存期信息,请快速运行Windows终端命令:netsh interface ipv6 show address
您可以看到所有临时地址都比默认的SLAAC生命周期小得多。
我现在正在使用这个假设,直到测试certificate不是这样。 所有临时地址都是基于公众的,因此无法生效。
希望这可以帮助
以上就是c/c++开发分享检测临时ipv6地址跨平台相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562520.html