2012-03-15 23 views
7

Tek tek kuralları Windows Güvenlik Duvarı'na (Server 2008 R2) dilbilgisel olarak ekleyebilirim, ancak IP adresi başına birden çok kuraldan kaçınmaya çalışıyorum ve yalnızca mevcut kuralı RemoteAddresses'i güncellemek istiyorum . Aşağıda, kuralları eklemek için kullandığım kod var, mevcut Uzaktan Erişim Kurallarını nasıl güncelleyeceğimi araştırmak için elimden gelenin en iyisini yapıyorum, ancak şanssız.Varolan güvenlik duvarı kuralını API kullanarak güncelleştirme

Herhangi bir yardım için teşekkür ederiz!

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

o etiketler için ne olduğunu, C# veya benzeri ile sorularınıza önek kaçının: bir kural yüzden bir kural var olup olmadığını oluşturulan veya emin olmak için bu geldi Varlığından. –

cevap

10

Aşağıdaki kod benim için çalışıyor:

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

Engellenen IP'nin engellenmesinin herhangi bir yolu var, demek istediğim kuralı güncellemek demek istiyorum – Arshad

+0

Kuralı değiştirebilirsiniz.RemoteAdresler (virgülle ayrılmış) –

+2

Bu kodu test edenler için ipucu: Değişiklikler anlatıldığı gibi devam eder, ancak _Windows Security_ uygulamasını, ekran yenilentikten sonraya kadar uygulayın. – HABO

4

Ayrıca ı olmadığını kontrol etmek basit bir yöntem çağrısı olduğunu bulduk (Ben Bir yorum eklemek olamaz üzgün) cevabı amdmax için

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); 
    }