2012-03-15 11 views
7

Sono in grado di aggiungere regole individuali al firewall di Windows (Server 2008 R2), tuttavia sto cercando di evitare più regole per indirizzo IP e vorrei solo aggiornare la regola esistente RemoteAddresses . Di seguito è riportato il codice che sto usando per aggiungere regole, sto facendo del mio meglio per cercare come aggiornare le regole esistenti Indirizzi remoti, ma senza fortuna.Aggiornamento regola firewall esistente utilizzando l'API

Qualsiasi aiuto è apprezzato!

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

Si prega di evitare il prefisso delle domande con C# o simili, questo è ciò che i tag servono. –

risposta

10

Il seguente codice funziona per me:

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

c'è un modo per sbloccare l'IP bloccato, voglio dire aggiorna la regola – Arshad

+0

Puoi cambiare regola.RemoteAddresses (separati da virgola) –

+2

Suggerimento per chi prova questo codice: Le modifiche sono persistenti come descritto, ma potrebbero non apparire nel _Windows Firewall with Advanced Security_ applicazione fino a dopo l'aggiornamento del display. – HABO

4

Inoltre risposta (dispiace non posso aggiungere un commento) ho trovato che non v'è alcuna chiamata semplice metodo per controllare per vedere se di per amdmax esiste una regola quindi l'ho inventato per garantire che venga creata una regola, indipendentemente dal fatto che esista o meno:

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