Как программно включить / отключить сетевые интерфейсы? (Windows XP) - PullRequest
11 голосов
/ 17 сентября 2008

Мне нужно включить / отключить полностью сетевые интерфейсы из скрипта в Windows XP. Я ищу решение на Python, но любой общий способ (например, WMI, некоторая командная строка а-ля netsh, некоторые вызовы окон) приветствуется и будет скорректирован. Спасибо.

Ответы [ 7 ]

10 голосов
/ 17 сентября 2008

Использование интерфейса netsh Интерфейс набора использования [name =] IfName [[admin =] ВКЛЮЧЕНО | ОТКЛЮЧЕНО [подключиться =] ПОДКЛЮЧЕНО | ОТКЛЮЧЕНО [newname =] NewName]

Попробуйте включить все во внешние скобки: интерфейс интерфейса netsh имя интерфейса = "thename" admin = отключено connect = DISCONNECTED newname = "thename"

См. Также эту страницу MS KB: http://support.microsoft.com/kb/262265/ Вы можете следовать любому из их предложений. Для отключения адаптера вам нужно будет определить способ обращения к аппаратному устройству. Если на компьютере не будет нескольких адаптеров с одним и тем же именем, вы можете отключить описание интерфейса (или PCI ID работает хорошо). После этого с помощью devcon (отключить | включить). Devcon - это дополнительный интерфейс консоли для диспетчера устройств.

6 голосов
/ 17 сентября 2008

Пока что я нашел следующее решение Python:

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

, что переводится, AFAIU, на общую ошибку WMI 0x80041001. Могут быть разрешения.

2 голосов
/ 30 ноября 2010

Я нашел этот скрипт .VBS в интернете. У него есть классное преимущество - работать на машинах, где я не могу заставить NETSH работать с этой целью.

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
1 голос
/ 17 сентября 2008

Кажется, я не могу найти никакого базового API для управления интерфейсами в MSDN, кроме API RAS, но я не думаю, что они применимы к соединениям без удаленного доступа. Как вы предполагаете, netsh может быть вариантом, предположительно, он также имеет программный интерфейс: http://msdn.microsoft.com/en-us/library/ms708353(VS.85).aspx

Если вы хотите быть чистым Python, вы можете открыть набор каналов для связи с процессом netsh.

0 голосов
/ 17 сентября 2008

Возможно, вам потребуется использовать WMI. Это может послужить хорошей отправной точкой: http://msdn.microsoft.com/en-us/library/aa394595.aspx

0 голосов
/ 17 сентября 2008

это 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

Это позволит получить все интерфейсы на вашем компьютере. Тогда вы можете сделать netsh, чтобы отключить его.

интерфейс набора интерфейсов netsh DISABLED

0 голосов
/ 17 сентября 2008

Инструмент devcon может управлять NIC, но не напрямую интерфейсом. Это версия апплета диспетчера устройств для командной строки.

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