使用代码操作windows防火墙的启用与关闭

  通过代码操作防火墙的方式有两种:一是代码操作修改注册表启用或关闭防火墙;二是直接操作防火墙对象来启用或关闭防火墙。不论哪一种方式,都需要使用管理员权限,所以操作前需要判断程序是否具有管理员权限。

  1、判断程序是否拥有管理员权限

  需要引用命名空间:System.Security.Principal

/// <summary>
/// 判断程序是否拥有管理员权限
/// </summary>
/// <returns>true:是管理员;false:不是管理员</returns>
public static bool IsAdministrator()
{
    WindowsIdentity current = WindowsIdentity.GetCurrent();
    WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current);
    return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}

  2、注册表修改防火墙

  需要引用命名空间:Microsoft.Win32

/// <summary>
/// 通过注册表操作防火墙
/// </summary>
/// <param name="domainState">域网络防火墙(禁用:0;启用(默认):1)</param>
/// <param name="publicState">公共网络防火墙(禁用:0;启用(默认):1)</param>
/// <param name="standardState">专用网络防火墙(禁用:0;启用(默认):1)</param>
/// <returns></returns>
public static bool FirewallOperateByRegistryKey(int domainState=1, int publicState = 1, int standardState = 1)
{
    RegistryKey key = Registry.LocalMachine;
    try
    {
        string path = "HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\SharedAccess\\Defaults\\FirewallPolicy";
        RegistryKey firewall = key.OpenSubKey(path, true);
        RegistryKey domainProfile = firewall.OpenSubKey("DomainProfile", true);
        RegistryKey publicProfile = firewall.OpenSubKey("PublicProfile", true);
        RegistryKey standardProfile = firewall.OpenSubKey("StandardProfile", true);
        domainProfile.SetValue("EnableFirewall", domainState, RegistryValueKind.DWord);
        publicProfile.SetValue("EnableFirewall", publicState, RegistryValueKind.DWord);
        standardProfile.SetValue("EnableFirewall", standardState, RegistryValueKind.DWord);
    }
    catch (Exception e)
    {
        string error = $"注册表修改出错:{e.Message}";
        throw new Exception(error);
    }
    return true;
}

  3、直接操作防火墙对象

  需要在项目引用中添加对NetFwTypeLib的引用,并引用命名空间NetFwTypeLib

/// <summary>
/// 通过对象防火墙操作
/// </summary>
/// <param name="isOpenDomain">域网络防火墙(禁用:false;启用(默认):true)</param>
/// <param name="isOpenPublicState">公共网络防火墙(禁用:false;启用(默认):true)</param>
/// <param name="isOpenStandard">专用网络防火墙(禁用: false;启用(默认):true)</param>
/// <returns></returns>
public static bool FirewallOperateByObject(bool isOpenDomain = true, bool isOpenPublicState = true, bool isOpenStandard = true)
{
    try
    {
        INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
        // 启用<高级安全Windows防火墙> - 专有配置文件的防火墙
        firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, isOpenStandard);
        // 启用<高级安全Windows防火墙> - 公用配置文件的防火墙
        firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, isOpenPublicState);
        // 启用<高级安全Windows防火墙> - 域配置文件的防火墙
        firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN, isOpenDomain);
    }
    catch (Exception e)
    {
        string error = $"防火墙修改出错:{e.Message}";
        throw new Exception(error);
    }
    return true;
}

原文地址:https://www.cnblogs.com/pilgrim/p/11135485.html

时间: 2024-10-08 19:46:55

使用代码操作windows防火墙的启用与关闭的相关文章

在Windows Server 2012启用或关闭Internet Explorer增强的安全配置

