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

Posted

技术标签:

【中文标题】在 C# 中以编程方式创建防火墙规则以打开每个应用程序的端口【英文标题】:Create firewall rule to open port per application programmatically in c# 【发布时间】:2012-01-19 06:26:06 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

我希望这是不可能的,否则我在安全软件上的投资就是浪费钱。您是否 100% 确定您甚至需要打开端口,大多数应用程序甚至不需要这样做,即使它们向用户提供了如何执行此操作的说明。 “如果可能的话,我也不需要打开 UDP”是什么意思,这句话没有意义。 我试图限制更多,而不是打开太多。通过将我的应用程序添加到 AuthorizedApplications 应用程序能够在所有本地和远程端口上侦听/通信。我真的只需要为一个端口打开我的应用程序。当您手动创建防火墙规则时,您只能指定应用程序和特定端口。 UDP 与 TCP 并不那么重要,这只意味着我不必在防火墙上设置两个入站规则。我会把它从我的问题中删除,因为它真的是第二个问题。 【参考方案1】:

有一个关于阻止连接的问题,答案是在 C# 中创建防火墙规则的说明。您应该能够针对我想象的任何类型的防火墙规则进行调整。

https://***.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);

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于在 C# 中以编程方式创建防火墙规则以打开每个应用程序的端口的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中以编程方式创建 WCF 客户端的标头(wsse)部分

如何在 C# 或 Perl 中以编程方式打开 PowerPoint 演示文稿并将其保存为 HTML/JPEG?

如果应用程序具有应用程序清单,如何在 C# 中以编程方式获取?

如何在 Sharepoint 的 c# 非可视 Web 部件中以编程方式创建进度更新控件

以编程方式管理 Windows 防火墙

如何在 C# 中以编程方式安装 Windows 服务?