网际飞扬

还记得年少时的梦么,醒不过来 便信以为真……

主题背景
本网站首发版本创建于1999年4月
网际飞扬
手机网站二维码

请使用手机扫描二维码,登录网站手机版。

c#操作windows防火墙的代码实例

  • 2023-02-04
  • 2037
  • 飞驰的心

windows自带的防火墙,可以说是windows操作系统最后一道防线,虽然系统外围可能有硬件防火墙,但外围防火墙往往设置的规则颗粒比较大,如果需要进行细微规则调整,一般还是对本地系统进行软防火墙设置比较常见。例如:临时封锁或开启某个规则,既希望让用户能自己修改,又不希望向用户开放windows管理员权限和远程桌面,这时c#操作windows防火墙有很强的现实意义。


/// SoftwareDistribution11
 /// 添加防火墙例外端口
 /// 
 /// 名称
 /// 端口
 /// 协议(TCP、UDP)
 /// 范围类型
 /// 自定义范围时的IP地址范围
 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);
 }
  删除规则比较简单:创建防火墙实例,直接移除某种通信类型的端口就行。

/// 
 /// 删除防火墙例外端口
 /// 
 /// 端口
 /// 协议(TCP、UDP)
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);
    }
}



这个以上这个功能

本博客所有内容均为原创,原则上我不希望你转载。如特别喜欢而转载的话,请务必注明出处“网际飞扬 http://www.fayo.net” 否则本人闲来无事可能会把你误当成维权的靶子。

评论

验证码

全部评论

共{{commentCount}}条
  • {{i+1}}楼
    {{rs.Msg_Sender}}{{rs.Msg_Datetime}}

    {{rs.Msg_Content}}

播放器封面
  • 宠物精灵