在 Windows Sever 2012 中打开 IE 浏览器时,IE10 会出现[已启用 Internet Explorer 增强的安全配置]的提示信息. 在安全性等级中会设置以[高安全性],如果我想要关闭 Internet Explorer 增强的安全配置,该如何进行设置? 问题的发生原因 在 Windows Server 2012 通常扮演重要的服务器角色,不应该用来做上网等工作,可能会增强被攻击的疑虑.如果您想要关闭[Internet Explorer 增强的安全配置],然后进行调整安全

Win10系统如何关闭"启用病毒防护""启用Windows防火墙"提示?

Win10系统如何关闭"启用病毒防护""启用Windows防火墙"提示? 目前已经有不少有用户升级到了win10正式版系统,不过有一些原win7/win8.1用户表示在升级后,Win10系统总是提示"启用病毒防护""启用Windows防火墙",这是由于大多数用户在没有升级之前的系统中关闭了防火墙和Windows defender"工具,所以升级后Win10系统延续了这一设置,不过为了用户安全,所以经常性的出现提示,那

高级安全Windows防火墙

高级安全Windows防火墙 与以前Windows版本中的防火墙相比,Windows Server 2008中的高级安全Windows防火墙(WFAS)有了较大的改进,首先它支持双向保护,可以对入站.出站通信进行过滤.其次它将Windows防火墙功能和Internet协议安全(IPSec)集成到一个控制台中. 在Windows Server 2008高级防火墙配置中,通过使用配置规则来响应传入和传出流量,以便确定允许或阻止哪种数据流量.当传入数据包到达计算机时,防火墙检查该数据包,并确定它是否符

windows防火墙打不开的处理办法

一.防火墙配置出错 开始-->运行-->gpedit.msc 这时,打开了组策略 在左面分级展开 计算机配置-->管理模板-->网络-->网络连接-->Windows 防火墙 然后在这下面就是组策略强制限制的一些选项,找到你所需要的配置 定义成启用 再设置回"未配置" 就可以了. (有些软件 更改的注册表,有时 在组策略里显示不出来,可能更改以后 组策略里仍然是未配置的,所以要配置一下,再配置回来) 二.安全中心被关闭 防火墙启用的选项变成灰色,无法

Java代码操作zookeeper

以下为一个完整JAVA操作Zookeeper项目步骤: 1. 项目中pom.xml中添加需要的依赖jar包信息 <dependencies> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version> </dependency> <

PHP 通过LDAP协议,操作Windows Active Directory

原文地址:http://hi.baidu.com/lllangxx/item/3ccb7cdfa13b56eb3dc2cb39 一.学习如何管理Active Directory Active Directory 循序渐进系列指南 二.ADExplorer 到网上下载一个ADExplorer,它是Active Directory浏览器,可以让我们更加清楚认识Active Directory的数据存储方式及格式. 三.域外访问Active Directory 确保将域外计算机的 DNS 分析 程序配

C#使用DirectoryEntry类操作Windows帐户

1.创建windows帐户 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /// <summary> /// 创建Windows帐户 /// </summary> /// <param name="pathname"></param> /// <returns></returns> public static void CreateLocalUser(string username, st

利用java.util.prefs包操作windows注册表

利用java.util.prefs包操作windows注册表 Java 操作windows注册表,主要的API 主要接口 接口 说明 NodeChangeListener 用于接收首选项节点更改事件的侦听器. PreferenceChangeListener 用于接收首选项节点更改事件的侦听器. PreferencesFactory 生成Preferences对象的factory对象. 主要的类 类 说明 AbstractPreferences 此类提供了Preferences类的骨干实现,从而

从命令行配置 Windows 防火墙

从命令行配置 Windows 防火墙 高级用户可以使用命令行来配置 Windows 防火墙.您可以使用 netsh 命令行工具来进行配置. 下表中的 netsh 命令可用于 Microsoft Windows XP Service Pack 2 (SP2).键入 netsh 命令以及“/?”会显示该命令的帮助. Add netsh firewall add allowedprogram 将允许的程序配置添加到 Windows 防火墙中 netsh firewall add portopening