为什么 SOCKSv5 客户端不显示提供的凭据的长度?

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

我正在 node.js 中构建 SOCKS5 代理服务器,当我使用用户名和密码进行身份验证时,我从客户端得到的回复与 RFC-1929 定义的不同。

根据RFC-1929,当客户端向我提供身份验证方法时,然后服务器选择应使用哪种方法。我选择使用用户名/密码方法,客户端必须返回用户名长度、用户名本身、密码长度和密码本身。

但它只返回用户名和密码。

回复应如下所示:

       +----+------+----------+------+----------+
       |VER | ULEN |  UNAME   | PLEN |  PASSWD  |
       +----+------+----------+------+----------+
       | 1  |  1   | 1 to 255 |  1   | 1 to 255 |
       +----+------+----------+------+----------+

但是,它看起来像这样:

       +----+----------+----------+
       |VER |  UNAME   |  PASSWD  |
       +----+----------+----------+
       | 1  | 1 to 255 | 1 to 255 |
       +----+----------+----------+

所以我只是不知道用户名和密码是什么,因为我将它们作为单个字符串获取,而不知道它们各自的长度。

例如,当我将用户名作为用户,将密码作为通行证时,在整个初始协商过程之后,我得到了用户通行证。现在我不能只是随机猜测用户名和密码是什么,对吗?

我使用内置的 macOS 客户端。首选项 > 网络 > 详细信息 > 代理 > SOCKS > 等。 所以我想也许客户端软件构建不正确,我下载了Proxifier,得到了相同的结果。我什至观察了与 Wireshark 的初始协商过程,甚至在 Wireshark 中,当客户端发送凭据时,它们也没有长度。

有人知道为什么它不符合 RFC-1929 标准中的解释吗?我到底应该如何提取用户名和密码?

node.js macos socks5
1个回答
0
投票

我尝试再次在 Wireshark 中查看,我注意到 ULEN 和 PLEN 没有显示为单独的参数,所以它是这样的:

   +----+----------------+----------------+
   |VER | ULEN + UNAME   | PLEN + PASSWD  |
   +----+----------------+----------------+
   | 1  |  1 + 1 to 255  |  1 + 1 to 255  |
   +----+----------------+----------------+

Wireshark 数据包截图

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