Как программно включить/отключить сетевые интерфейсы?(Windows XP)
-
01-07-2019 - |
Вопрос
Мне нужно полностью включить/отключить сетевые интерфейсы из сценария в Windows XP.Я ищу решение на Python, но любой общий способ (например, WMI, командная строка а-ля netsh, вызов Windows) приветствуется и будет скорректирован.Спасибо.
Решение
Использование интерфейса использования интерфейса Netsh [name =] ifname [[admin =] включено | отключить [connect =] подключен | отключить [newName =] newName
Попробуйте включить все, что находится внутри внешних скобок:набор интерфейсов netsh имя интерфейса="thename" admin=disabled Connect=DISCONNECTED newname="thename"
См. также эту страницу базы знаний MS: http://support.microsoft.com/kb/262265/Вы можете последовать любому из их предложений.Для отключения адаптера вам необходимо определить способ ссылки на аппаратное устройство.Если на компьютере не будет нескольких адаптеров с одинаковым именем, вы можете отказаться от описания интерфейса (или идентификатор PCI подойдет).После этого с помощью devcon (отключить|включить).Devcon — это дополнительный консольный интерфейс для диспетчера устройств.
Другие советы
На данный момент я нашел следующее решение Python:
>>> import wmi; c=wmi.WMI()
>>> o=c.query("select * from Win32_NetworkAdapter where NetConnectionID='wifi'")[0]
>>> o.EnableDevice(1)
(-2147217407,)
который переводится, AFAIU, в общую ошибку WMI 0x80041001.Возможно, это разрешения.
Я нашел этот сценарий .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
Кажется, я не могу найти какой-либо базовый API для управления интерфейсами в MSDN, кроме API RAS, но я не думаю, что они применимы к соединениям без коммутируемого доступа.Как вы сами предполагаете, netsh может быть вариантом, предположительно у него также есть программный интерфейс: http://msdn.microsoft.com/en-us/library/ms708353(VS.85).aspx
Если вы хотите использовать чистый Python, вы, возможно, можете открыть набор каналов для связи с процессом netsh.
это ВБ.Нет
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 Interface отключен
А Девкон инструмент может управлять сетевой картой, но не интерфейсом напрямую.Это версия апплета «Диспетчер устройств» для командной строки.
devcon disable (id or portion of name)
devcon enable (id or portion of name)
Возможно, вам придется использовать WMI.Это может послужить хорошей отправной точкой:http://msdn.microsoft.com/en-us/library/aa394595.aspx