如何通过http代理进行Socks请求?

时间:2014-03-21 00:43:14

标签: ssl proxy socks

我已经构建了一个名为Tun2Socks GUI的应用程序。使Socks代理变得透明的程序。

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

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

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

由于

1 个答案:

答案 0 :(得分:4)

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

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

更新:我刚想到了另一个应该适用于明文和SSL连接的方案。无论您是否透明地将客户端的出站连接重定向到您的SOCKS代理而客户端不知道它,或者客户端故意连接到SOCKS代理并告诉它去哪里,SOCKS代理知道客户端&#39 ; s目标主机/ IP:端口。 SOCKS代理可以直接连接到目标,也可以连接到HTTP代理,并要求它通过HTTP CONNECT方法创建到目标的隧道。如果成功,客户端与目标有可行的连接,客户端发送的任何数据,SSL或其他数据将按原样流向目标,反之亦然。 SOCKS代理和HTTP代理都不需要了解除目标主机/ IP:端口之外的客户端请求。这是在初始SOCKS请求中,要么是从截获的TCP标头捕获的,要么是从客户端显式的。