了解Socks5协议

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

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

感谢您的帮助!

1个回答

21
请仔细再次阅读RFC,它会告诉你所询问的内容。
客户端必须为每个要与之交换数据的目标服务器与SOCKS代理建立单独的TCP连接,无论该数据是TCP还是UDP。
如果客户端正在与目标服务器交换TCP数据,它只需在与代理建立的连接上发送/接收任何TCP数据即可,当代理发送成功回复后。
如果客户端正在与目标服务器交换UDP数据,则使用与代理的TCP连接来建立相关的UDP中继,代理随后用于转发UDP数据。客户端使用TCP连接告知代理要将入站UDP数据包发送到何处,代理的成功回复告知客户端将出站UDP数据包发送到何处。只要客户端和代理之间的TCP连接保持活动状态,UDP中继就会保持活动。
无论哪种方式,在建立必要参数后,代理都会透明地处理客户端和目标服务器之间的所有转发。

我也读过RFC 1928。在实践中,我发现这个答案很有帮助。然而,我不确定这些信息在哪里被指定。我没有找到RFC 1928文件详细说明这个答案中的信息。我知道这是一个旧问题,但如果有人阅读这篇文章并能编辑这个答案,并插入RFC文件的引用,我将非常感激 :) - Peter Bergman
1
@PeterBergman 我所描述的行为在RFC 1928中并没有明确说明,但是RFC确实指出SOCKS v5扩展了SOCKS v4,并且我所描述的行为(至少对于TCP数据,因为SOCKS v4不支持UDP)在SOCKS v4规范中明确说明,在连接建立之后,"客户端在与SOCKS服务器的连接上进行I/O操作,就像直接连接到应用服务器一样。" - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接