SOCKS5 与 HTTP 代理:DNS、隧道与客户端支持

SOCKS5 与 HTTP 代理

Scrapeless Proxies 支持 HTTP、HTTPS 和 SOCKS5 连接选项,用于通过其文档化的代理资源路由应用请求。

摘要

  • HTTP 代理能够理解 HTTP 请求并建立 HTTPS 隧道。 目标 scheme 与代理 scheme 描述的是两条独立的连接。
  • SOCKS5 转发连接而不要求 HTTP 语义。 在协议层面支持 UDP 并不代表客户端或服务一定暴露该能力。
  • DNS 解析取决于客户端配置。 检查目标主机名是在本地解析还是传递给代理。
  • 这两种标签都不能保证机密性。 在每一个相关跳点上评估 TLS、证书校验和代理认证。

SOCKS5 与 HTTP 代理的区别是什么?

HTTP 代理处理 HTTP 代理请求,而 SOCKS5 则协商到目标的连接,然后中继应用流量。对于普通的 HTTPS 采集,只要客户端和代理服务支持所需配置,两者都可以提供一条路由。重要差异在于协商方式、DNS、认证以及应用需要承载的流量类型。

《 SOCKS5 协议 》规定了连接与 UDP 关联的命令。HTTP 代理则参与 HTTP 语义,包括用于请求隧道的 CONNECT 方法。不要把熟悉的协议层标签当作检验实际客户端功能集合的替代。

HTTP 和 SOCKS5 与住宅、ISP、数据中心或 IPv6 代理分类是不同维度。这些标签描述的是出口或分配方式的属性。一个服务商可以为同一资源暴露多种协议,但你必须使用匹配的主机、端口和认证设置。

维度HTTP 代理SOCKS5 代理
初始协商HTTP 请求或 CONNECTSOCKS5 握手与命令
典型网页用途HTTP 转发与 HTTPS 隧道中继网页客户端连接
目标 DNS主机名请求通常由代理解析取决于客户端,可在本地或代理侧解析
UDP不要假定普通的 CONNECT 承载 UDP协议有定义;具体部署支持程度不一
加密取决于 TLS 配置取决于协商的保护方式与应用自身的 TLS
选择优先级客户端兼容性与 Web 需求客户端兼容性与非 HTTP 需求

HTTPS 目标与 HTTPS 代理描述的是不同跳点

HTTPS 目标并不要求代理本身使用 HTTPS URL。客户端可以连接到一个 HTTP 代理,请求到目标的隧道,然后在该隧道内建立到目标的 TLS 连接。代理连接与目标连接具有各自独立的安全属性。

《 HTTP CONNECT 方法 》会请求一条在建立后转发字节的隧道。在没有拦截的常规 HTTPS 隧道中,目标证书由客户端验证,加密的应用交换通过代理中转。代理仍然可以在隧道建立时观察到诸如请求的目标之类的连接元数据。

HTTPS 代理在支持的情况下为客户端到代理的连接增加 TLS。这可以保护该跳点上的代理协商与凭据。但这并不能免除在隧道内部对目标证书进行验证的需要。在配置与诊断时要区分这两个证书上下文。

拦截代理是另一种安排:它们可以使用显式信任的证书颁发机构终止并检查 TLS。不要假定每个 HTTP 代理都会这样做,也不要仅仅为了让连接“看起来成功”就安装未知的信任根。在凭据或敏感数据经过该路由之前,预期的安全模型应当是清晰的。

DNS 解析发生在哪里

DNS 位置取决于客户端是先在本地解析目标,还是将主机名发送给代理。SOCKS5 可以在其目标字段中携带域名,因此可以进行远程名称解析。先进行解析的客户端则可以改为发送地址。

在 cURL 中,SOCKS 配置区分了本地解析和代理端解析。 cURL SOCKS 主机名行为 记录了这种差异。这些方案名称是客户端约定;另一个库可以通过不同的选项来提供这种选择。

当目标只能通过代理网络访问,或者区域相关的 DNS 响应会影响路由时,远程解析可能会产生影响。它并不能保证所有与名称相关的元数据都对所有观察者完全隐藏。请描述你配置的具体解析路径,而不是将整个连接称为匿名连接。

当主机名解析失败时,需要检查故障是发生在建立代理连接之前、代理端解析期间,还是在目标地址已被选定之后。有效的代理登录和成功的 IP 检查请求并不能证明该代理能够解析每一个目标名称。

UDP、身份验证与浏览器限制

SOCKS5 协议对 UDP 的支持并不意味着每个代理端点或应用程序都提供 UDP 转发。双方都需要合适的实现,并且服务策略可能会限制支持的命令或目标。在选择 SOCKS5 时,不要仅仅因为某些通用对比中列出了 UDP,而应核实现有文档中声明的功能。

