当前位置:网站首页>简单介绍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
边栏推荐
- 动态规划设计:最大子数组
- Aprelu: cross border application, adaptive relu | IEEE tie 2020 for machine fault detection
- To introduce to you, this is my flow chart software—— draw.io
- VIM 入门手册, (VS Code)
- 【200人面试经验】,程序员面试,常见面试题解析
- What are the basic requirements for big data posts?
- 存储过程动态查询处理方法
- 采用注解+拦截器的方式进行异步执行的实现方式
- 写时复制集合 —— CopyOnWriteArrayList
- Test comparison of three domestic cloud databases
猜你喜欢
数据库设计:范式与反范式
CMS垃圾收集器
理论与实践相结合彻底理解CORS
第一部分——第2章指针操作
. net core cross platform resource monitoring library and dotnet tool
salesforce零基础学习(九十八)Salesforce Connect & External Object
The interface testing tool eolinker makes post request
Development and deployment of image classifier application with fastai
实现图片的复制
Come and have a look! What is the relationship between AQS and countdownlatch?
随机推荐
选择API管理平台之前要考虑的5个因素
接口测试工具Eolinker进行post请求
Are there many Python application scenarios?
SAP S/4HANA 2020安装实录
用两个栈实现队列
LeetCode-15:三数之和
Why need to use API management platform
Using containers to store table data
非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue
存储过程动态查询处理方法
Case analysis of entitycore framework
第五章
The interface testing tool eolinker makes post request
教你如何 分析 Android ANR 问题
Programmers should know the URI, a comprehensive understanding of the article
程序员都应该知道的URI,一文帮你全面了解
Python features and building environment
AQS 都看完了,Condition 原理可不能少!
JVM真香系列:轻松理解class文件到虚拟机(上)
Come and have a look! What is the relationship between AQS and countdownlatch?