欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

c# 防火墙添加/删除 特定端口的示例

时间:2022-02-08 11:52:59|栏目:.NET代码|点击:

  针对将特定端口加入到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);
  }
}

上一篇:C#泛型的使用及示例详解

栏    目:.NET代码

下一篇:C#使用foreach循环遍历数组完整实例

本文标题:c# 防火墙添加/删除 特定端口的示例

本文地址:http://www.codeinn.net/misctech/192756.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有