Подтвердить что ты не робот

Как программно включить/отключить сетевые интерфейсы? (Windows XP)

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

4b9b3361

Ответ 1

Использование интерфейса netsh Интерфейс интерфейса использования [name =] IfName           [[admin =] ENABLED | DISABLED             [connect =] CONNECTED | DISCONNECTED             [newname =] NewName]

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

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

Ответ 2

До сих пор я нашел следующее решение Python:

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

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

Ответ 3

Я нашел это .VBS script в Интернете. У этого есть превосходное преимущество фактически работающего на машинах, где я не могу заставить 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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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