C# 防火墙操作之特定端口
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
针对将特定端口加入到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); } }
该文章在 2021/3/24 22:59:16 编辑过 |
关键字查询
相关文章
正在查询... |