Обновление существующего правила брандмауэра с использованием API - PullRequest
9 голосов
/ 15 марта 2012

Я могу программно добавлять отдельные правила в брандмауэр Windows (Server 2008 R2), однако я стараюсь избегать нескольких правил для каждого IP-адреса и просто хочу обновить существующее правило RemoteAddresses. Ниже приведен код, который я использую для добавления правил. Я прилагаю все усилия, чтобы выяснить, как обновить существующие правила для удаленных адресов, но безуспешно.

Любая помощь приветствуется!

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);

Ответы [ 2 ]

10 голосов
/ 15 марта 2012

Код ниже работает для меня:

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
5 голосов
/ 04 июня 2014

В дополнение к ответу 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);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...