You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C#调用Windows防火墙/netsh advfirewall添加规则拦截浏览器访问指定IP

防火墙规则不生效原因及修复方案

核心错误原因

  • 路径未加引号:Program Files包含空格,netsh会将路径拆分为多个参数导致解析失败,必须用双引号包裹带空格的路径
  • 规则方向错误:你要拦截浏览器主动访问外部IP,属于出站流量,你写的dir=in是入站规则,仅拦截外部主动发往浏览器的流量,完全不匹配你的需求
  • 规则名称包含空格未做包裹,存在参数解析异常风险
  • C#字符串中传递双引号需要转义,否则会导致Arguments参数拼接错误
  • 缺失提权必要配置:UseShellExecute需设为true才能触发UAC提权,否则runas配置不生效

修正后的代码

Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
// 规则名、路径用双引号包裹,C#中用\"转义双引号,规则方向改为out
startInfo.Arguments = "/c netsh advfirewall firewall add rule name=\"Block Firefox access 192.168.0.2\" dir=out 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";
startInfo.UseShellExecute = true; 
process.StartInfo = startInfo;
process.Start();
process.WaitForExit(); // 可选,等待命令执行完成

额外注意事项

  • 如果要拦截Chrome,替换program参数的路径为Chrome的安装路径即可,Chrome默认路径为C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe,同样需要用双引号包裹
  • 运行代码时会弹出UAC提权窗口,必须点击同意才能成功添加规则
  • 验证规则是否生效:搜索打开「高级安全Windows Defender防火墙」,在左侧「出站规则」中可以找到你添加的规则,确认配置无误后,用火狐访问对应IP即可验证拦截效果
  • 如果你需要同时拦截TCP和UDP流量,删除protocol=TCP参数即可,默认拦截所有协议

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:09:03