Создайте правило брандмауэра для программного открытия порта для каждого приложения в c # - PullRequest
5 голосов
/ 13 декабря 2011

Мне нужно открыть определенный порт для моего приложения.

Я попытался использовать правило INetFwAuthorizedApplication для каждого приложения для всех портов.

fwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app)

В качестве альтернативы открыть один порт для всех приложений, используяINetFwOpenPort.

firewallManager.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(port)

Можно ли программно открыть программно только один порт для каждого приложения?Я могу сделать это вручную через настройки брандмауэра.

Ответы [ 2 ]

5 голосов
/ 14 декабря 2011

Есть вопрос о блокировке соединений с ответом с инструкциями по созданию правил брандмауэра в C #.Вы должны быть в состоянии приспособить это для любого правила брандмауэра, которое я себе представляю.

https://stackoverflow.com/a/1243026/12744

Следующий код создает правило брандмауэра, которое блокирует любые исходящие соединения на всех ваших сетевых адаптерах:

using NetFwTypeLib; // Located in FirewallAPI.dll
...
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);
0 голосов
/ 19 августа 2018

Вы также можете просто использовать PowerShell.

using System.Management.Automation;
...
private void OpenPort(int port)
{
    var powershell = PowerShell.Create();
    var psCommand = $"New-NetFirewallRule -DisplayName \"<rule description>\" -Direction Inbound -LocalPort {port} -Protocol TCP -Action Allow";
    powershell.Commands.AddScript(psCommand);
    powershell.Invoke();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...