C# 为WindowsDefender防火墙已经存在的入站规则添加IP地址

    /// <summary>
    /// windows防火墙入站规则IP添加器
    /// </summary>
    internal class NetFwRuleIPAdder {
        readonly string ruleName;
        readonly object _lock = new object();
        /// <summary>
        /// 创建一个添加器,可以将指定IP添加到ruleName规则中
        /// </summary>
        /// <param name="ruleName">规则名称</param> 
        public NetFwRuleIPAdder(string ruleName) {
            this.ruleName = ruleName;
        }
        /// <summary>
        /// 获取规则对象
        /// </summary>
        INetFwRule GetNetFwRule() {
            INetFwRule netFwRule = null;
            INetFwPolicy2 netFwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
            foreach (INetFwRule rule in netFwPolicy2.Rules) {
                if (rule.Name == ruleName && rule.Direction == NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN) { //匹配规则名和入站规则
                    netFwRule = rule;
                    break;
                }
            }
            if (netFwRule == null) {
                throw new Exception("未匹配到:" + ruleName + ",请先手动创建该规则");
            }
            return netFwRule;
        }
        /// <summary>
        /// 向当前防火墙规则中添加IP
        /// </summary>
        public void AddIP(string ip) {
            lock (_lock) {
                var netFwRule = GetNetFwRule();
                if (string.IsNullOrEmpty(netFwRule.RemoteAddresses)) {
                    netFwRule.RemoteAddresses = ip;
                } else {
                    if (netFwRule.RemoteAddresses.Split(',').Contains(ip) == false) {
                        netFwRule.RemoteAddresses = netFwRule.RemoteAddresses + "," + ip;
                    }
                }
                LogHelper.Info(ip + " 添加完毕");
            }
        }
    }

 

posted @ 2025-02-24 11:33  WmW  阅读(62)  评论(0)    收藏  举报