我们有一个向防火墙添加一些规则的应用程序。我们需要检索防火墙的规则,以便我们可以检查该规则是否存在于防火墙中。我正在使用 C#。
问问题
7824 次
4 回答
2
使用规则名称搜索防火墙规则并将其删除:
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");
}
}
于 2017-02-21T20:32:47.667 回答
1
如果不想为提供 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 程序集。
于 2018-12-03T20:50:59.397 回答
0
已编辑:INetFwPolicy2 是管理防火墙规则的 .Net 接口msdn INetFwPolicy2 有一个规则集合,其中包含此策略的所有规则。您可以使用 Lambda 查询规则集合,如下所示:
INetFwPolicy2 fwPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
fwPolicy2.Rules.OfType<INetFwRule>.Select....
和所有其他 Lambda 扩展。
于 2014-12-15T13:22:13.227 回答
0
你可以从这段代码中得到一个想法。
INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(typeFWPolicy2);
List<INetFwRule> RuleList = new List<INetFwRule>();
foreach (INetFwRule rule in fwPolicy2.Rules)
{
RuleList.Add(rule);
}
于 2014-01-28T08:55:55.890 回答