Create firewall rule to open port per application programmatically in c#
17,411
Solution 1
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);
Solution 2
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();
}
Author by
Marek
Updated on July 01, 2022Comments
-
Marek almost 2 years
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.