是否有任何 C++ 函数可以测试运行我的程序的计算机是否支持 IPv6 连接?
我需要知道类似此页面的结果http://test-ipv6.com/ http://test-ipv6.com/,但是在 C++ 中。
EDIT:我试图使用getifaddrs()
。但返回值可以是AF_INET6 found
,因为我确实设置了 IPv6 地址,但 IPv6 连接不起作用(可能是因为 ISP)。那么有什么方法可以检查 IPv6 连接是否确实有效吗?
所有现代操作系统都支持 IPv6,因此您不必担心该协议是否可用。 (如果不是,您的程序将无法编译。)
但确定计算机是否确实具有有效的 IPv6 连接的唯一方法是尝试 IPv6 连接。
这实际上是Microsoft 如何处理 Windows 中的网络状态指示器 https://technet.microsoft.com/en-us/library/ee126135(v=ws.10).aspx。他们试图加载一个来自仅 IPv6 Web 服务器的 URL http://ipv6.msftncsi.com/ncsi.txt and a 来自仅 IPv4 Web 服务器的 URL http://www.msftncsi.com/ncsi.txt。如果这两种方法都失败,您会在系统托盘中的网络图标上看到带有感叹号的黄色三角形。
由于我需要类似的功能,但我还需要实际的 IPv6 地址,我创建了自己的公共服务 http://myip.addr.space/help其中包括此功能(以及其他一些功能)。所以我有一个仅限 IPv6 的 URL http://ipv6.myip.addr.space/ip它返回公共 IPv6 地址,以及仅限 IPv4 的 URL http://ipv4.myip.addr.space/ip它返回公共 IPv4 地址。
因为其中一个 URL 是only通过 IPv6 访问,另一个是only通过 IPv4 访问,您可以独立验证每个协议的连接性。
无论哪种方式,如果您尝试获取 URL 失败,您可以检查返回的错误以确定问题所在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)