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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
13
0
46 244
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

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

Похоже, это не работает с сетевыми интерфейсами. «devcon enable wifi», где wifi - это имя беспроводного интерфейса, который отвечает: «Устройства не включены».

tzot 17.09.2008 18:35

это 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 interface set interface DISABLED

В прошлом я пробовал все комбинации, которые предлагает netsh: netsh interface set interface [name=]wifi [admin=]DISABLED с сообщениями «Параметр неверен» или «Один или несколько важных параметров неверны».

tzot 17.09.2008 18:52

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

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

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

Это действительно хорошая отправная точка. Я работаю над этим. Спасибо.

tzot 17.09.2008 19:15

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

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

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

Очевидно, я использую это как член локальной группы администраторов, а компьютер не является частью домена.

tzot 17.09.2008 19:17

Отслеживание (последний вызов последним): файл "C: \ Python33 \ lib \ site-packages \ wmi.py", строка 416, в вызов result = self.ole_object.ExecMethod_ (self.method.Name) File "<COMObject < unknown >> ", строка 3, в ExecMethod_ pywintypes.com_error: (-2147352567, 'Произошло исключение.', (0, 'SWbemObjectEx', 'Недопустимые параметры метода', Нет, 0, -2147217361), Нет)

Haifeng Li 28.02.2013 14:27

@HaifengLi: спасибо, но я больше не занимаюсь Windows, и ни один из приведенных выше кодов не тестировался на Python 3 (обратите внимание на дату ответа).

tzot 01.03.2013 13:30

Спасибо за ваше заявление.

Haifeng Li 07.03.2013 06:47
Ответ принят как подходящий

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

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

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

Включение всех параметров приводит к следующему сообщению: «Выделенные интерфейсы не могут быть подключены, отключены, включены или отключены». Должно сработать, но это не так. Однако не тестировал на другом компьютере; Я буду. Спасибо.

tzot 18.09.2008 12:46

У меня такая же странная проблема. Netsh, похоже, не работает должным образом, в этой системе Windows XP я пытаюсь сделать это.

Warren P 30.11.2010 21:01

Вы нашли обходной путь для ошибки «выделенные интерфейсы не могут ...»?

scape 30.08.2013 18:12

Я нашел этот сценарий .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

Другие вопросы по теме