2012-04-26 59 views
2

我們有一個應用程序,它將一些規則添加到防火牆。我們需要檢索防火牆的規則,以便我們檢查規則是否存在於防火牆中。 我正在使用C#。是否有任何.NET API來獲得所有防火牆規則

+0

[這裏](http://www.codeproject.com/Articles/19003/The-managed-classes-to-read-Windows-Firewall- confi),您可以在閱讀Windows Vista防火牆的屬性設置中找到一篇舊文章。不知道它是否仍然有效 – Steve 2012-04-26 22:35:55

+0

它仍然有效。 – 2012-04-27 00:11:35

+0

這是否適用於所有OS? – User123 2012-04-27 02:09:50

回答

0

你可以從這段代碼中得到一個想法。

INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(typeFWPolicy2); 

List<INetFwRule> RuleList = new List<INetFwRule>(); 

foreach (INetFwRule rule in fwPolicy2.Rules) 
{ 
    RuleList.Add(rule); 
} 
0

編輯: INetFwPolicy2是一個.NET的界面來管理防火牆規則msdn INetFwPolicy2有一個規則集合包含此政策的所有ruls。 您可以查詢規則收集和λ,如下:

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

和所有其他LAMBDA擴展。

+0

您應該通過顯示fwPolicy2的類型(最好是完全限定名稱)並最好鏈接到其文檔來真正改進此答案。 – nos 2014-12-15 13:27:55

+0

你有權利,我會編輯我的答案。 – IFink 2014-12-18 12:16:53

0

與名稱搜索規則,並刪除它:

public static void RemoveFirewallRules(string RuleName = "BreakermindCom") 
{ 
    try 
    { 
     Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2"); 
     INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2); 
     var currentProfiles = fwPolicy2.CurrentProfileTypes;    

     // Lista rules 
     // List<INetFwRule> RuleList = new List<INetFwRule>(); 

     foreach (INetFwRule rule in fwPolicy2.Rules) 
     { 
      // Add rule to list 
      // RuleList.Add(rule); 
      // Console.WriteLine(rule.Name); 
      if (rule.Name.IndexOf(RuleName) != -1) 
      { 
       // Now remove rule 
       INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));      
       firewallPolicy.Rules.Remove(rule.Name); 
       Console.WriteLine(rule.Name + " has been deleted from Firewall Policy"); 
      } 
     } 
    } 
    catch (Exception r) 
    { 
     Console.WriteLine("Error delete rule from firewall"); 
    }}