una tarjetas tarjeta sobre redes priorizar prioridad metrica enlaces configuracion conexiones cambiar adaptadores adaptador python networking windows-xp

python - tarjetas - priorizar una tarjeta de red



¿Cómo habilitar/deshabilitar las interfaces de red mediante programación?(Windows XP) (7)

Necesito habilitar / deshabilitar completamente las interfaces de red desde un script en Windows XP. Estoy buscando una solución de Python, pero cualquier forma general (por ejemplo, WMI, alguna línea de comando a la netsh, alguna llamada de Windows) es bienvenida y se ajustará. Gracias.


Encontré este script .VBS en internet. Tiene la ventaja de trabajar en máquinas donde no puedo hacer que NETSH funcione para este propósito.

Const ssfCONTROLS = 3 sConnectionName = "Local Area Connection" sEnableVerb = "En&able" sDisableVerb = "Disa&ble" set shellApp = createobject("shell.application") set oControlPanel = shellApp.Namespace(ssfCONTROLS) set oNetConnections = nothing for each folderitem in oControlPanel.items if folderitem.name = "Network Connections" then set oNetConnections = folderitem.getfolder: exit for end if next if oNetConnections is nothing then msgbox "Couldn''t find ''Network Connections'' folder" wscript.quit end if set oLanConnection = nothing for each folderitem in oNetConnections.items if lcase(folderitem.name) = lcase(sConnectionName) then set oLanConnection = folderitem: exit for end if next if oLanConnection is nothing then msgbox "Couldn''t find ''" & sConnectionName & "'' item" wscript.quit end if bEnabled = true set oEnableVerb = nothing set oDisableVerb = nothing s = "Verbs: " & vbcrlf for each verb in oLanConnection.verbs s = s & vbcrlf & verb.name if verb.name = sEnableVerb then set oEnableVerb = verb bEnabled = false end if if verb.name = sDisableVerb then set oDisableVerb = verb end if next ''debugging displays left just in case... '' ''msgbox s '': wscript.quit ''msgbox "Enabled: " & bEnabled '': wscript.quit ''not sure why, but invokeverb always seemed to work ''for enable but not disable. '' ''saving a reference to the appropriate verb object ''and calling the DoIt method always seems to work. '' if bEnabled then '' oLanConnection.invokeverb sDisableVerb oDisableVerb.DoIt else '' oLanConnection.invokeverb sEnableVerb oEnableVerb.DoIt end if ''adjust the sleep duration below as needed... '' ''if you let the oLanConnection go out of scope ''and be destroyed too soon, the action of the verb ''may not take... '' wscript.sleep 1000



Hasta ahora he encontrado la siguiente solución de Python:

>>> import wmi; c=wmi.WMI() >>> o=c.query("select * from Win32_NetworkAdapter where NetConnectionID=''wifi''")[0] >>> o.EnableDevice(1) (-2147217407,)

que se traduce, AFAIU, al error WMI genérico 0x80041001. Podrían ser permisos


La herramienta devcon puede controlar la NIC, pero no la interfaz directamente. Es una versión de línea de comandos del applet del Administrador de Dispositivos.

devcon disable (id or portion of name) devcon enable (id or portion of name)


Parece que no puedo encontrar ninguna API básica para controlar las interfaces en MSDN, aparte de las API de RAS, pero no creo que se apliquen a las conexiones que no son de acceso telefónico. Como te sugieres, netsh podría ser una opción, supuestamente también tiene una interfaz programática: http://msdn.microsoft.com/en-us/library/ms708353(VS.85).aspx

Si quiere ser Python puro, tal vez pueda abrir un conjunto de tuberías para comunicarse con un proceso netsh.


Uso de la interfaz netsh Interfaz del conjunto de usos [name =] IfName [[admin =] HABILITADO | DESACTIVADO [connect =] CONNECTED | DISCONNECTED [newname =] NewName]

Trate de incluir todo dentro de los corchetes exteriores: netsh interface set interface name = "thename" admin = disabled connect = DISCONNECTED newname = "thename"

Consulte también esta página de MS KB: http://support.microsoft.com/kb/262265/ Puede seguir cualquiera de sus sugerencias. Para deshabilitar el adaptador, deberá determinar una forma de referenciar el dispositivo de hardware. Si no hay varios adaptadores con el mismo nombre en la computadora, es posible que se salga de la Descripción de la interfaz (o la ID de PCI funciona bien). Después de eso, usando devcon (disable | enable). Devcon es una interfaz de consola complementaria para Device Manager.


esto es VB.Net

Dim objectQuery As New ObjectQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId IS NOT NULL") Dim searcher As New ManagementObjectSearcher(scope, objectQuery) Dim os As ManagementObject Dim moColl As ManagementObjectCollection = searcher.Get() Dim _list As String = "" For Each os In moColl Console.WriteLine(os("NetConnectionId")) Next os

Eso obtendrá todas las interfaces en su computadora. Entonces puedes hacer netsh para deshabilitarlo.

interface del conjunto de interfaz netsh DISABLED