我正在尝试根据RFC1928实现反向SOCKS5。我有一个中继服务器,它被动地运行,等待来自作为代理的SOCKS5客户端的连接,以及想要使用隧道的客户端。
图例
服务器(10.211.55.6)=中继= PC 1(发送/接收)
Client_1(10.211.55.10)=代理(在我的网络中的另一台PC上运行)
Client_2(10.211.55.8)= Tunneller(从MaxThon浏览器连接(因为它允许SOCKS5身份验证))
执行流程
https://dnsleaktest.com
进行身份验证并获取CONNECT命令并发送回status_ok
响应问题
https://packetstormsecurity.com
。)问题
Client_1只接收来自Client_2的一些数据包,例如\x17\x3\x3
或\x17\x3\x3\x1
(这些字节代表什么?)。 Client_1是否必须再次通过SOCKS5身份验证,或者如何处理对新网页的请求?
附注
A)一段时间后,Client_2从Client_1请求的页面在浏览器中返回ERR_TIMED_OUT
,因为Client_2没有得到任何回复。但如果它期待响应,那么它也假设我知道如何解析它发送的字节,但我不知道它们是什么,因为我在RFC1928文档中没有看到它们。
答案 0 :(得分:2)
Client_1只接收来自Client_2的一些数据包,例如\ x17 \ x3 \ x3或\ x17 \ x3 \ x3 \ x1(这些字节代表什么?)。
Client_2正在请求到HTTPS主机的隧道。在建立到HTTPS服务器的SOCKS隧道之后,您看到的是Client_2和HTTPS服务器之间的TLS 1.2个数据包:
\x17 = content type (#23, application data) \x03 = major version 3 \x03 = minor version 3 \x01 = fragment length (1 byte) ...
Client_1是否必须再次通过SOCKS5身份验证
一旦建立了SOCKS隧道,通过该隧道传输的所有内容都是应用程序定义的数据。因此,SOCKS客户端无法通过现有TCP连接发送新的SOCKS命令。这意味着Client_2必须创建到中继服务器(以及Client_1)的新TCP连接,以便向不同的主机请求新的SOCKS隧道,并且涉及新的SOCKS身份验证握手,是(即使没有涉及SOCKS,无论如何,Client_2必须建立到新主机的新TCP连接。
或如何处理对新网页的请求?
Client_1必须等待从Client_2(或任何其他客户端)接受新的TCP连接,然后才能处理对新SOCKS隧道的请求。
一段时间后,Client_2从Client_1请求的页面在浏览器中返回ERR_TIMED_OUT,因为Client_2没有得到任何响应。
然后,HTTPS服务器没有响应Client_2的HTTPS请求,或者更有可能Client_1在处理SOCKS隧道时存在逻辑错误,并且没有将HTTPS服务器的响应数据中继到Client_2。
但如果它期待响应,那么它也假设我知道如何解析它发送的字节,但我不知道它们是什么,因为我没有在RFC1928文档中看到它们。
Client_1建立SOCKS隧道后,不应该解析通过该隧道传输的任何内容(除非您协商的SOCKS身份验证方案需要封装传输的数据)。通过SOCKS隧道传输的数据是应用程序定义的,因此只有隧道两端的客户端和目标服务器才知道数据实际是什么。 Client_1必须按原样(在需要时处理封装)中继它在两个方向上接收的原始数据(就像您的中继服务器那样)。