c# 防火墙添加/删除 特定端口的示例
作者:一只独行的猿 时间:2023-12-22 21:56:41
针对将特定端口加入到windows系统的防火墙中,使其允许或禁止通过防火墙。其大概思路是:
/// <summary>
/// 添加防火墙例外端口
/// </summary>
/// <param name="name">名称</param>
/// <param name="port">端口</param>
/// <param name="protocol">协议(TCP、UDP)</param>
/// <param name="scope">范围类型</param>
/// <param name="remoteAddresses">自定义范围时的IP地址范围</param>
public static void AllowPortsUseFirewall(string name, int port, string protocol, NET_FW_SCOPE_ scope,string remoteAddresses)
{
//创建firewall管理类的实例: Type的GetTypeFromProgID是通过注册表信息项目创建实例类型
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
//判断网络类型,是TCP还是UDP
NET_FW_IP_PROTOCOL_ protocolType = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP;
if (protocol.ToUpper() == "TCP")
{
protocolType = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;
}
//查找以前是否有相同的规则创建,如果有则不再创建新的规则
foreach (INetFwOpenPort mPort in netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts)
{
if (mPort.Protocol == protocolType && mPort.Port == port)
{
return;
}
}
//创建一个防火墙端口管理实例
INetFwOpenPort objPort = (INetFwOpenPort)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwOpenPort"));
//设置端口实例名称
objPort.Name = name;
//设置端口信息
objPort.Port = port;
//端口管理的网络类型
objPort.Protocol = protocolType;
/*
* NET_FW_SCOPE_ALL 范围是所有地址。
* NET_FW_SCOPE_CUSTOM 自定义范围。
* NET_FW_SCOPE_LOCAL_SUBNET 范围是本地子网。
* NET_FW_SCOPE_MAX 使用仅用于测试。不意味着为应用程序实现。
*/
//端口的范围,针对哪类或哪个IP地址
objPort.Scope = scope;
//此处可以指定IP地址版本信息
//objPort.IpVersion = NET_FW_IP_VERSION_.NET_FW_IP_VERSION_V4;
//自定义IP地址范围
if (objPort.Scope == NET_FW_SCOPE_.NET_FW_SCOPE_CUSTOM)
{
//这而需要移除多个地址之间的空白字符串,有空白字符串会出现设置异常
objPort.RemoteAddresses = remoteAddresses.Replace(" ", ""); ;//"192.168.1.10,192.168.1.12.......";
}
//是否启用规则
objPort.Enabled = true;
//加入到本地防火墙管理规则中。
netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(objPort);
}
删除规则比较简单:创建防火墙实例,直接移除某种通信类型的端口就行。
/// <summary>
/// 删除防火墙例外端口
/// </summary>
/// <param name="port">端口</param>
/// <param name="protocol">协议(TCP、UDP)</param>
public static void DeletePortsUseFirewall(int port, string protocol)
{
//创建firewall管理类的实例: Type的GetTypeFromProgID是通过注册表信息项目创建实例类型
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
//移除特定类型的通信方式的端口
if (protocol == "TCP")
{
netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove(port, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP);
}
else
{
netFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove(port, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP);
}
}
来源:https://www.cnblogs.com/pilgrim/p/11167461.html
标签:c#,防火墙,添加/删除,端口
0
投稿
猜你喜欢
AndroidStudio实现能在图片上涂鸦程序
2023-09-14 06:57:02
C#开启线程的四种示例
2022-06-01 13:04:37
Spring Cloud Eureka 注册与发现操作步骤详解
2022-06-25 07:11:12
kotlin浅析when与循环的使用
2022-01-13 01:23:57
详解Java实践之建造者模式
2023-01-14 23:03:13
JAVA实现的CrazyArcade泡泡堂游戏
2022-12-25 11:55:23
详解Java单元测试之JUnit篇
2023-06-12 16:42:13
Java ArrayList中存放引用数据类型的方式
2023-11-16 15:23:46
基于C#实现的仿windows左侧伸缩菜单效果
2023-01-22 18:44:54
Android App中实现可以双击放大和缩小图片功能的实例
2023-04-01 16:41:17
Android token过期刷新处理的方法示例
2023-11-23 14:11:40
Java如何处理延迟任务过程解析
2022-04-29 15:11:37
java转化为exe程序步骤详解
2022-05-01 10:10:43
Android手机抓包步骤
2022-05-03 18:15:59
Android编程调用Camera和相册功能详解
2023-12-15 00:09:23
深入浅析Android坐标系统
2021-12-15 05:26:34
使用Spring Data Redis实现数据缓存的方法
2021-08-02 10:19:25
Java中List Set和Map之间的区别_动力节点Java学院整理
2022-12-11 04:57:38
WPF实现平面三角形3D运动效果
2021-10-25 02:35:02
SpringBoot配置shiro安全框架的实现
2023-09-07 19:55:38