2016-01-30 4 views
0

Я пытаюсь написать автоматизацию для небольшого проекта, который я делаю в работе. В процессе я должен отключить брандмауэр Windows (для каждой версии Windows) с использованием python (я предпочитаю activepython, потому что он уже установлен).Как отключить брандмауэр Windows с помощью python

Я искал ответы на многие вопросы, но не нашел ответа, который соответствует моим потребностям.

Я нашел этот сайт: https://mail.python.org/pipermail/python-win32/2012-July/012434.html Но проблема в том, что когда я проверяю с панели управления фактическим отключения брандмауэра не происходит ...

Может кто-нибудь помочь мне с этой проблемой?

+0

Пожалуйста, укажите «ваши потребности», чтобы мы могли угадать, что может «удовлетворить» их. 1) вам нужно остановить/отключить службу брандмауэра Windows или установить его параметры «выключено», как показано в «firewall.cpl»? Если последний - для всех сетевых интерфейсов или только для определенных? 2) чего вы пытаетесь достичь? Вероятнее всего, это лучший способ, чем программа Python (например, групповая политика или обычная командная строка). –

+0

netsh.exe работает для меня в Windows 10, например. 'subprocess.check_call ('netsh.exe advfirewall set publicprofile state off')'. Профили по умолчанию - это «domainprofile», «privateprofile» и «publicprofile», а состояние «включено» или «выключено». – eryksun

+0

Благодарим вас @eryksun! –

ответ

0

Лучший способ сделать это будет использовать WMI:

import wmi,os 

c = wmi.WMI("WinMgmts:\root\Microsoft\HomeNet") 

for obj in c.HNet_ConnectionProperties(): 
    print obj 
    print obj.IsFirewalled 
    obj.IsFirewalled = False 
    obj.Put_() 

Конечно, чтобы сделать это вам нужно будет запускать программу с правами администратора.

Надеюсь, что это поможет,

Jason.

+0

Это то же самое, что и ссылка, которую я подключил, и она не работает ... –

+0

Это отключает FW для каждого соединения («расширенный») в пользовательском интерфейсе), а не во всем мире. –

-1
# -*- coding: utf-8 -*- 
''' 
State for configuring Windows Firewall 
''' 


def __virtual__(): 
''' 
Load if the module firewall is loaded 
''' 
return 'win_firewall' if 'firewall.get_config' in __salt__ else False 


def disabled(name): 
''' 
Disable all the firewall profiles (Windows only) 
''' 
ret = {'name': name, 
     'result': True, 
     'changes': {}, 
     'comment': ''} 

# Determine what to do 
action = False 
current_config = __salt__['firewall.get_config']() 
for key in current_config: 
    if current_config[key]: 
     action = True 
     ret['changes'] = {'fw': 'disabled'} 
     break 

if __opts__['test']: 
    ret['result'] = None 
    return ret 

# Disable it 
if action: 
    ret['result'] = __salt__['firewall.disable']() 
    if not ret['result']: 
     ret['comment'] = 'Could not disable the FW' 
else: 
    ret['comment'] = 'All the firewall profiles are disabled' 

return ret 
+1

У меня была небольшая проблема с этим кодом, можете ли вы объяснить, что вы делаете? Нужны ли мне внешние модули? –

0

Простейший подход заключается в том, чтобы другая программа выполняла для вас работу. В этом случае netsh.exe имеет набор из commands to control the Advanced Firewall, который используется Windows Vista и более поздними версиями. Например:

import subprocess 
subprocess.check_call('netsh.exe advfirewall set publicprofile state off') 

по умолчанию профили «domainprofile», «privateprofile», и «publicprofile», а государство либо «на» или «выключено».

+0

Работает только в том случае, если установлен расширенный брандмауэр. Имена профилей для Vista +. –

+0

@ivan_pozdeev, спасибо за уловку, я больше не пишу ответы на XP, так как у меня нет XP VM для тестирования и, честно говоря, не надо было бы это делать, даже если бы я это сделал. Я бы не рекомендовал изменять реестр напрямую и использовать COM (например, ['INetFwPolicy2'] (https://technet.microsoft.com/en-us/library/hh831755.aspx)), я не рекомендую, потому что легкий подход, comtypes (расширение ctypes) немного наполовину выпечен, а альтернатива PyWin32 - большая зависимость для добавления в проект, плюс стоимость обучения базовому COM-программированию. Использование netsh является простым и надежным. – eryksun

0

Способы управления брандмауэром Windows - как с пользовательским интерфейсом, так и с программным обеспечением - широко освещаются в статье MSDN Windows Firewall Tools and Settings. К ним относятся:

  • настройки реестра на

    • HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\<profile> (локальные настройки) и
    • HKLM\SOFTWARE\Policies\Microsoft\WindowsFirewall\<profile> (параметры групповой политики).

    Изменение настройки имеет мгновенный эффект: служба брандмауэра, по-видимому, устанавливает уведомления для ключей.

  • Услуги, которые работают с настройками:

    • COM интерфейс HNetCfg.FwMgr
    • netsh firewall (netsh advfirewall для Advanced Firewall)
    • WMI winmgmts:root/Microsoft/HomeNet
    • %windir%\Inf\Netfw.inf (отсутствует, если не создано вручную)

firewall.cpl отражает локальные параметры реестра (или переопределяет групповые политики, если они присутствуют and doesn't allow to change them), и текущий активный профиль (для предопределенных профилей и того, как он выбран, см. Раздел How Windows Firewall Works «Определение профиля брандмауэра Windows» для XP/2003 и Understanding Firewall Profiles для Vista +).

Python может работать с любым из вышеупомянутых объектов. Хотя другие инструменты (групповая политика, .reg, netsh) могут быть более удобными в зависимости от вашей задачи (например, netsh автоматически выбирает активный профиль).

Смежные вопросы