2012-03-15 11 views
7

Windowsファイアウォール(Server 2008 R2)に個々のルールを文法的に追加することはできますが、IPアドレスごとに複数のルールを避けようとしており、既存のルールRemoteAddresses 。以下は、ルールを追加するために使用しているコードです。私は、既存のルールのリモートアドレスを更新する方法を研究するために最善を尽くしていますが、運がないとします。APIを使用して既存のファイアウォールルールを更新する

ご協力いただきましてありがとうございます。

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

あなたの質問の前に、C#などの接頭辞を付けないようにしてください。 –

答えて

10

次のコードは、私の作品:

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

ブロックされたIPのブロックを解除する方法はありますか? – Arshad

+0

rule.RemoteAddresses(カンマ区切り)を変更することができます –

+2

このコードをテストするヒント:変更は説明どおりに保持されますが、ディスプレイがリフレッシュされるまで、_Windows Firewall with Advanced Security_アプリケーションを実行します。 – HABO

4

amdmaxの答えに加えて(申し訳ありませんが、私はコメントを追加することはできません)私は、単純なメソッド呼び出しがかどうかを確認することがないことがわかりましたルールが存在するので、ルールが存在するかどうかにかかわらず作成されます。

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); 
    } 
関連する問題