我如何编程检测窗口的网络适配器的双工状态?(How can I programmatically d

2019-10-17 17:11发布

我使用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,但因为应用程序需要与任意语言的工作,我不能做屏幕抓取。 谢谢!

Answer 1:

显然,这里的根本问题是,WMI提供程序的实现是由NIC供应商来处理,而不是OS--所以有些网卡可以支持一些设置,同时(如你发现),有的则没有。

对于链路速度,看看这对一些WMI脚本可以在大多数网卡上工作。

对于双面,我觉得你的运气了,至少根据话题 。 看看那个帖子的最后thread--似乎很具体谈谈如何解决限制在某些情况下,但不会为所有NIC工作。



文章来源: How can I programmatically detect a Window's network adapter's duplex state?