1

我们有很多机器,当其中一台机器上的客户要求我们屏蔽一些 IP 时,这可能是一件非常痛苦的事情。我们运行游戏服务器,所以一般需要屏蔽的IP可以是任意IP、任意端口等。

我想编写一个小应用程序来简化在 Server 2008 中添加 IP 禁令。有没有什么好的方法可以做到这一点,无论是通过 IPSec 还是 Windows 防火墙?有些机器关闭了防火墙,因此首选 IPSec,但两者都可以。

4

2 回答 2

3

非常感谢您提供的链接。我能够使用以下代码来实现这一点。您仍然需要获取 FWManager 对象才能使用。

private void btnBlock_Click(object sender, EventArgs e)
{
    String IP = txtAddress.Text;
    txtAddress.Clear();

    if (IsAddressValid(IP))
    {
        INetFwRule2 firewallRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));

        firewallRule.Name = "BrutalNT: IP Access Block " + txtAddress.Text;
        firewallRule.Description = "Block 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 = txtAddress.Text;

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

        String msg = "IP Address \"" + IP + "\" Blocked Successfully!";
        MessageBox.Show(msg, "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    else
    {
        String msg = "IP Address \"" + IP + "\" was Invalid!";
        MessageBox.Show(msg, "Failed", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
}
于 2011-11-30T01:55:54.890 回答
0

前段时间我也在寻找类似的解决方案。最后我们选择了一些不同的方法来解决我们的问题,但我仍然记得有一个用于 Windows 防火墙的 API。不幸的是,我没有保存 URL,但你可以用谷歌搜索“C# windows firewall API”。这里有几个链接:

  1. (示例在 VBScript 中)http://msdn.microsoft.com/en-us/library/windows/desktop/aa366415%28v=vs.85%29.aspx
  2. http://social.msdn.microsoft.com/Forums/en-US/windowssecurity/thread/10c6ff4b-701b-4351-a3d8-a716d8831a66/
  3. http://blogs.msdn.com/b/securitytools/archive/2009/08/21/automating-windows-firewall-settings-with-c.aspx

编辑 类似的问题:使用 C# 在 Windows Server 上添加和删除 IPSec 策略的选项是什么?

祝你好运!

于 2011-11-28T10:46:08.497 回答