目前我们正在使用
NetFwTypeLib
COMReference 为应用程序添加防火墙规则,但它仅适用于 Windows
public static bool AddRule(Firewall Rule){
INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
firewallRule.Description = rule.RuleDescription;
firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN;
firewallRule.Enabled = true;
firewallRule.ApplicationName = rule.ApplicationPath;
firewallRule.RemoteAddresses = "LocalSubnet";
firewallRule.InterfaceTypes = "All";
firewallRule.Name = rule.RuleName;
switch (rule.Protocol)
{
case FirewallRule.ProtocolType.TCP:
firewallRule.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; break;
case FirewallRule.ProtocolType.UDP:
firewallRule.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; break;
default:
throw new ArgumentOutOfRangeException("rule", "The Protocol property of the firewall rule contains an invalid value!");
}
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Add(firewallRule);
return true;
} 这种和平的代码仅在 Windows 中受支持,所以我如何将这种和平的代码替换到其他库中,以便我们的代码也可以在 Linux 上运行。
没有一个库可以涵盖所有防火墙产品。正如评论中提到的,大多数 Windows 用户都使用内置的 Windows 防火墙。有些使用其他产品,例如 ZoneAlarm。 Linux 也是如此:Ubuntu 有
ufw
,其他发行版使用 iptables
。即便如此,没有人强迫你在 Ubuntu 上使用 ufw
,如果你愿意的话,你可以使用完全不同的防火墙。每个防火墙产品都有不同的 API,您需要单独处理它们。
另请注意,在 StackOverflow 上询问书籍或图书馆推荐通常不是主题,这就是为什么我会投票结束这个问题。