Правильные настройки для правила брандмауэра C # - PullRequest
0 голосов
/ 18 декабря 2011

У меня новый вопрос, какие настройки брандмауэра нужны для блокировки IP-адреса? Я нашел свойство «RemoteAddress», например firewallRule.RemoteAddress, но я не знаю, как его использовать. Это то, что я нашел в stackoverflow (следующий код блокирует весь доступ к Интернету), спасибо.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NETCONLib;
using NATUPNPLib;
using NetFwTypeLib;

namespace WindowsFormsApplication1
{

public class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
        INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(
        Type.GetTypeFromProgID("HNetCfg.FWRule"));
        firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
        firewallRule.Description = "Used to block all internet access.";
        firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT;
        firewallRule.Enabled = true;
        firewallRule.InterfaceTypes = "All";
        firewallRule.Name = "Block Internet";

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

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Насколько я могу судить, вы должны сначала получить список RemoteAddresses, прежде чем добавлять к нему.В противном случае он просто перезаписывает каждый IP следующим.Формат должен быть таким, как Ян описал в своем ответе.Однако подсеть "/255.255.255.255" не требуется при добавлении одного IP-адреса.Мое приложение блокирует только один ip за раз, но вы можете добавить туда диапазоны, как описывает Ян.Большая часть кредитов достается другим на SO, за исключением части RemoteAddresses.Если есть способ лучше / чище, я бы с удовольствием его услышал.Вот как я это сделал:

        private void BlockIp(string ip, string ruleName)
        {
            INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
            INetFwRule firewallRule = firewallPolicy.Rules.OfType<INetFwRule>().Where(x => x.Name == ruleName).FirstOrDefault();

            if (firewallRule == null)
            {
                firewallRule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
                firewallRule.Name = ruleName;
                firewallPolicy.Rules.Add(firewallRule);
                firewallRule.Description = "Block inbound traffic";
                firewallRule.Profiles = (int)NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_ALL;
                firewallRule.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;
                firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN;
                firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
                //firewallRule.LocalPorts = "8080";
                //firewallRule.Grouping = "@firewallapi.dll,-23255";
                firewallRule.Enabled = true;
                firewallRule.RemoteAddresses = ip;
                //firewallPolicy.Rules.Add(firewallRule); //throws error, not needed
            } else {
                var remoteAddresses = firewallRule.RemoteAddresses;
                firewallRule.RemoteAddresses = remoteAddresses + "," + ip;
            }
        }
0 голосов
/ 10 февраля 2012

Вы можете использовать список IP-адресов (подсетей, псевдонимов), разделенных запятыми

$Rule.RemoteAddresses = RemoteAddresses = 'LocalSubnet,10.1.1.1/255.255.255.255,12.5.0.0/255.255.0.0'
...