| 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 编辑过 | 关键字查询 相关文章 正在查询... |