当前位置:网站首页>简单介绍c#通过代码开启或关闭防火墙示例
简单介绍c#通过代码开启或关闭防火墙示例
2020-11-08 23:48:00 【Linux就该这么学】
| 这篇文章主要介绍了c# 通过代码开启或关闭防火墙的示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下 |
通过代码操作防火墙的方式有两种:一是代码操作修改注册表启用或关闭防火墙;二是直接操作防火墙对象来启用或关闭防火墙。不论哪一种方式,都需要使用管理员权限,所以操作前需要判断程序是否具有管理员权限。
需要引用命名空间:System.Security.Principal
/// 判断程序是否拥有管理员权限
/// true:是管理员;false:不是管理员
public static bool IsAdministrator()
{
WindowsIdentity current = WindowsIdentity.GetCurrent();
WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current);
return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}
需要引用命名空间: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;
}
需要在项目引用中添加对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;
}
以上就是c# 通过代码开启或关闭防火墙的详细内容。
版权声明
本文为[Linux就该这么学]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/3585265/blog/4708413
边栏推荐
猜你喜欢
随机推荐
JVM真香系列:轻松理解class文件到虚拟机(下)
Pipedrive如何在每天部署50+次的情况下支持质量发布?
新手入坑指南:工作原因“重启”Deepin系统,发现真的香啊
APReLU:跨界应用,用于机器故障检测的自适应ReLU | IEEE TIE 2020
【200人面试经验】,程序员面试,常见面试题解析
C / C + + learning diary: original code, inverse code and complement code
Come and have a look! What is the relationship between AQS and countdownlatch?
动态规划设计:最大子数组
表连接
如何将 PyTorch Lightning 模型部署到生产中
给大家介绍下,这是我的流程图软件 —— draw.io
CSP-S 2020 游记
Case analysis of entitycore framework
选择API管理平台之前要考虑的5个因素
JVM真香系列:轻松理解class文件到虚拟机(上)
构造回文的最小插入次数
云计算之路-出海记-小目标:Hello World from .NET 5.0 on AWS
Database design: paradigms and anti paradigms
npm install 无响应解决方案
Newbe.ObjectVisitor Example 1





