1

仕事で行っている小さなプロジェクトにオートメーションを書き込もうとしています。その過程で、 Python を使用して(すべての Windows バージョンで) Windows ファイアウォールを無効にする必要があります (既にインストールされているため、activepython を好みます)。

多くの答えを探しましたが、私のニーズに合った答えは見つかりませんでした。

このサイトを見つけました: https://mail.python.org/pipermail/python-win32/2012-July/012434.html しかし、問題は、コントロール パネルから確認したときに、ファイアウォールの実際の無効化が行われていないことです.. .

誰かがこの問題で私を助けることができますか?

4

4 に答える 4

2

それを行う最良の方法は、次を使用することです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_()

もちろん、これを行うには、プログラムを管理者として実行する必要があります。

お役に立てれば、

ジェイソン。

于 2016-01-30T16:28:58.143 に答える
2

Windows ファイアウォールを制御する方法 (UI とプログラムの両方) については、Windows ファイアウォールのツールと設定のMSDN 記事で詳しく説明されています。彼らです:

  • でのレジストリ設定

    • HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\<profile>(ローカル設定) および
    • HKLM\SOFTWARE\Policies\Microsoft\WindowsFirewall\<profile>(グループ ポリシー設定)。

    設定を変更するとすぐに効果があります。ファイアウォール サービスは明らかにキーの通知を設定します。

  • 設定で動作する施設:

    • COM インターフェイスHNetCfg.FwMgr
    • netsh firewall(netsh advfirewall高度なファイアウォールの場合)
    • WMIwinmgmts:root/Microsoft/HomeNet
    • %windir%\Inf\Netfw.inf(手動で作成しない限り存在しません)

firewall.cplローカル レジストリ設定 (または、グループ ポリシー設定が存在し、変更できない場合はオーバーライド) および現在アクティブなプロファイル (定義済みのプロファイルとその選択方法については、Windows ファイアウォールの仕組み、「Windows ファイアウォール プロファイルの決定」を参照) を反映します。 XP/2003 のセクションおよびVista+ のファイアウォール プロファイルについて)。

Python は、前述の機能のいずれとも連携できます。ただし、タスクによっては、他のツール (グループ ポリシー、.regファイル、netshコマンド ライン) の方が便利な場合があります (netshアクティブなプロファイルの自動選択など)。

于 2016-02-02T23:23:12.840 に答える
1

最も簡単な方法は、別のプログラムに作業を任せることです。この場合、netsh.exe には、Windows Vista 以降で使用される高度なファイアウォールを制御するための一連のコマンドがあります。例えば:

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

デフォルトのプロファイルは「domainprofile」、「privateprofile」、「publicprofile」で、状態は「on」または「off」です。

于 2016-02-02T12:54:13.177 に答える
-2
# -*- 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
于 2016-01-30T16:29:47.010 に答える