如何通过http代理发出Socks请求?

问题描述 投票:0回答:2

我构建了一个名为 Tun2Socks GUI 的应用程序。这是一个让Socks代理变得透明的程序。

通常它使用 SSH 端口转发或 TOR 作为 SOCKS 服务,但我希望它也可以使用 HTTP 代理。所以我自己构建了 SOCKS5 代理来连接到该 HTTP 代理。它可以很好地捕获来自客户端的 HTTP 请求并将其发送到 HTTP 代理。

客户端发送SSL请求时,无法捕获要转发的请求的问题。如何通过 HTTP 代理从 SOCKS 代理发出 SSL 请求的最佳方法?

请求传输的架构如下: 客户端 SSL 请求 > SOCKS 代理 > HTTP 代理 > Internet

谢谢

ssl proxy socks
2个回答
4
投票

当客户端有意通过代理与目标服务器建立 SSL 会话时,它不会与代理本身建立 SSL 会话。客户端首先告诉代理建立与目标服务器的连接,然后客户端发起与目标服务器的 SSL 会话。在这种情况下,代理不可能也不应该尝试嗅探已加密的流量。代理只是一个传递,它根据需要在客户端和服务器之间来回交换原始数据。代理不应该关心客户端发送的请求类型,因为客户端告诉代理连接的位置。

如果您在客户端和服务器之间注入代理,使得客户端不知道您的代理存在,则客户端将不知道它需要调整其请求以使它们对代理友好。客户端将连接到您的代理,但它会认为它已连接到目标服务器,因此将启动您的代理必须响应的 SSL 握手。只有这样,您的代理才能访问客户端的请求数据(假设握手成功,例如客户端未验证对等证书),然后可以根据需要将未加密的数据通过隧道传输到下一个代理。

更新:我只是想到了另一个适用于明文和 SSL 连接的场景。无论您是在客户端不知情的情况下透明地将客户端的出站连接重定向到 SOCKS 代理,还是客户端有意连接到 SOCKS 代理并告诉它去往何处,SOCKS 代理都知道客户端的目标主机/IP:端口。 SOCKS 代理可以直接连接到目标,也可以连接到 HTTP 代理并要求它通过 HTTP

CONNECT
方法创建到目标的隧道。如果成功,客户端将与目标建立可行的连接,并且客户端发送的任何数据(SSL 或其他数据)将按原样流向目标,反之亦然。除了目标主机/IP:端口之外,SOCKS 代理和 HTTP 代理都不需要了解有关客户端请求的任何信息。这是在初始 SOCKS 请求中,要么从截获的 TCP 标头中捕获,要么从客户端显式获取。


-3
投票

911 似乎是事实上的代理。此链接描述了如何在 Windows 盒子上进行设置:https://www.911proxy.com/

© www.soinside.com 2019 - 2024. All rights reserved.