gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:46 25 4
gpt4 key购买 nike

我构建了一个名为 Tun2Socks GUI 的应用程序.它是使 Socks 代理透明的程序。

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

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

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

谢谢

最佳答案

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

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

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

关于ssl - 如何通过 http 代理发出 Socks 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22548081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com