¿Cómo puedo detectar mediante programación un estado adaptador dúplex de red de Windows?
-
18-09-2019 - |
Pregunta
Estoy usando WMI para detectar una serie de artículos sobre el estado de un adaptador de red. Entre las cosas que necesito para averiguar son: (a) la velocidad y (b) dúplex.
He sido capaz de detectar la velocidad de un adaptador de red mediante WMI y el siguiente código 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
No parece ser una clase perfecta para los datos que yo quiero: MSNDis_LinkParameters. Sin embargo, no parece ser poblada esta tabla. Hay valores en Win32_NetworkAdapter así, sino que además no se rellenan.
Yo estaría feliz de usar una API C nativo o WMI, pero no puedo hacer captura de imágenes, porque la aplicación tiene que trabajar con lenguajes arbitrarios. Gracias!
Solución
Al parecer, la cuestión de fondo aquí es que la implementación del proveedor WMI es manejado por el proveedor de NIC, no el OS-- por lo que algunas tarjetas de red puede apoyar algunos ajustes mientras (como usted ha descubierto) y otros no.
Para la velocidad de enlace, echa un vistazo a este para algunos scripts WMI que puede funcionar en la mayoría de las NIC.
Para la impresión dúplex, creo que estás fuera de suerte, al menos según la tema . Mira el último mensaje en el que thread-- parece bastante específica acerca de cómo evitar el límite en algunos casos, pero no funcionará para todas las NIC.