“代理客户端软件”这一类别的用途远比其名称所暗示的要窄得多,因此首先需要明确的是:你是否真的需要它。
我们是 Geonode,我们销售代理服务,首先需要坦率地指出:绝大多数搜索代理客户端软件的人其实根本不需要安装任何软件。 如果您正在编写代码,您的 HTTP 库通常已经支持代理参数。如果您使用浏览器,浏览器或操作系统本身就提供了代理设置。如果您运行 curl,可以使用 -x 命令。这些都是受支持且有文档记录的实现方式,无需额外安装软件、无需许可证,也不会引入新的故障点。
代理客户端的存在是为了解决一个特定问题,值得明确指出:**强制没有代理设置的应用程序仍通过代理进行路由。**例如:没有网络偏好设置的桌面软件、游戏客户端、旧版工具,以及忽略环境变量的命令行实用程序。这就是代理客户端的职责。这些工具所做的其他一切都是为了提供便利。
在做出选择之前,还有第二点值得了解:代理可以应用于四个不同的层级,每个层级都有不同的工具集和不同的故障模式。选择错误的层级通常是导致用户最终安装了不需要的软件,或者流量实际上根本没有通过代理的常见原因。
此外,还有一种问题几乎存在于所有层级——DNS泄漏。即使流量本身被正确路由,它仍会将您访问的每个主机的名称发送给本地解析器。为此专门设有一节内容,因为这是配置正确的代理设置未能达到用户预期效果的最常见原因。
下文中的定价和技术行为信息均来自各项目的官方文档或购买页面。
代理客户端究竟能解决什么问题
三个真实存在的问题,以及一个通常只是想象中的问题。
问题一:应用程序没有代理设置
这是真实存在的问题。许多桌面软件会建立网络连接,却不提供配置代理的方式。 有时它会遵循系统级设置;但更多时候并不会,因为它使用的是自己的网络协议栈。
代理客户端通过在应用程序做出决策的层级之下拦截其网络调用,从而解决了这个问题。应用程序对此一无所知。这确实非常有用,而且别无他法。
问题二:不同应用程序需要不同的代理
一个应用程序通过英国 IP 地址连接,另一个直接连接,第三个则通过 SOCKS5 端点连接。操作系统的代理设置是全局的,无法满足这种需求。而支持规则设置的代理客户端可以做到。
对于任何需要测试区域行为,或在同一台机器上将工作流量与研究流量分离的人来说,这一功能足以证明购买的必要性。
问题三:管理多个代理
轮询、池化、故障转移、重试,以及观察实际发生的情况。 将这些功能集成到每个脚本中既繁琐又重复;而本地代理管理器只需配置一次,所有流量便会指向 localhost。
虚构的问题:隐私
人们使用代理客户端往往是期望获得匿名性。代理客户端仅会改变流量在接收端看来似乎来自何处,仅此而已。 它本身不会加密任何内容,无法对代理运营商隐瞒任何信息,也无法影响你自己机器上的软件。
如果隐私是需求,解决方案应该是信誉良好的 VPN 或 Tor 浏览器,而不是代理客户端。它们是针对不同问题设计的不同工具,而这种混淆非常普遍,甚至会让人们蒙受实际经济损失。
可以应用代理的四个层级
这种框架比任何工具对比都更有价值,因此放在表格之前。
第一层:在你的代码中
你的 HTTP 库支持代理参数。requests 提供了 proxies,curl 提供了 -x,大多数编程语言都有相应的实现。
优点: 完全精确、按请求控制、无需额外软件、无信息泄露风险,且代理在代码中可见,便于未来读者查阅。
局限: 仅涵盖你发起的请求。
只要适用,就请使用它。 如果你正在编写发起请求的代码,可以到此为止——本文剩余部分讨论的问题与你无关。
第二层:在应用程序中
浏览器、下载管理器以及许多开发工具都有自己的代理设置。 浏览器扩展通过针对特定网站的规则进一步扩展了这一功能。
**优点:**无需特权软件,易于更改,作用范围仅限于单个应用程序。
**局限性:**仅限于该应用程序,且仅当该应用程序支持此设置时才有效。
第三层:全系统范围
Windows、macOS 和大多数 Linux 桌面系统都提供系统级代理设置。行为规范的应用程序会参考该设置。
优点: 内置功能,免费,无需安装软件。
局限性(且十分显著): 应用程序没有义务遵守该设置。 许多应用程序使用自己的网络机制,完全无视系统设置。这就是为什么本应通过代理的流量往往未能通过代理,也是为什么对于任何重要事项,这都是一种不可靠的解决方案。请务必验证,切勿想当然。
第四层:拦截
这是代理客户端软件发挥作用的地方。 该工具在应用程序层之下拦截网络调用,因此应用程序的意图无关紧要——连接无论如何都会被重定向。
Proxifier 通过驱动程序在 Windows 和 macOS 上实现此功能;proxychains 则通过挂钩库调用在类 Unix 系统上实现。两者虽路径不同,但最终效果相同。
优点: 适用于完全不支持代理的应用程序;支持按应用程序设置规则。
局限: 需要以特权身份安装或采用特定的启动方式,存在下文所述的实际边界情况,且会引入可能自身发生故障的组件。
选择
按列表顺序逐层排查,找到第一个能正常工作的层即可。 代码层、应用程序层、系统层,最后是拦截层。每向下走一层,功能会增加,故障模式也会增加,而绝大多数需求在前两层就能得到满足。
工具对比
| 工具 | 层级 | 支持平台 | 价格 | 最适合 |
|---|
| 您的 HTTP 库 | 代码 | 所有 | 免费 | 您自己编写的任何内容 |
curl -x | 代码 | 所有 | 免费 | 脚本和一次性请求 |
| 浏览器设置/扩展程序 | 应用程序 | 所有 | 免费 | 浏览、按网站规则 |
| 系统代理设置 | 系统 | 所有 | 免费 | 仅适用于行为规范的应用程序 |
| Proxifier | 拦截 | Windows、macOS | $39.95 永久许可 | 不支持代理的应用程序 |
| proxychains-ng | 拦截 | Linux、BSD、macOS、Haiku | 免费,GPL-2.0 | Unix 上的命令行工具 |
| Bright Data Proxy Manager | 本地管理器 | Windows、Linux、macOS | 免费,开源 | 轮换、池化、日志记录 |
如何阅读此表
**前四行均为免费选项,且能满足大多数需求。**这绝非修辞之辞——在考虑其余选项之前,请务必认真逐一评估这些选项。
Proxifier 是这里唯一值得关注的付费产品,也是唯一拥有精美图形界面的工具。作为永久许可证(而非订阅制),其价格为 39.95 美元,相对于任何人一小时的工作时间来说并不昂贵;而在处理顽固的 Windows 或 macOS 应用程序路由这一特定任务上,它几乎没有真正的竞争对手。
proxychains-ng 是 Unix 平台上的对应产品,在 GPL-2.0 许可下免费提供,其工作机制截然不同,且存在一系列显著不同的故障点。
Bright Data 的 Proxy Manager 是来自我们竞争对手的一款真正实用的推荐工具,值得特别提及:它是开源的,可在三大桌面平台上运行,虽然专为 Bright Data 自己的网络设计,但通过其“--ext_proxies”选项,它也支持外部代理供应商。 因此,它可与任何提供商的代理配合使用,包括我们的代理。该工具通过 Web 界面处理连接池、负载均衡、轮询、SSL 分析和日志记录,并支持 Docker。
我们之所以向您推荐竞争对手的工具,是因为它是解决我们客户所面临问题的最佳免费方案。若为了将您留在我们的生态系统内而开发一个性能较差的替代品,只会浪费所有人的时间。
Proxifier 与桌面端应用
这是一款商业软件,当 Windows 或 macOS 应用程序完全不支持代理设置时,它便是您的首选方案。
功能介绍
Proxifier 会安装一个驱动程序,该驱动程序在网络层拦截连接,并根据您定义的规则进行重定向。 建立连接的应用程序无需参与,也不需要配合。
规则功能正是购买该软件的核心价值。您可以按应用程序、目标主机、端口以及多种组合方式进行路由——例如,让一个程序通过代理,另一个直接连接,第三个则完全被阻止。这种灵活的配置在任何系统级设置中都无法实现。
定价
单个许可证售价 39.95 美元,涵盖 Windows 版 Proxifier 标准版、Windows 版便携版或 Mac 版 Proxifier。这些均为 永久许可证,包含所有未来的次要版本更新,而非订阅制,且批量购买可享受最高 40% 的折扣。 提供 30 天退款保证(当前定价)。
在订阅模式主导的市场中,这种一次性购买模式实属罕见,值得特别关注。
便携版
值得了解,因为它改变了使用限制。标准版需要安装驱动程序,这要求具备管理员权限。 便携版则针对无法或不希望安装驱动程序的情况。
如果您使用的计算机上没有管理员权限,请在购买前确认适合哪个版本——它们的许可是分开的。
在依赖它之前需要验证什么
确保流量确实经过代理。 打开应用程序,让其执行与网络相关的操作,并在 Proxifier 的连接日志中确认该连接是否显示在其中。使用非常规机制的应用程序仍可能绕过代理,而日志会立即向您提示。
确保 DNS 处理方式符合您的预期。 下文将单独讨论这一部分——这是用户最容易忽略的设置。
规则排序是否正确。 规则系统会按顺序进行评估,如果顶部有条范围较广的规则,它会悄无声息地截取本应由后面更具体的规则捕获的流量。这是最常见的配置错误。
proxychains 与 Linux 案例
这是 Unix 阵营的免费解决方案,其工作机制值得深入了解,因为它能准确说明哪些方法行不通。
工作原理
proxychains-ng 通过 SOCKS4a、SOCKS5 或 HTTP 代理重定向连接。根据其文档所述,它“通过预加载的 DLL 钩住动态链接程序中的网络相关 libc 函数,并将连接重定向到一个或多个 SOCKS/HTTP 代理”。
其工作机制是LD_PRELOAD。该库会在程序的常规库之前被加载,并使用其提供的套接字函数版本来替代系统原生函数。程序调用它认为的标准函数时,proxychains 便会予以响应。
您无需进行全局配置,只需通过以下命令运行即可:
proxychains4 curl https://example.com
proxychains4 nmap -sT target
该工具采用 GPL-2.0 许可证,可在 Linux、BSD、macOS 和 Haiku 上运行。
来自其自身文档的限制
这些限制已在项目文档中明确说明,其影响比乍看之下更为深远。
静态二进制文件无法工作。 该技术需要动态链接。 静态链接的程序没有需要预加载的库,因此会直接连接——既不会报错,也不会发出警告,直接绕过你的代理。
仅支持 TCP。 “它仅支持 TCP(不支持 UDP/ICMP 等)”。任何使用 UDP 的流量都不会被代理。 这涵盖了大量现代网络协议,且该行为不会产生任何提示。
Python 和 Perl 存在一个特定问题。 文档中指出:“glibc 的动态链接器存在一个漏洞或安全特性,会阻止通过 dlopen()加载的模块受到相同的 dlsym 钩子影响”,这会影响这些语言中的扩展模块。 一个 Python 脚本可能对其自身请求进行代理,而它加载的编译型扩展却不会。
macOS 系统完整性保护(SIP)会阻止这种行为——这适用于 10.11 及更高版本中的系统应用程序。SIP 的存在正是为了防止此类注入,而它确实发挥了应有的作用。
会生成后台进程的脚本和守护进程可能会失败。
该项目自身的 README 文件建议在正式使用前进行彻底测试,这种坦率实属罕见,应严格遵守。
这些限制背后的规律
每一种情况都会无声且公开地失败。 连接并未被阻断;它直接建立。您的流量从您的真实地址发出,而您对此一无所知。
因此,请务必进行明确验证,而非凭空假设。对于您打算使用的每一款应用程序,都应通过 proxychains 向报告地址的端点发送命令,并确认返回的地址是代理的地址——通常不应仅验证一次。
代理管理器:轮询与池化
这与拦截工具的功能不同,但常被与之混淆。
代理管理器在本地运行,并以单一代理端点的形式对外呈现。您的应用程序指向 localhost。在该端点背后,它会将请求分发到上游代理池中,进行轮询,对失败请求进行重试,并记录发生的情况。
为何值得拥有
轮换逻辑集中于一处。 每个脚本无需自行实现池管理,只需指向同一个本地端点,由管理器统一处理。
故障转移在您的代码不知情的情况下自动完成。 上游代理若不可用,系统会自动尝试连接其他代理。
**您将获得可观测性。**哪些请求成功、哪些失败、耗时多久、带宽消耗情况及流向何处。当代理费用出乎意料地高昂时,这是人们最遗憾没有具备的功能。
凭证集中存储在一个配置文件中,而非被复制到十几个脚本中,这样既更整洁又更安全。
实用方案
Bright Data 的 代理管理器 是开源软件,支持 Windows、Linux 和 macOS 系统,并提供连接池、负载均衡、自动轮询、SOCKS5 支持、SSL 分析、Web 配置界面以及 Docker 镜像。
该工具虽专为 Bright Data 的网络构建,但通过其 --ext_proxies 选项支持 外部代理供应商,这意味着它能与任何提供商的代理完美配合。如果您正在使用我们的代理,并希望拥有一个具备轮询和日志记录功能的托管本地端点,该工具既能胜任,又无需任何费用。
何时不需要它
如果您每天仅通过一个脚本发起几百次请求,那么管理器就是为尚未出现的问题而构建的基础设施。当按地址的速率限制成为您的约束条件时,轮换才显得重要;当账单金额或故障率大到需要调查时,可观测性才显得重要。在低于这些阈值的情况下,在您的 HTTP 客户端中添加一个代理参数就是完整的解决方案。
那个能突破所有层级的 DNS 泄漏
即使代理配置正确,也常会出现与所有者预期不符的情况。
问题所在
在您的机器能够连接到 example.com
之前,必须先将该域名转换为 IP 地址。如果该解析在 本地 进行,您的 DNS 解析器(通常是您的互联网服务提供商或网络管理员)就会获知您访问过的每一个主机名,尽管流量本身是通过代理传输的。
你已经将通信路由到了代理,并向代理宣告了目的地。
问题体现之处
在 curl 以及任何使用 SOCKS 的工具中。 区别在于协议方案。对于 socks5://
,curl 会在连接到代理之前在本地解析域名;而对于 socks5h://
,主机名会被发送到代理并在那里进行解析。仅一字符之差。
curl -x socks5://proxy.example.com:1080 https://example.com # leaks the lookup
curl -x socks5h://proxy.example.com:1080 https://example.com # does not
在代理客户端软件中。 Proxifier 提供了一个明确的设置选项,用于通过代理处理 DNS。该选项并非总是默认启用,且很容易被忽略。
在 proxychains 中。 配置文件控制着 DNS 的处理方式,正确的设置取决于您的版本和代理类型。
在浏览器中。 除非更改了特定偏好设置,否则即使配置了 SOCKS 代理,某些浏览器仍会在本地进行解析。
为何这不仅关乎隐私
这不仅仅是一个信息泄露的问题。 本地解析的主机名可能会给你完全错误的地址。 那些在不同地区提供不同基础设施的网站,会根据位置进行不同的解析。如果你通过德国的代理连接,但解析来自英国,你可能会从一个德国地址连接到英国的端点——这种组合不仅与你的目的不符,而且足够异常,容易引起注意。
这正是地理位置测试结果与实际情况不符的一个常见且确实令人困惑的原因。
验证方法
无论您使用的是哪一层,请通过该层运行一次 DNS 泄漏测试,并确认报告的解析器属于代理的网络而非您的网络。这只需三十秒,却是整篇文章中最具价值的验证步骤。
何时不需要代理客户端
这虽然与我们的初衷相悖,也偏离了本文的主题——但这种情况适用于大多数读者。
你正在编写代码。 将代理传递给你的 HTTP 库。无需安装,不会泄露信息,无需许可证,而且后续阅读代码的人都能看到。
**你的应用程序有代理设置。**直接使用它。在顶层添加一个拦截层,只会让配置出错的可能增加到两个地方。
**你想保护隐私。**使用信誉良好的 VPN 或 Tor 浏览器。代理客户端不会加密你的流量,也无法对代理运营商隐瞒任何信息。
你想在浏览器上解锁某个网站。 浏览器扩展或浏览器自身的设置就能处理此事。为此安装系统驱动程序实属小题大做。
你只发送了寥寥几个请求。 速率限制和检测机制是针对流量规模和模式的。一天内仅五十个请求,根本不需要额外的基础设施。
该应用程序尊重系统的代理设置。 请先确认——这只需一分钟,却可能让整个项目就此终止。
你在服务器上运行且能控制环境。 环境变量、容器级网络配置或正确配置的路由,都比注入层更简洁,而且不会像上述情况那样出现无声故障。
真正需要使用的情况
既不支持代理,又忽略系统设置的应用程序。 这是该类别存在的唯一正当理由。
按应用程序设置的路由规则。 同一台机器上不同程序指向不同的目标。
在由多个上游代理组成的池中进行轮询和可观测性,且处理量较大。
Unix 上的命令行工具,且不提供代理选项 —— proxychains,但必须牢记其文档中明确记载的限制。
除此之外,越简单的层就是越好的解决方案,而且它是免费的。
大家还问
什么是代理客户端软件?
一种将其他应用程序的网络流量通过代理进行转发的软件,通常通过在应用程序决定连接方式的层级之下拦截连接来实现。其目的是为那些本身不提供代理设置的应用程序提供代理功能。
我需要代理客户端吗?
通常不需要。如果您正在编写代码,请将代理传递给您的 HTTP 库。如果您的应用程序具有代理设置,请直接使用该设置。代理客户端仅适用于特定情况:即应用程序既不支持代理,又会忽略系统级设置。
Windows 平台上最好的代理客户端是什么?
Proxifier 是广受认可的商业选择,永久许可证价格为 39.95 美元,支持按应用程序设置路由规则。若需要代理池和轮询而非拦截功能,Bright Data 的开源代理管理器(Proxy Manager)可在 Windows 上运行,并支持外部代理提供商。
Linux 上有免费的代理客户端吗?
proxychains-ng,采用 GPL-2.0 许可。它通过 LD_PRELOAD 挂钩 libc 网络函数。请注意其文档中记载的限制:仅支持 TCP,不提供静态二进制文件,与 Python 和 Perl 扩展模块存在兼容性问题,且 macOS 的系统完整性保护机制会阻止其用于系统应用程序。
为什么我的流量没有通过代理?
最常见的情况是应用程序忽略了系统代理设置,而是使用了自身的网络连接。就 proxychains 而言,静态链接的二进制文件或 UDP 流量会完全绕过它,且不会发出任何提示。请通过地址报告端点进行验证,而不是凭空猜测。
什么是 DNS 泄漏,如何阻止它?
您的流量虽然经过代理,但主机名解析是在本地进行的,因此您自己的解析器会看到您访问的每个网站。 解决方法是让代理负责域名解析:在 curl 中使用 socks5h:// 代替 socks5://,在 Proxifier 或 proxychains 中启用相应的选项,并使用 DNS 泄漏检测工具进行测试。
代理客户端会加密我的流量吗?
不会。代理仅中继连接,不会添加加密功能。HTTPS 仍会保护您与目标服务器之间的内容,但代理运营商可以查看您连接了哪些主机。如果您需要从设备向外传输的加密连接,VPN 就能满足这一需求。
选择 Proxifier 还是 proxychains?
它们属于不同的平台,采用不同的机制。Proxifier 适用于 Windows 和 macOS,使用驱动程序,配备图形化规则编辑器,售价 39.95 美元。proxychains 适用于 Unix 系统,采用库预加载机制,免费使用,但存在已记录的安全漏洞,且这些漏洞会导致程序无声地失败。两者没有优劣之分,只是适合不同的系统。
总结
代理客户端软件的用途比其类别名称所暗示的更为狭窄,在选择一款代理客户端软件之前,最关键的一步是确定你的问题实际上位于哪个层级。
**逐层排查,找到第一个能解决问题的层即可。**先从代码层面入手,接着是应用程序层面,然后是全系统层面,最后是拦截层面。每增加一层,功能会增强,但出错的可能性也会增加,而绝大多数需求在前两层就能满足——无需安装任何软件,完全免费。
当你真正到达拦截层时,选择主要取决于平台。Windows 和 macOS 上的 Proxifier 提供 39.95 美元的永久许可证,支持按应用程序设置规则,这是任何内置设置都无法实现的。 Unix 平台上的 proxychains-ng 免费且遵循 GPL-2.0 协议,但其限制值得牢记:仅支持 TCP,无静态二进制文件,Python 和 Perl 扩展处理笨拙,且会被现代 macOS 的系统完整性保护(SIP)阻挡。
这些限制所体现的规律比限制列表本身更重要。 它们都会以“默认允许”且“无提示”的方式失败——连接不会被拒绝,而是直接从您的真实地址发出,且没有任何提示。对于您打算进行路由的每个应用程序,请使用地址报告端点进行验证,而不是配置一次后就完全信任它。
然后检查 DNS。 流量通过代理传输,而域名解析却由本地解析器处理,这是该领域最常见的“半工作”配置,这既是一个信息泄露问题,也是一个准确性问题——本地解析的主机名可能会返回一个在该地区不正确的地址。请访问 socks5h:// 而不是 socks5://,确保您正在使用的任何工具中都启用了 DNS 选项,并花 30 秒进行一次泄漏测试。
如果你正在运行一组代理服务器,Bright Data 的开源工具 Proxy Manager 能够处理代理轮换、故障转移和日志记录,支持三大平台,并可与外部提供商配合使用。虽然这是竞争对手的工具,但它是解决该问题的最佳免费方案,我觉得有必要直截了当地说明这一点。