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

时间:2009-09-28 21:03:41

标签: windows network-programming wmi detection

我正在使用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 个答案:

答案 0 :(得分:0)

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

对于链接速度,请查看this以查找可能适用于大多数NIC的某些WMI脚本。

对于双面打印,我认为你运气不好,至少根据topic。查看该主题中的最后一篇文章 - 在某些情况下,如何解决限制似乎非常具体,但不适用于所有NIC。