关于SOCKS5中UDP请求的问题
Posted
技术标签:
【中文标题】关于SOCKS5中UDP请求的问题【英文标题】:Questions about UDP requests in SOCKS5 【发布时间】:2021-12-29 15:48:22 【问题描述】:我有几个关于 SOCKS5 中的 UDP 请求的问题。我已经阅读了这篇论文https://www.rfc-editor.org/rfc/rfc1928#section-7,我正在尝试用 C++ 实现它。
问题:
-
发送和接收都需要使用“UDP 请求头”吗?
我可以使用 winsock2 中的“WSASendTo”之类的东西通过 SOCKS5 服务器重定向数据包吗?
【问题讨论】:
请查看发布指南,其中指定您应该将问题限制在一个问题上。 【参考方案1】:是否需要在发送和接收中都使用“UDP 请求标头”?
是的。您链接到的文档部分对此进行了介绍:
基于 UDP 的客户端必须在对 UDP ASSOCIATE 请求的回复中通过 BND.PORT 指示的 UDP 端口将其数据报发送到 UDP 中继服务器。如果选择的认证方法为真实性、完整性和/或机密性提供封装,则必须使用适当的封装来封装数据报。 每个 UDP 数据报都带有一个 UDP 请求头:
...
当 UDP 中继服务器决定中继 UDP 数据报时,它会默默地这样做,而不会通知请求客户端。同样,它会丢弃不能或不会中继的数据报。 当 UDP 中继服务器接收到来自远程主机的回复数据报时,它必须使用上述 UDP 请求头以及任何与身份验证方法相关的封装来封装该数据报。
这意味着您发送到 SOCKS 中继的 UDP 数据报和您从 SOCKS 中继接收的 UDP 数据报都带有相同的标头。
我可以使用 winsock2 中的“WSASendTo”之类的东西通过 SOCKS5 服务器重定向数据包吗?
您可以使用WSASendTo()
将您自己的数据报发送到 SOCKS 中继,是的。
但是,如果 redirect 您的意思是让其他应用程序的 UDP 套接字在他们不知情的情况下通过 SOCKS 中继发送/接收数据包,那么不是。
【讨论】:
感谢您的帮助,但您知道我在哪里可以找到支持 UDP 的 C/C++ SOCKS5 客户端示例吗? 您可以查看大量开源 SOCKS 代理,只需四处搜索即可。但这确实不是一个难以实现的功能。客户端通过 TCP 连接发送UDP ASSOCIATE
命令,代理打开一个 UDP 侦听端口,并将其详细信息发送回 TCP 客户端。然后,在该端口上从客户端接收到的任何 UDP 数据报都需要转发到目标,从目标接收到的任何数据报都需要转发到客户端。当 TCP 连接关闭时,UDP 端口也需要关闭。
您好!我的 SOCKS5 客户端大部分都在工作,但由于某种原因,它只适用于本地 SOCKS5 代理服务器。我发现问题在于代理服务器正在从 0.0.0.0 读取数据,但使用了正确的端口。我完全按照标准所说的那样做,所以可能出了什么问题? (我是winsock/SOCKS5的初学者,所以不要评判)
@Olli 无法在没有看到您更新的代码的情况下回答这个问题。请编辑您的原始问题以提供更多详细信息。
对不起,我的代码对于 *** 来说太大了,所以我创建了私有 github 存储库并邀请您查看我的代码。请注意,它是非常早期的 poc,因此代码还不干净。您应该查看 onet.cpp,Peer::Connect 函数。以上是关于关于SOCKS5中UDP请求的问题的主要内容,如果未能解决你的问题,请参考以下文章