5 个版本

0.2.1 2019年5月5日
0.2.0 2018年7月8日
0.1.2 2018年6月28日
0.1.1 2018年6月26日
0.1.0 2018年5月28日

#2254命令行工具

Download history 60/week @ 2024-03-11 22/week @ 2024-03-18 28/week @ 2024-03-25 32/week @ 2024-04-01 9/week @ 2024-04-08 9/week @ 2024-04-15 21/week @ 2024-04-22 11/week @ 2024-04-29 1/week @ 2024-05-06 10/week @ 2024-05-13 14/week @ 2024-05-20 21/week @ 2024-05-27 23/week @ 2024-06-03 26/week @ 2024-06-10 37/week @ 2024-06-17 44/week @ 2024-06-24

每月 134 次下载

MIT 许可协议

52KB
1K SLoC

ProxyConf

一个用于在 Windows 上设置代理配置的小型命令行工具。

为什么存在

仅在带有代理的仅命令行 windows 版本(Core 或 Nano)下使用可能存在问题:一些 windows 应用程序使用 IE 设置,但没有好的方法来设置它们,其他使用 WinHTTP 设置,而 netsh winhttp 可以配置,但它在最新的 nano 服务器映像上不可用。

proxyconf 旨在成为一款简单的命令行工具,可以执行此配置,并适合在容器(Docker)中使用。

示例用法

FROM microsoft/nanoserver:1803

COPY proxyconf.exe .
RUN proxyconf set proxy 10.0.0.1:8080 "*.my-company;<local>" \
    && proxyconf winhttp proxy 10.0.0.1:8080 "*.my-company;<local>"

命令行

  • proxyconf show 显示当前代理配置
  • proxyconf set 设置当前用户代理配置。必须指定以下之一
    • no-proxy 不使用代理。
    • auto-detect 自动检测设置。Windows 将使用 Web 代理自动发现协议 或回退到直接连接
    • proxy <ADDRESS:PORT> [BYPASS_LIST] 使用硬编码的代理(或代理,见下文)以及可选的绕过列表。
    • setup-script <URL> 使用指定 URL 的 代理自动配置(PAC)
  • proxyconf winhttp 设置系统范围的 WinHTTP 代理配置。必须指定以下之一
    • no-proxy 不使用代理。
    • proxy <ADDRESS:PORT> [BYPASS_LIST] 使用硬编码的代理(或代理,见下文)以及可选的绕过列表。

常见值

  • ADDRESS:PORT 要使用的代理服务器和可选端口号。
    也可以是使用分号(;)分隔的 protocol=address:port 列表。协议包括 httphttpsftpsocks
  • BYPASS_LIST 可选的地址列表,用分号分隔以绕过代理(;)。
    使用 <local> 来绕过所有短名称主机。
    如果没有指定,默认为 <local>

可以更改的内容

Internet选项

每个用户的设置(默认情况下,有一个注册表标志来使用系统设置)由最初的Internet Explorer使用,现在由大多数应用程序使用。

它们可以在Internet Explorer设置中或从Windows的最新版本的控制面板中直接编辑。

WinHTTP设置

一个二进制密钥,用于存储使用WinHTTP编程接口的应用程序设置。它不支持比静态代理更多的功能,但它被如Windows更新等服务支持。

技术信息

此工具在注册表中设置了一些特定的键,其格式如下

二进制/现代Internet选项

存储为REG_BINARY值。

  • 每个连接在以下路径下有一个键:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections,LAN的默认设置在DefaultConnectionSettings下。
  • 如果HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings密钥中的ProxySettingsPerUser1(DWORD),则在HKEY_LOCAL_MACHINE中使用相同的路径,设置是全局的。
  • WinHTTP设置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections键下的WinHttpSettings值中使用旧版本。

我知道有3个版本

  • 0x28netsh winhttp使用
  • 0x3C 在IE 6中使用
  • 0x46 从IE 7开始使用,并且在IE 11 / Windows 10中仍在使用

(未记录的)格式如下(所有值均为小端)

  • version: u32 版本号
  • counter: u32 一个递增计数器,用于检测更改。
  • configuration_bits: u32 一个位字段,包含以下位
    • 1 总是设置
    • 2 使用手动代理
    • 3 使用设置脚本(版本 >= 0x3C)
    • 4 自动检测设置(版本 >= 0x3C)
  • proxy_address_len: u32 代理地址字符串的长度。
  • proxy_addres: Vec<u8> 代理地址(ASCII)。
  • bypass_list_len: u32 绕过列表字符串的长度。
  • bypass_list: Vec<u8> 绕过列表(ASCII)。
  • setup_script_len: u32 设置脚本URL字符串的长度。 (版本 >= 0x3C)
  • setup_script: Vec<u8> 设置脚本URL(ASCII)。 (版本 >= 0x3C)
  • 版本0x3C有28个未知字节,版本0x46有32个

值/传统互联网选项

它们现在不再使用,但保留供可能直接访问它们的应用程序使用,当进行更改时GUI会设置它们,但不会读取。它们存储在注册表键中 HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections

依赖项

~0.9–1.2MB
~13K SLoC