zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    redis实现电商购物车
    redis应用于各种结构型和非结构型高热度数据访问加速
    Redis控制热点新闻的实效性
    Redis实现分表操作id唯一
    KrakenD网关V1.0.0文档初步翻译
    CentOS7环境下安装Chrome
    七夕秀恩爱新姿势!这波操作我给十分!
    小程序&#183;云开发实战
    小程序&#183;云开发实战
    小程序云开发实战
  • 原文地址:https://www.cnblogs.com/pilgrim/p/11167461.html
Copyright © 2011-2022 走看看