创建防火墙规则以在 C# 中以编程方式打开每个应用程序的端口

发布于 2024-12-21 10:25:34 字数 393 浏览 0 评论 0原文

我需要为我的应用程序打开特定端口。

我已尝试对所有端口的每个应用程序使用 INetFwAuthorizedApplication 规则。

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

或者使用 INetFwOpenPort 为所有应用程序打开一个端口。

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

有没有办法以编程方式仅打开每个应用程序的单个端口? 我可以通过防火墙设置手动完成此操作。

I need to open specific port for my application.

I have tried using INetFwAuthorizedApplication rule per application for all ports.

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

Alternatively open one port for all appllications using INetFwOpenPort.

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

Is there any way to programmatically open only single port per application programmatically?
I can do it manually through firewall settings.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别忘他 2024-12-28 10:25:35

您也可以只使用 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();
}

You could also just use 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();
}
つ低調成傷 2024-12-28 10:25:35

有一个关于阻止连接的问题,其答案包含在 C# 中创建防火墙规则的说明。您应该能够适应我想象的任何类型的防火墙规则。

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

以下代码创建一条防火墙规则,阻止任何传出
所有网络适配器上的连接:

使用 NetFwTypeLib; // 位于 FirewallAPI.dll 中
...
INetFwRule 防火墙规则 = (INetFwRule)Activator.CreateInstance(
    Type.GetTypeFromProgID("HNetCfg.FWRule"));
防火墙规则.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
firewallRule.Description = "用于阻止所有互联网访问。";
firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT;
防火墙规则.Enabled = true;
firewallRule.InterfaceTypes = "全部";
firewallRule.Name = "阻止互联网";

INetFwPolicy2 防火墙策略 = (INetFwPolicy2)Activator.CreateInstance(
    Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
防火墙策略.Rules.Add(firewallRule);

There's a question about blocking connections with an answer with instructions for creating firewall rules in C#. You should be able to adapt this for any kind of firewall rule I imagine.

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

The following code creates a firewall rule that blocks any outgoing
connections on all of your network adapters:

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文