允许/阻止程序






4.93/5 (6投票s)
这是一种通过防火墙允许或阻止程序的一种快速方法。
引言
这是一个允许/阻止可执行文件通过防火墙的单一方法。我为我的一个应用程序编写了这个方法,并决定在这里发布,供大家使用。
背景
这里的想法是使用位于 (C:\windows\system32\FirewallAPI.dll) 的 NetFwTypeLib
来添加一个规则,该规则允许/阻止指定路径的可执行文件建立任何类型的连接。
Using the Code
首先,必须将 FirewallAPI.dll 添加到引用中,并将 NetFwTypeLib
添加到 using
语句中。
然后,您可以使用以下方法
/// <summary>
/// Adds or removes a firewall rule.
/// </summary>
/// <param name="path">The path to the executable.</param>
/// <param name="d">The affected connection type.</param>
/// <param name="fwaction">Rule action.</param>
/// <param name="action">"Add (1) or
/// remove (0) the specified rule."</param>
private void FWRule(string path, NET_FW_RULE_DIRECTION_ d,
NET_FW_ACTION_ fwaction, string action)
{
try
{
INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(
Type.GetTypeFromProgID("HNetCfg.FWRule"));
firewallRule.Action = fwaction;
firewallRule.Enabled = true;
firewallRule.InterfaceTypes = "All";
firewallRule.ApplicationName = path;
firewallRule.Name = "CSwitch: " + Path.GetFileName(path);
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance
(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallRule.Direction = d;
if (action == "1") firewallPolicy.Rules.Add(firewallRule);
else firewallPolicy.Rules.Remove(firewallRule.Name);
}
catch (Exception ex) { MessageBox.Show(ex.Message, "ERROR"); }}} }
示例
FWRule(@"C:\test.exe", NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT,
NET_FW_ACTION_.NET_FW_ACTION_BLOCK, "1");
这将阻止 test.exe 建立任何外向连接。
关注点
在编写此代码时,我注意到多次使用相同的 INetFwRule
变量可能会引发灾难性错误(访问被拒绝)异常。