【问题标题】:IPv6 connectivity test in C++C++ 中的 IPv6 连接测试
【发布时间】:2012-11-06 15:19:20
【问题描述】:

是否有任何 C++ 函数来测试运行我的程序的计算机是否支持 IPv6 连接?

我需要知道类似于此页面http://test-ipv6.com/ 的结果,但在 C++ 中。

编辑:我试图使用getifaddrs()。但是返回值可以是AF_INET6 found,因为我确实设置了IPv6地址,但是IPv6连接不起作用(可能是ISP的原因)。那么有什么方法可以检查 IPv6 连接是否确实有效?

【问题讨论】:

  • 如果您的标准 C 库具有 <netinet/in6.h> 标头,则您的实现支持 IPv6。
  • 您能否尝试在 test-ipv6.com 上与端口 80(Web 服务器)建立 TCP-over-IPv6 连接并查看连接尝试是否成功?如果是,则必须设置 IPv6;如果没有,则说明有些东西不工作。
  • 本地计算机的配置并不能保证您实际上具有工作的端到端 IPv6 连接。 test-ipv6.com 的重点在于它实际上测试解析 DNS 记录并通过 IPv6 下载示例文件。这远远超出了“用 C++ 测试计算机是否支持 IPv6”的范围。
  • 您的网络接口可能支持 IPv6,但如果 IPv6 超出您的调制解调器/路由器,那就完全不同了。您无法通过查看计算机设置来验证它们不会为您提供任何有用的信息。不幸的是,您将不得不依赖外部资源来判断您是否在大多数情况下通过 IPv6 连接到它们,除非您有一个直接连接到 Internet 的接口,而不是通过路由器。

标签: c++ testing ipv6 connectivity


【解决方案1】:

所有现代操作系统都支持 IPv6,因此您不必担心该协议是否可用。 (如果不是,你的程序无论如何都不会编译。)

但确定计算机是否真正具有有效的 IPv6 连接的唯一方法是尝试 IPv6 连接。

这实际上是what Microsoft does with their network status indicator in Windows。他们尝试加载URL from an IPv6-only web serverURL from an IPv4-only web server。如果这两个都失败了,您会在系统托盘中的网络图标上看到带有感叹号的黄色三角形。

因为我需要一个类似的功能,但我还需要实际的 IPv6 地址,I created my own public service,它包括这个功能(和其他一些东西)。所以我有一个返回公共 IPv6 地址的 IPv6-only URL 和一个返回公共 IPv4 地址的 IPv4-only URL

由于其中一个网址可通过 IPv6 访问,而另一个网址可通过 IPv4 访问,因此您可以独立验证每个协议的连接性。

无论哪种方式,如果您尝试获取 URL 失败,您可以检查返回的错误以确定问题可能是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多