【问题标题】:How to detect if a windows machine is running IPV4 or IPV6?如何检测 Windows 机器运行的是 IPV4 还是 IPV6?
【发布时间】:2010-11-24 16:09:32
【问题描述】:

是否有办法确定 Windows 计算机是否使用本机实用程序、python 或 php 运行 IPV6?

【问题讨论】:

  • 汉斯是绝对正确的。您是在暗示异或,但实际上它是包含或。
  • “正在运行”不同于“使用...进行连接”。我宁愿使用某种 IPv6 探测(也许是 Google IPv6 地址?)。相当多的机器会配置 IPv6 地址,但底层网络基础设施不允许 IPv6 去任何地方(想想:你的家庭设备支持 IPv6,但 ISP 设备不支持)。

标签: windows ipv6 ipv4


【解决方案1】:

这就是我通过尝试打开 IPv6 套接字来解决问题的方法。如果系统没有抛出错误,那么它正在使用 IPv6。

import socket

def isIPV6():   
    ipv6 = True
    try:
        s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
    except:
        ipv6 = False
    return ipv6

【讨论】:

    【解决方案2】:

    当然。如果ipconfig 包含用于真实接口的IPv6 Address 条目,则您可能已经获得了IPv6 连接。 HKLM\SYSTEM\CurrentControlSet\services\TCPIP6 也有有用的注册表项。

    【讨论】:

      【解决方案3】:

      每台计算机都标配 IPv4。 IPv6 仅在特定机器上启用。但是如果你解析 ifconfig/ipconfig 那么你应该在输出中找到一个 IPv4/6 地址

      【讨论】:

      • 错了,IPv6一般默认是开启的,如果电脑能得到可路由的IPv6地址,会优先使用。
      • @StanTastic 这个答案已经 6 岁了,当时情况完全不同
      【解决方案4】:

      像其他人所说的那样,枚举接口并检查 IPv6 地址。替代方法包括尝试打开 IPv6 套接字或让 Python 调用 WSCEnumProtocols()

      【讨论】:

      • 尝试打开 IPV6 套接字可以解决问题,看看我的代码答案。
      【解决方案5】:

      Jakob 的方法是最简单的;您可以通过管道传输结果并进行匹配以查看网络适配器是否具有有效的 IPv6 地址。

      此外,您可以通过获取 Windows Management Instrumentation 类 Win32_NetworkAdapterConfiguration 来获取此信息。 IPAddress 属性是与网络适配器关联的所有 IP 地址的数组,您可以匹配它们以查看是否有关联的 IPv6 地址。但是 PS 有点矫枉过正,除非您需要做一些更容易理解和花哨的事情(发送 HTTP 请求;更改一些网络规则;重新启动服务),否则我会选择 Jakob 或 Wyatt 的答案。

      【讨论】:

        猜你喜欢
        • 2015-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-13
        • 2011-01-06
        • 2014-08-10
        • 2016-12-10
        相关资源
        最近更新 更多