是否有任何 .NET API 来获取所有防火墙规则

本文关键字:防火墙 规则 获取 API 任何 NET 是否 | 更新日期: 2023-09-27 18:32:34

我们有一个应用程序,它为防火墙添加了一些规则。我们需要检索防火墙的规则,以便我们可以检查防火墙中是否存在该规则。我正在使用 C#。

是否有任何 .NET API 来获取所有防火墙规则

使用规则名称搜索防火墙规则并将其删除:

public static void RemoveFirewallRules(string RuleName)
{
    try
    {
        Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
        INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
        var currentProfiles = fwPolicy2.CurrentProfileTypes;               
        // List of rules
        // List<INetFwRule> RuleList = new List<INetFwRule>();
        foreach (INetFwRule rule in fwPolicy2.Rules)
        {
            // Add a rule to list
            // RuleList.Add(rule);
            // Console.WriteLine(rule.Name);
            if (rule.Name.IndexOf(RuleName) != -1)
            {
                // Remove a rule
                INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));                     
                firewallPolicy.Rules.Remove(rule.Name);
                Console.WriteLine(rule.Name + " has been deleted from the Firewall Policy");
            }
        }
    }
    catch (Exception r)
    {
        Console.WriteLine("Error deleting a Firewall rule");
    }
}

如果不想添加对提供 INetFwPolicy2 接口的程序集的额外引用,则可以使用 C# 中的动态类来反映"HNetCfg.FwPolicy2"类型。请参阅此工作代码:

Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
dynamic fwPolicy2 = Activator.CreateInstance(tNetFwPolicy2) as dynamic;                          
IEnumerable Rules = fwPolicy2.Rules as IEnumerable;
foreach (dynamic rule in Rules)
  {
  if (rule.Name=="My firewall rule")
    {
    }                              
  }

请注意,以这种方式使用动态对象需要引用 Microsoft.CSharp 程序集。

你可以从这段代码中得到一个想法。

INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(typeFWPolicy2);
List<INetFwRule> RuleList = new List<INetFwRule>();
foreach (INetFwRule rule in fwPolicy2.Rules)
{
  RuleList.Add(rule);
}

已编辑:INetFwPolicy2 是一个用于管理防火墙规则 msdn 的 .Net 接口。INetFwPolicy2 有一个规则集合,其中包含此策略的所有规则。您可以使用 Lambda 查询规则集合,如下所示:

INetFwPolicy2 fwPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
fwPolicy2.Rules.OfType<INetFwRule>.Select....

和所有其他 Lambda 扩展。