代码之家  ›  专栏  ›  技术社区  ›  Christopher

如何以编程方式检测窗口的网络适配器的双工状态?

  •  1
  • Christopher  · 技术社区  · 16 年前

    我正在使用WMI检测有关网络适配器状态的许多项。我需要了解的事情包括(a)速度和(b)双工。

    我已经能够通过使用wmi和以下python代码检测网络适配器的速度:

    from pycom.client import wmi
    
    dev_name = r"\\DEVICE\\{287EB4BB-5C2A-4108-B377-15E1D0B0E760}"
    query1 = """
    SELECT * 
    FROM  MSNdis_EnumerateAdapter
    WHERE DeviceName = '%s'""" % dev_name
    
    
    wmi_ndis = wmi.WMI("root\\WMI")
    results = wmi_ndis.ExecQuery(query1)
    instance_name = results[0].InstanceName
    
    del results
    
    query2="""
    SELECT * 
    FROM MSNdis_LinkSpeed
    WHERE InstanceName='%s'""" % instance_name
    results = wmi_ndis.ExecQuery(query2)
    linkspeed = results[0].NdisLinkSpeed
    
    del results
    
    print instance_name, linkspeed
    
    del instance_name
    del linkspeed
    del wmi_ndis
    

    对于我想要的数据,似乎有一个完美的类:msndis_linkParameters。但是,此表似乎没有被填充。win32_networkadapter中也有值,但它们也没有填充。

    我很乐意使用本机C API或WMI,但我不能进行屏幕抓取,因为应用程序需要使用任意语言。谢谢!

    1 回复  |  直到 13 年前
        1
  •  0
  •   onkar Jon    13 年前

    显然,这里的基础问题是,WMI提供程序的实现是由NIC供应商来处理的,而不是操作系统——因此,某些NIC可能支持某些设置,而其他(如您所发现的)可能不支持。

    对于链接速度,请查看 this 对于一些可以在大多数NIC上工作的WMI脚本。

    对于复式,我认为你运气不好,至少根据 topic .看看这个线程中的最后一篇文章——在某些情况下,它似乎非常具体地描述了如何绕过限制,但不适用于所有的NIC。