如何添加规则以阻止 chrome 或 firefox 等程序使用 Window 防火墙或 netsh advfirewall-C# 访问任何 IP 地址?

Posted

技术标签:

【中文标题】如何添加规则以阻止 chrome 或 firefox 等程序使用 Window 防火墙或 netsh advfirewall-C# 访问任何 IP 地址?【英文标题】:How to add rule to block program like chrome or firefox from accessing any Ip address using Window firewall or netsh advfirewall-C#? 【发布时间】:2021-11-04 09:34:11 【问题描述】:

我想使用 netsh advfirewall 防火墙添加一条规则,以阻止任何程序(如 chrome 或 firefox)访问特定 Ips?感谢您的帮助!!!

这是我尝试过的代码,但它不起作用。请指导我。

  ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = "/c netsh advfirewall firewall add rule name=Block inbound traffic from 192.168.0.2 over TCP port 4000 dir=in action=block program=C:/Program Files/Mozilla Firefox/Firefox.exe enable=yes protocol=TCP remoteip=192.168.0.2 profile=domain,private,public";
        startInfo.Verb = "runas";
        process.StartInfo = startInfo;
        process.Start();

【问题讨论】:

【参考方案1】:

我无法帮助您解决 netsh 的问题(也不知道您为什么从 C# 调用它),但 netsh 调用最明显的错误是 program=C:/Program Files/Mozilla Firefox/Firefox.exe 参数中缺少对空格的引用。由于空格被用作参数分隔符,它被解析为三个单独的参数,program=c:/ProgramFiles/MozillaFirefox/Firefox.exe。您可以在Arguments 描述中看到最简单的修复:在路径周围添加转义引号,即"... program=\"C:/Program Files/Mozilla Firefox/Firefox.exe\" ..."

其他建议:

AFAICS,你不需要cmd.exe来调用netsh,所以你可以简单地调用netsh.exe 为什么在路径中使用正斜杠?它适用于大多数东西,但不适用于所有东西,所以我建议使用反斜杠 \,因为这是 Windows 默认路径分隔符。 我推荐ArgumentList,而不是在一个字符串Arguments 中提供所有参数(并冒着被引用等微妙之处绊倒的风险)。

最后会是这样的:

  var startInfo = new ProcessStartInfo()
  
    WindowStyle = ProcessWindowStyle.Hidden,
    FileName = "netsh",
    ArgumentList =
    
      "advfirewall", "firewall",
      "add", "rule", "name=Block", "inbound", "traffic",
      "from", "192.168.0.2", "over", "TCP", "port", "4000", "dir=in", "action=block",
      @"program=C:\Program Files\Mozilla Firefox\Firefox.exe",
      "enable=yes",
      "protocol=TCP",
      "remoteip=192.168.0.2",
      "profile=domain,private,public",
    ,
    Verb = "runas",
  ;
  Process.Start(startInfo);

【讨论】:

感谢您的回复 我明白了您的意思,但我无法使用 ArgumentList,因为它显示错误 ProcessStartinfo does not contains definition of "ArgumentList",实际上我的 Windows 系统上有多个网络适配器。我想要firefox 或 chrome 使用特定的适配器因此我通过阻止 ip 尝试了上述内容,但我未能让我的浏览器访问特定的网络适配器。这必须以编程方式完成。

以上是关于如何添加规则以阻止 chrome 或 firefox 等程序使用 Window 防火墙或 netsh advfirewall-C# 访问任何 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Chrome 的检查器中添加/插入之前或之后的伪元素?

如何给Adblock Plus for Google Chrome(Beta)添加过滤规则

如何阻止 Chrome 在我的文本区域中添加额外的换行符?

windows防火墙规则有优先级吗

阻止显示简化视图提示或在 Chrome 上使用简化视图

如何阻止 chrome 缓存