3 changed files with 85 additions and 1 deletions
@ -0,0 +1,71 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using NetFwTypeLib; |
|||
|
|||
namespace DyeingComputer.UserClass |
|||
{ |
|||
public class NetFwManger |
|||
{ |
|||
private static string GetName(int port, string protocol) |
|||
{ |
|||
return "800-port-" + protocol + "-" + port; |
|||
} |
|||
|
|||
public static void AllowPort(int port, string protocol) |
|||
{ |
|||
|
|||
DelPort(port, protocol); |
|||
//创建一个INetFwRule对象
|
|||
Type type = Type.GetTypeFromProgID("HNetCfg.FwRule"); |
|||
INetFwRule rule = (INetFwRule)Activator.CreateInstance(type); |
|||
|
|||
//设置规则的属性
|
|||
rule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; //允许连接
|
|||
rule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; //入站规则
|
|||
rule.Enabled = true; //启用规则
|
|||
rule.InterfaceTypes = "All"; //适用于所有网络接口
|
|||
rule.Name = GetName(port, protocol); //规则名称
|
|||
if (protocol.ToLower() == "tcp") |
|||
{ |
|||
rule.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; //TCP协议
|
|||
} |
|||
else |
|||
{ |
|||
rule.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; //UDP协议
|
|||
} |
|||
|
|||
rule.LocalPorts = "" + port; //本地端口号
|
|||
|
|||
//获取FirewallPolicy对象
|
|||
Type policyType = Type.GetTypeFromProgID("HNetCfg.FwPolicy2"); |
|||
INetFwPolicy2 policy = (INetFwPolicy2)Activator.CreateInstance(policyType); |
|||
|
|||
//将规则添加到防火墙策略中
|
|||
policy.Rules.Add(rule); |
|||
} |
|||
|
|||
public static void DelPort(int port, string protocol) |
|||
{ |
|||
//获取FirewallPolicy对象
|
|||
Type policyType = Type.GetTypeFromProgID("HNetCfg.FwPolicy2"); |
|||
INetFwPolicy2 policy = (INetFwPolicy2)Activator.CreateInstance(policyType); |
|||
|
|||
//获取现有的规则集合
|
|||
INetFwRules rules = policy.Rules; |
|||
|
|||
//查找名称的规则并删除它
|
|||
foreach (INetFwRule rule in rules) |
|||
{ |
|||
if (rule.Name == GetName(port, protocol)) |
|||
{ |
|||
rules.Remove(rule.Name); |
|||
Console.WriteLine(@"Firewall rule deleted successfully."); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue