了解Socks5协议

时间:2011-10-04 18:31:39

标签: proxy socks

我是socks5的新手,但我正在尝试通过创建socks5服务器来学习。

我从阅读RFC 1928获得了大量关于SocksV5的信息。

它解释了必须发送到客户端和服务器以建立与服务器的连接,请求远程连接和绑定的数据包。它还解释了如何使用UDP,这很棒。

我不明白连接建立后会发生什么。

例如,

Client: <sends method identifiers>
Server: <responds with the method identifier to use>
...authentication is complete....
Client: Sends a connection request to 192.168.1.1:2321
Server: Acknowledges Packet
Server: Acknowledges successful connection to 192.168.1.1:2321
Client: ????

从客户端发送到服务器以实际将数据转发到目标的数据包的格式是什么?

让我们说客户端要求代理服务器建立3个连接。当客户端想要将数据转发到连接1时,必须有一个协议来执行此操作。否则,服务器将如何知道将连接发送到哪个连接?我在RFC文档中找不到任何信息。

我想另一个问题是,这可能吗?客户端是否可以请求多个连接,或者它是否必须一次执行一个连接,或者为每个要转发的连接建立与服务器的单独套接字连接?

感谢您的帮助!

1 个答案:

答案 0 :(得分:16)

再次仔细阅读RFC,它确实会告诉您要求的内容。

客户端必须为要与其交换数据的每个服务器建立与SOCKS代理的单独TCP连接,无论该数据是TCP还是UDP。

如果客户端正在交换TCP数据,它只需在代理发送成功回复后通过与代理建立的同一连接读取/发送数据。

如果客户端正在交换UDP数据,则TCP连接用于建立代理用于来回转发数据的关联UDP中继。客户端告诉代理将入站UDP数据包发送到哪里,代理的成功回复告诉客户端将出站UDP数据包发送到哪里。只要客户端和代理之间的TCP连接处于活动状态,UDP重放就会处于活动状态。

无论哪种方式,一旦建立了必要的参数,代理就会透明地处理客户端和服务器之间的所有转发。