浏览器设置也可能与 HTTP 库设置不同。操作系统的代理配置可能不会被每个应用程序使用,而且浏览器对代理身份验证的支持会因协议和配置方式而异。请检查具体的应用程序,而不要假定命令行使用成功就能说明与浏览器兼容。

为目标资源使用为其生成的凭据。代理身份验证和目标身份验证是不同的交互过程。不要在截图、源代码管理和共享的详细日志中包含代理密码;诊断输出可能暴露的信息会多于最终页面响应。

Scrapeless 描述 住宅代理协议支持,但您的客户端仍然负责应用其设置。保留通道标识符并验证观察到的出口,以检测静默使用直接路由的应用程序。

任一协议更快或更安全吗?

SOCKS5 和 HTTP 都不是在任何情况下都更快或更安全。握手开销只是一次请求的一个组成部分,实际的传输路径可能更大程度上取决于网关距离、目标服务器响应时间、传输数据量或连接复用情况。一个通用的排名并不能决定在你的具体工作负载下的结果。

对于 HTTPS,请比较等效的安全设置。在一个客户端中禁用证书验证会导致比较无效,因为这两条路径不再提供相同的保护。请保持目标 URL、负载、账户上下文和内容检查的一致。

为了保密性,识别出每一跳由什么来保护,以及每个中间方可以观察到什么。HTTP 负载检查、SOCKS 连接元数据、目标 TLS 和代理认证是彼此独立的考量。加密的目标端响应可以与外层连接上未加密的代理登录共存。

实用协议选择清单

为所需流量选择你的应用程序所支持的协议,然后验证路径。对于已经实现 CONNECT 的仅限 Web 的客户端,HTTP 代理是一个实用的起点。当受支持的应用程序需要其特定的连接模型或非 HTTP 流量时,SOCKS5 会很有用。

  1. 识别应用协议,以及是否真的需要使用 UDP。
  2. 检查客户端的代理和身份验证功能。
  3. 确认本地或代理端的 DNS 行为。
  4. 分别验证网关连接和目标 TLS。
  5. 验证最终 URL、预期内容以及实际退出情况。
  6. 比较已接受的任务结果和 适用的服务定价.

The cURL 代理配置演练 有助于理解单独的代理和目标设置。从中选择你的资源 无采集代理解决方案 在检查完那些客户需求之后。

按连接阶段诊断故障

协议比较应确定连接在何阶段中止。客户端可能无法到达代理网关,到达网关但身份验证失败,建立了代理连接但目标名称解析失败,或者到达目标后其证书被拒绝。这些结果并不能证明某种代理协议在本质上就是不适用的。

保留一份简短的诊断记录,其中包含所选协议、网关主机、目标主机名、身份验证结果以及最终应用程序结果。排除密码和敏感标头。如果命令行客户端可以正常工作而浏览器失败,请在更改目标或禁用验证之前,比较浏览器实际使用的代理和身份验证设置。

对于区域敏感的页面,将观测到的内容上下文添加到记录中。从技术上讲,有效的隧道可能会传输与任务要求不同区域版本的内容。确认使用了正确的语言或目录是验收过程的一部分,与套接字是否已经打开是分开的。这样可以避免将一次成功的传输测试错误地上升为对端到端兼容性的不当宣称。

结论

SOCKS5 与 HTTP 代理的选择,取决于连接行为和客户端兼容性。检查实际路径上的 DNS 放置、身份验证和 TLS。将 UDP 和加密视为需要验证的能力,并使用被接受的内容来评估所选协议是否完成任务。

验证客户端支持的协议

选择一个无爬取(Scrapeless)代理资源,并使用你的应用程序验证其生成的连接设置。

今天注册即可获得 5 美元免费额度 — 无需信用卡.

领取你的 $5 额度 →

常见问题

问:SOCKS5 会自动加密流量吗?

SOCKS5 不会自动加密每一个连接。防护取决于协商的机制和应用层协议,例如 HTTPS。在声称具备保密性之前,应分别检查客户端到代理的连接以及到目标的连接。

问:HTTP 代理可以打开 HTTPS 网站吗?

当客户端和服务都支持隧道时,HTTP 代理可以通过 CONNECT 打开 HTTPS 网站。随后客户端通过该隧道与目标建立 TLS。这与使用 TLS 直连代理本身是不同的。

问:SOCKS5 是否总是远程解析 DNS?

SOCKS5 并不总是远程解析 DNS。该协议可以携带目标主机名,但客户端也可以在本地解析并传递地址。请在实际应用中核实文档所述的解析器设置。

问:网络爬虫是否应始终选择 SOCKS5?

网络爬虫不应总是选择 SOCKS5。应选择满足任务 DNS、认证和流量需求的受支持代理协议。对于 HTTPS 采集,HTTP CONNECT 可能就足够,而 SOCKS5 则可以满足其他受支持的连接需求。

参考资料