软件编程
位置:首页>> 软件编程>> C#编程>> c# 防火墙添加/删除 特定端口的示例

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

作者:一只独行的猿  发布时间:2023-12-22 21:56:41 

标签:c#,防火墙,添加/删除,端口

针对将特定端口加入到windows系统的防火墙中,使其允许或禁止通过防火墙。其大概思路是:

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


/// <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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com