【问题标题】:Programmatically check if IPv6 is enabled on windows以编程方式检查是否在 Windows 上启用了 IPv6
【发布时间】:2011-03-07 19:34:18
【问题描述】:

有没有办法以编程方式检查是否使用 c++ 在 Windows 上安装/启用了 IPv6?在接口级别或系统范围内。

【问题讨论】:

  • 主机开启了,不代表路由器会支持...
  • 如果他们的机器支持 IPv6,我需要为用户提供一些额外的配置选项。我的许多用户都在不支持 IPv6 的旧机器上运行。

标签: c++ windows ipv6


【解决方案1】:

对于很多网络可用性而言,最简单的方法是尝试使用它并在失败时捕获异常。

【讨论】:

    【解决方案2】:

    一个答案是使用GetAdapterAddresses() 枚举系统接口并查找 IPv6 地址。

    【讨论】:

      【解决方案3】:

      WSCEnumProtocols()可用于检查是否安装了IPv6作为协议。

      【讨论】:

        【解决方案4】:

        最简单的方法就是尝试打开一个套接字,

        const int sock6 = socket (AF_INET6, SOCK_DGRAM, 0);
        const BOOL is_ip6_enabled = (SOCKET_ERROR != sock6);
        close (sock6);
        

        【讨论】:

        • 这真的行不通。在 Windows 2008 中,即使未启用 IPv6,您仍然可以获得套接字句柄。
        • 您可能将“启用”与“拥有 IPv6 接口”混淆了?
        【解决方案5】:

        请记住,在 XP 上,必须在 IPv6 可用之前运行 ipv6 install,因此它比您想象的要复杂一些。

        【讨论】:

          猜你喜欢
          • 2011-06-18
          • 1970-01-01
          • 2011-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-15
          相关资源
          最近更新 更多