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

我已经构建了一个名为Tun2Socks GUI的应用程序。 这是使Socks代理服务器透明的程序。

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

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

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

谢谢


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

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

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

链接地址: http://www.djcxy.com/p/62643.html

上一篇: How to make Socks request over http proxy?

下一篇: Why are HTTP proxies able to support protocols like IRC and FTP?