【问题标题】:Questions about UDP requests in SOCKS5关于SOCKS5中UDP请求的问题
【发布时间】:2021-12-29 15:48:22
【问题描述】:

我有几个关于 SOCKS5 中的 UDP 请求的问题。我已经阅读了这篇论文https://www.rfc-editor.org/rfc/rfc1928#section-7,我正在尝试用 C++ 实现它。

问题:

  1. 发送和接收都需要使用“UDP 请求头”吗?
  2. 我可以使用 winsock2 中的“WSASendTo”之类的东西通过 SOCKS5 服务器重定向数据包吗?

【问题讨论】:

  • 请查看发布指南,其中指定您应该将问题限制在一个问题上。

标签: c++ winsock winsock2 socks


【解决方案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 无法在没有看到您更新的代码的情况下回答这个问题。请编辑您的原始问题以提供更多详细信息。
  • 对不起,我的代码对于 stackoverflow 来说太大了,所以我创建了私有 github 存储库并邀请您查看我的代码。请注意,它是非常早期的 poc,因此代码还不干净。您应该查看 onet.cpp,Peer::Connect 函数。
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多