博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 防火墙操作之启用与关闭
阅读量:5161 次
发布时间:2019-06-13

本文共 2691 字,大约阅读时间需要 8 分钟。

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

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

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

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

  2、注册表修改防火墙

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

/// /// 通过注册表操作防火墙/// /// 域网络防火墙(禁用:0;启用(默认):1)/// 公共网络防火墙(禁用:0;启用(默认):1)/// 专用网络防火墙(禁用:0;启用(默认):1)/// 
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

/// /// 通过对象防火墙操作/// /// 域网络防火墙(禁用:false;启用(默认):true)/// 公共网络防火墙(禁用:false;启用(默认):true)/// 专用网络防火墙(禁用: false;启用(默认):true)/// 
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

你可能感兴趣的文章
CVE-2014-6321 && MS14-066 Microsoft Schannel Remote Code Execution Vulnerability Analysis
查看>>
给一次重新选择的机会_您还会选择程序员吗?
查看>>
Mysql MHA高可用集群架构
查看>>
心急的C小加
查看>>
编译原理 First,Follow,select集求法
查看>>
(一一二)图文混排中特殊文字的点击与事件处理
查看>>
iPhone开发经典语录集锦 (转)
查看>>
SVM基础必备常识
查看>>
FPGA时序约束的几种方法 (转)
查看>>
cocos2dx 3.x tolua 分析
查看>>
oracle 外网访问
查看>>
jdbc连接数据库方式问题
查看>>
一步一回头撞在了南墙上
查看>>
POJ2965 The Pilots Brothers' refrigerator
查看>>
C# 2.0 中的新增功能01 分布类与分部方法
查看>>
关于腾讯ip接口一个流传很广的错误用法
查看>>
java 浅拷贝和深拷贝
查看>>
unity如何判断应用的运行平台
查看>>
LAMMPS脚本1
查看>>
Kubernetes 1.10.4 镜像 版本
查看>>