浏览器通过 Squid 加载一个 HTTP 页面。同一个目标在 proxychains 下却失败。这并不一定意味着两个程序中的一个选错了代理 IP。

普通的、理解 HTTP 的客户端可以以 HTTP 代理形式把 Web 请求发给正向代理。而通用 socket 包装器则需要为应用程序想打开的连接提供字节隧道。对于链中的 HTTP 代理,proxychains 使用 CONNECT。

这意味着端口 80 上的纯文本网站可能产生一个针对端口 80 的 CONNECT 请求。如果 Squid 策略只允许 CONNECT 到其批准的 TLS 端口列表,它就可能拒绝该隧道,即使发往端口 80 的普通 HTTP 请求是允许的。

比较请求,而不只是主机名

proxychains-ng 的文档说明了它对 HTTP CONNECT 的支持。Squid 的访问规则能够区分方法和目标端口。这是通往同一网站的不同请求路径。

在修改之前,先阅读拒绝原因和预期策略。把 CONNECT 访问扩展到所有端口是重大变更;它不应当成为对包装器不匹配的默认反应。

如果应用程序原生支持 HTTP 代理,使用它可以避免为纯文本 HTTP 建立不必要的通用隧道。如果它确实需要原始 TCP 隧道,请选择能提供该隧道的已批准代理协议和端口策略。

一次成功的浏览器请求是有用的证据,说明代理可达且支持某种请求方式。但它不能证明每种隧道方法、目标端口或应用协议都能通过该代理。

相关文章