了解Socks5协议

问题描述 投票:0回答:1

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

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

感谢您的帮助!

proxy socks
1个回答
21
投票

再仔细阅读一下 RFC,它确实告诉了你你的要求。

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

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

如果客户端与目标服务器交换 UDP 数据,则与代理的 TCP 连接用于建立关联的 UDP 中继,然后代理使用该中继来回转发 UDP 数据。客户端使用 TCP 连接告诉代理将入站 UDP 数据包发送到何处,代理的成功回复告诉客户端将出站 UDP 数据包发送到何处。只要客户端和代理之间的 TCP 连接处于活动状态,UDP 中继就会处于活动状态。

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

© www.soinside.com 2019 - 2024. All rights reserved.