2012-03-15 27 views
7

Tôi có thể thêm các quy tắc riêng lẻ theo ngữ pháp vào Tường lửa Windows (Server 2008 R2), tuy nhiên tôi đang cố gắng tránh nhiều quy tắc cho mỗi địa chỉ IP và muốn cập nhật quy tắc hiện tại RemoteAddresses . Dưới đây là mã tôi đang sử dụng để thêm quy tắc, tôi đang cố hết sức để nghiên cứu cách cập nhật các quy tắc hiện tại Địa chỉ từ xa, nhưng không có may mắn.Cập nhật quy tắc tường lửa hiện tại bằng cách sử dụng API

Mọi trợ giúp đều được đánh giá cao!

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

Vui lòng tránh thêm tiền tố cho câu hỏi của bạn bằng C# hoặc tương tự. –

Trả lời

10

Đoạn code dưới đây làm việc cho tôi:

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ó cách nào để bỏ chặn IP bị chặn, ý tôi là nói cập nhật quy tắc – Arshad

+0

Bạn có thể thay đổi quy tắc.RemoteAddresses (cách nhau bằng dấu phẩy) –

+2

Mẹo dành cho những người thử nghiệm mã này: Các thay đổi được duy trì như mô tả, nhưng có thể không xuất hiện trong _Windows Firewall với ứng dụng Advanced Security_ cho đến khi màn hình được làm mới. – HABO

4

Ngoài của amdmax câu trả lời (xin lỗi tôi không thể thêm một bình luận) tôi thấy rằng không có phương pháp gọi đơn giản để kiểm tra xem một quy tắc tồn tại nên tôi đã đưa ra điều này để đảm bảo rằng quy tắc được tạo cho dù quy tắc đó có tồn tại hay không:

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); 
    } 
Các vấn đề liên quan