当前位置:网站首页>简单介绍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
边栏推荐
- Tasks of the first week of information security curriculum design (analysis of 7 instructions)
- Using annotation + interceptor to implement asynchronous execution
- Pipedrive如何在每天部署50+次的情况下支持质量发布?
- LeetCode-15:三数之和
- Problem solving templates for subsequence problems in dynamic programming
- 信息安全课程设计第一周任务(7条指令的分析)
- 使用容器存储表格数据
- Solve the problem that the value of new date() of JS in IE and Firefox is invalid date and Nan Nan
- STS安装
- Nodejs中request出现ESOCKETTIMEDOUT解决方案
猜你喜欢
200人的程序员面试经验,都在这里了
大数据岗位基础要求有哪些?
JVM Zhenxiang series: easy understanding of class files to virtual machines (Part 2)
动态规划之子序列问题解题模板
ITerm2 配置和美化
Dynamic query processing method of stored procedure
Octave basic syntax
[cloud service] there are so many ECS instances on alicloud server, how to select the type? Best practice note
经典动态规划:最长公共子序列
. net core cross platform resource monitoring library and dotnet tool
随机推荐
Queue with two stacks
写时复制集合 —— CopyOnWriteArrayList
选择API管理平台之前要考虑的5个因素
如何让脚本同时兼容Python2和Python3?
The interface testing tool eolinker makes post request
实现图片的复制
Brief introduction of Integrated Architecture
LeetCode-11:盛水最多的容器
动态规划设计:最大子数组
Server side resolution of lengthfieldbasedframedecoder of GetBytes
Computer network application layer
通过canvas获取视频第一帧封面图
CMS垃圾收集器
CSP-S 2020 游记
【200人面试经验】,程序员面试,常见面试题解析
基于链表的有界阻塞队列 —— LinkedBlockingQueue
大数据软件学习入门技巧
Introduction skills of big data software learning
寻找性能更优秀的不可变小字典
快来看看!AQS 和 CountDownLatch 有怎么样的关系?