2012-03-15 14 views
7

Mogę pro gramycznie dodawać indywidualne reguły do ​​Zapory systemu Windows (Server 2008 R2), jednak staram się unikać wielu reguł dla każdego adresu IP i chciałbym tylko zaktualizować istniejącą regułę RemoteAddresses . Poniżej znajduje się kod, którego używam do dodawania reguł, robię co w mojej mocy, aby badać, jak zaktualizować istniejące reguły Remote Address, ale bez powodzenia.Aktualizowanie istniejącej reguły zapory za pomocą interfejsu API

Każda pomoc jest doceniana!

string ip = "x.x.x.x"; 

INetFwRule2 firewallRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule")); 

firewallRule.Name = "Block Bad IP Addresses"; 
firewallRule.Description = "Block Nasty Incoming Connections from IP Address."; 
firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK; 
firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; 
firewallRule.Enabled = true; 
firewallRule.InterfaceTypes = "All"; 
firewallRule.RemoteAddresses = ip; 

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); 
firewallPolicy.Rules.Add(firewallRule); 
+0

Proszę unikać wstępnego wpisywania pytań za pomocą C# lub podobnego, po to są te znaczniki. –

Odpowiedz

10

Poniższy kod działa dla mnie:

INetFwPolicy2 firewallPolicy = (INetFwPolicy2) Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); 

var rule = firewallPolicy.Rules.Item("Block Bad IP Addresses"); // Name of your rule here 
rule.Name = "Block Block Block"; // Update the rule here. Nothing else needed to persist the changes 
+0

czy istnieje sposób odblokowania zablokowanego adresu IP, mam na myśli aktualizację reguły – Arshad

+0

Możesz zmienić rule.RemoteAddresses (oddzielone przecinkami) –

+2

Wskazówka dla osób testujących ten kod: Zmiany są zachowywane zgodnie z opisem, ale mogą nie pojawić się w _Windows Firewall z aplikacją Advanced Security_, dopóki ekran nie zostanie odświeżony. – HABO

4

Oprócz amdmax na odpowiedź (przepraszam nie mogę dodać komentarza) Okazało się, że nie istnieje prosta metoda połączenia sprawdzić, czy istnieje reguła, więc wymyśliłem to, aby zapewnić utworzenie reguły, niezależnie od tego, czy istnieje, czy nie:

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
     Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); 

    INetFwRule firewallRule = firewallPolicy.Rules.OfType<INetFwRule>().Where(x => x.Name == RULE_NAME).FirstOrDefault(); 

    if (firewallRule == null) 
    { 
    firewallRule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule")); 
    firewallRule.Name = RULE_NAME; 
    firewallPolicy.Rules.Add(firewallRule); 
    } 
Powiązane problemy