本文档解释了 Shadowsocks Windows 如何与 Privoxy 集成以提供 HTTP 代理支持。Privoxy 在 HTTP 代理客户端和 Shadowsocks SOCKS5 代理之间充当桥梁,使仅支持 HTTP 代理的应用程序能够与 Shadowsocks 协同工作。有关系统代理配置的信息,请参阅 系统代理配置。
来源: shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs1-170
Privoxy 是一个具有高级过滤功能的非缓存网页代理。在 Shadowsocks Windows 中,Privoxy 用于
此集成利用了 Privoxy 的捆绑版本,该版本在需要时动态提取和配置。
来源: shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs27-41
来源: shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs17-26 shadowsocks-csharp/Data/privoxy_conf.txt1-9
来源: shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs45-96
PrivoxyRunner 类管理 Privoxy 进程的生命周期
每个 Shadowsocks 实例都使用工作目录的哈希值创建唯一的 Privoxy 配置,以防止多个 Shadowsocks 实例运行时发生冲突。
来源: shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs27-41
启动 Privoxy 时,系统会
GetFreePort() 查找一个空闲的 TCP 端口__SOCKS_PORT__ → Shadowsocks 本地端口__PRIVOXY_BIND_PORT__ → 动态分配的空闲端口__PRIVOXY_BIND_IP__ → 绑定地址(IPv4 为 127.0.0.1 或 0.0.0.0,IPv6 为 [::1] 或 [::])__SOCKS_HOST__ → SOCKS5 主机(IPv4 为 127.0.0.1,IPv6 为 [::1])该配置指示 Privoxy 将所有请求转发到 Shadowsocks SOCKS5 代理。
来源: shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs54-63 shadowsocks-csharp/Data/privoxy_conf.txt1-9
基本的 Privoxy 配置在 privoxy_conf.txt 中定义,包含
listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__
toggle 0
logfile ss_privoxy.log
show-on-task-bar 0
activity-animation 0
forward-socks5 / __SOCKS_HOST__:__SOCKS_PORT__ .
max-client-connections 2048
hide-console
重要设置
listen-address - Privoxy 接受 HTTP 代理连接的地址forward-socks5 - 指示 Privoxy 将所有请求转发到 SOCKS5 代理max-client-connections - 设置最大并发客户端连接数hide-console - 防止 Privoxy 控制台窗口出现来源: shadowsocks-csharp/Data/privoxy_conf.txt1-9
PrivoxyRunner 实现了精细的进程管理
进程识别:采用独特的方法,通过检查进程路径或命令行来识别属于此 Shadowsocks 实例的 Privoxy 进程
孤儿进程清理:启动时,检查并终止同一 Shadowsocks 实例之前运行遗留的任何孤儿 Privoxy 进程
作业对象集成:将 Privoxy 进程添加到与 Shadowsocks 进程关联的 Windows 作业对象,确保 Shadowsocks 崩溃或强制关闭时 Privoxy 终止
优雅关机:尝试优雅地关闭 Privoxy,必要时再强制终止
来源: shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs88-148
GetFreePort 方法为 Privoxy 动态分配一个可用的 TCP 端口
这确保了 Privoxy 即使在多个 Shadowsocks 实例运行时也能避免端口冲突。
来源: shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs150-168
Privoxy 在 Shadowsocks 控制器需要时会自动启动。Privoxy 提供的 HTTP 代理可供以下对象使用:
HTTP 代理端口是动态分配的,可以通过 PrivoxyRunner 类的 RunningPort 属性访问。
来源: shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs43 shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs45-86
如果 Privoxy 集成出现问题
进程冲突:PrivoxyRunner 尝试通过路径验证来识别并终止仅属于自身的 Privoxy 进程,以避免与其他实例发生冲突
端口冲突:动态端口分配最大程度地降低了端口冲突的风险,但如果由于错误必须使用默认回退端口(8123),则可能发生冲突
日志记录:Privoxy 日志保存在临时目录的 ss_privoxy.log 中,可用于诊断问题
来源: shadowsocks-csharp/Controller/Service/PrivoxyRunner.cs125-148 shadowsocks-csharp/Data/privoxy_conf.txt3
Shadowsocks Windows 中的 Privoxy 集成在 HTTP 代理客户端和 Shadowsocks SOCKS5 代理之间提供了关键的桥梁。该实现侧重于
这使得应用程序具有更广泛的兼容性,并扩展了 Shadowsocks 在需要 HTTP 代理的环境中的可用性。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(891d97)