15

我是 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 文档中找不到任何信息。

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

谢谢您的帮助!

4

1 回答 1

20

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

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

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

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

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

于 2011-10-04T20:37:55.627 回答