2016-05-14 232 views
0

我有一个按钮,一旦点击后,它会向防火墙添加新规则。但问题是它可以多次点击并添加许多规则。如何检查防火墙规则是否存在

如何检查规则是否存在于防火墙中? (或者是能够检验规则?)

这里是我的代码添加一条规则:

ProcessStartInfo run = new ProcessStartInfo(); 
run.FileName = "cmd.exe"; 
run.Verb = "runas"; 
run.Arguments = "/C netsh advfirewall firewall add rule name=\"Block IP Rule\" dir=in interface=any action=block remoteip=x.x.x.x"; 
run.WindowStyle = ProcessWindowStyle.Hidden; 
Process.Start(run); 
+1

尝试删除现有规则,然后重新添加: ),认为简单 – Oli

+0

感谢您的最简单的想法,从来没有想过的:D – newbieguy

回答

3
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 add the 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"); 
    }} 

作品...:}

+0

http://stackoverflow.com/questions/15409790/adding-an-application-firewall-rule-to-both-private-and-public- networks-via-win7 – 2017-02-21 20:43:23

+0

谢谢,虽然我尝试了Oli最简单的想法,但在我的情况下更好。 – newbieguy

+0

https://github.com/fxstar/Chash/blob/master/C%23FirewallBanAllowIPfromMysql.cs这里的示例与MySQL数据库禁止和允许IP地址 – 2017-02-22 11:35:37

相关问题