mirror of
https://github.com/Tribufu/ServerManagers
synced 2026-08-10 05:01:05 +00:00
source code checkin
This commit is contained in:
parent
5f8fb2c825
commit
7e57b72e35
675 changed files with 168433 additions and 0 deletions
107
src/ServerManager.Common/Utils/FirewallUtils.cs
Normal file
107
src/ServerManager.Common/Utils/FirewallUtils.cs
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using WindowsFirewallHelper;
|
||||
using WindowsFirewallHelper.FirewallAPIv2.Rules;
|
||||
|
||||
/*
|
||||
WindowsFirewallHelper
|
||||
A class library to manage the Windows Firewall as well as adding your program to the Windows Firewall Exception list
|
||||
|
||||
=========================================================================
|
||||
USAGE
|
||||
Get an instance of the active firewall using FirewallManager class and
|
||||
use the properties to get the list of firewall rules and profiles.
|
||||
You can also use the methods on this class to add a new rule to the
|
||||
firewall.
|
||||
|
||||
CODE SAMPLE FOR ADDING AN APPLICATION RULE TO THE ACTIVE PROFILE:
|
||||
var rule = FirewallManager.Instance.CreateApplicationRule(FirewallManager.Instance.GetProfile().Type, @"MyApp Rule", FirewallAction.Allow, @"C:\MyApp.exe");
|
||||
rule.Direction = FirewallDirection.Outbound;
|
||||
FirewallManager.Instance.Rules.Add(rule);
|
||||
|
||||
CODE SAMPLE FOR ADDING A PORT RULE TO THE ACTIVE PROFILE:
|
||||
var rule = FirewallManager.Instance.CreatePortRule(FirewallManager.Instance.GetProfile().Type, @"Port 80 - Any Protocol", FirewallAction.Allow, 80, FirewallProtocol.Any);
|
||||
FirewallManager.Instance.Rules.Add(rule);
|
||||
|
||||
CODE SAMPLE TO GET A LIST OF ALL REGISTERED RULES:
|
||||
var allRules = FirewallManager.Instance.Rules.ToArray();
|
||||
|
||||
MORE SAMPLES:
|
||||
Check the Project's Github page at: https://github.com/falahati/WindowsFirewallHelper
|
||||
*/
|
||||
|
||||
|
||||
namespace ServerManagerTool.Common.Utils
|
||||
{
|
||||
/// <summary>
|
||||
/// Code for dealing with firewalls
|
||||
/// </summary>
|
||||
public static class FirewallUtils
|
||||
{
|
||||
public static bool CreateFirewallRules(string exeName, List<int> ports, string ruleName, string description = "")
|
||||
{
|
||||
var firewallManager = FirewallManager.Instance;
|
||||
|
||||
if (firewallManager.IsSupported)
|
||||
{
|
||||
DeleteFirewallRules(exeName);
|
||||
|
||||
// create the TCP rule
|
||||
var rule = firewallManager.CreateApplicationRule(FirewallProfiles.Domain | FirewallProfiles.Private | FirewallProfiles.Public, $"{ruleName} TCP", FirewallAction.Allow, exeName, FirewallProtocol.TCP);
|
||||
if (rule != null)
|
||||
{
|
||||
rule.Direction = FirewallDirection.Inbound;
|
||||
rule.IsEnable = true;
|
||||
rule.LocalPorts = ports.Select(p => (ushort)p).ToArray();
|
||||
|
||||
if (rule is StandardRule)
|
||||
{
|
||||
((StandardRule)rule).Description = description;
|
||||
}
|
||||
firewallManager.Rules.Add(rule);
|
||||
}
|
||||
|
||||
// create the UDP rule
|
||||
rule = firewallManager.CreateApplicationRule(FirewallProfiles.Domain | FirewallProfiles.Private | FirewallProfiles.Public, $"{ruleName} UDP", FirewallAction.Allow, exeName, FirewallProtocol.UDP);
|
||||
if (rule != null)
|
||||
{
|
||||
rule.Direction = FirewallDirection.Inbound;
|
||||
rule.IsEnable = true;
|
||||
rule.LocalPorts = ports.Select(p => (ushort)p).ToArray();
|
||||
|
||||
if (rule is StandardRule)
|
||||
{
|
||||
((StandardRule)rule).Description = description;
|
||||
}
|
||||
firewallManager.Rules.Add(rule);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool DeleteFirewallRules(string exeName)
|
||||
{
|
||||
var firewallManager = FirewallManager.Instance;
|
||||
|
||||
if (firewallManager.IsSupported)
|
||||
{
|
||||
// check for existing rules
|
||||
var rulesToDelete = firewallManager.Rules.Cast<StandardRule>().Where(r => !string.IsNullOrWhiteSpace(r.ApplicationName) && r.ApplicationName.Equals(exeName, StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
if (rulesToDelete != null && rulesToDelete.Count > 0)
|
||||
{
|
||||
// delete the existing rules
|
||||
rulesToDelete.ForEach(r => firewallManager.Rules.Remove(r));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue