带有绕过列表的本地代理:一个Windows批处理脚本

✍️ 作者: Remy

使用 Windows 批处理脚本配置本地代理的终极指南

您是开发者、IT 专业人士还是高级用户,正在寻找一种快速管理 Windows 网络设置的方法吗?您可能需要将计算机的互联网流量通过特定应用程序进行路由以进行调试,或者某些软件需要自定义代理配置才能正常工作。

在 Windows 中手动更改这些设置可能会很繁琐。幸运的是,一个简单而强大的批处理脚本可以自动化整个过程。

在这篇指南中,我们将分解一个自动配置 WinHTTP 代理设置的脚本,解释每个部分的作用,并向您展示如何根据自己的需求进行自定义。

脚本的作用:高层次概述

该脚本的核心是一个网络设置的自动化工具。它执行两个主要操作:

  1. 获取管理员权限: 修改系统范围的网络设置需要提升的权限。脚本巧妙地自动请求管理员权限,因此您不必每次运行时都记得选择“以管理员身份运行”。
  2. 设置系统代理: 它配置 Windows 使其通过您自己的机器(localhost)上的代理服务器发送大部分互联网流量。这对于需要监控、修改或控制网络请求的应用程序至关重要。
  3. 定义代理例外: 它指定一个“绕过列表”,其中包含不应通过代理的域。这确保了重要的后台服务,如连接到本地站点或特定国家域的服务,能够继续正常工作,不受干扰。

脚本本身

这里是我们将要分解的代码。它是一个强大的工具,可以快速设置您的开发或测试环境。

@echo off
:Get Admin Access
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit

netsh winhttp set proxy localhost:15236 bypass-list="<local>;*.cn;*.localsite.com"

pause

深入理解:逐行解析代码

让我们逐行解析每个命令的作用。

@echo off

这是大多数批处理脚本开头的标准命令。它只是保持命令提示符窗口整洁,防止在执行命令时显示命令本身。

获取管理员权限的技巧:%1 mshta ...

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute(...)

这一巧妙的行是自动提升权限的关键。它使用 Windows 内置组件 (mshta.exe) 触发用户账户控制 (UAC) 提示,请求管理员权限。如果您授予权限,脚本将以所需的访问权限重新启动。如果脚本已经具有管理员权限,这一行将被跳过。

核心命令:netsh winhttp set proxy ...

这是脚本发挥作用的地方。让我们看看它的组成部分:

  • netsh winhttp set proxy:此命令告诉 Windows 网络外壳 (netsh) 修改 WinHTTP 的设置,WinHTTP 是许多系统组件(如 Windows Update)和应用程序用于访问互联网的服务。
  • localhost:15236:这将代理服务器设置为 localhost(这是您自己的计算机的通用名称)上的端口 15236。这告诉 Windows 将流量发送到您在该特定端口上运行的本地应用程序。
  • bypass-list="...":这对于稳定性至关重要。它列出了应忽略代理并直接连接的地址。在这个示例中:
    • <local>:绕过所有本地网络地址(例如,文件服务器、打印机)。
    • *.cn:绕过所有以 .cn 结尾的域。
    • *.localsite.com:绕过特定的本地或开发域。

pause

这条最终命令防止命令提示符窗口在脚本完成后立即关闭。这给您时间阅读输出并检查任何成功或错误消息。

如何根据您的需求自定义脚本

该脚本的真正强大之处在于它的可适应性。您可以轻松地根据自己的项目进行修改。只需将代码复制到一个新的文本文件中,并将其保存为 .bat 扩展名(例如 proxy_config.bat)。

自定义方法:

  • 更改端口:15236 替换为您本地应用程序使用的端口号(例如,Burp Suite 使用 8080,Zap 使用 9090,或您自己的应用程序使用的自定义端口)。
  • 编辑绕过列表: 修改 bypass-list="..." 字符串中的域。添加您公司使用的域或任何不应通过本地代理路由的服务。每个条目之间用分号 (;) 分隔。

通过理解和自定义这个简单的脚本,您可以节省宝贵的时间并简化工作流程,使网络配置成为一个一键式过程。