SOCKS 5 服务器 - BND.PORT 和 BND.ADDR

Tre*_*ery 4 socks

在 C++ 中(我没有包含代码,因为这更多的是协议理解问题),我正在创建一个 SOCKS5 服务器,并且有一些问题,因为客户端在我向其发送批准的消息后终止连接。在 RFC 中,它说 BND.ADDR 和 BND.PORT 用于: RFC 1928

o BND.ADDR 服务器绑定地址

o BND.PORT 服务器绑定端口(按网络八位字节顺序)`

在对 CONNECT 的回复中,BND.PORT 包含服务器分配用于连接到目标主机的端口号,而 BND.ADDR
包含关联的 IP 地址。

这是我的问题,

  1. 什么是 BND.PORT?我应该为它指定什么?
  2. “分配用于连接到目标主机的服务器”是什么意思 目标主机是“客户端”吗?
    1. 我已经从头到尾阅读了 RFC 大约 5 遍,但我还没有理解它,有人可以更详细地介绍 BND.PORT 及其含义吗?

我在 Wireshark 中嗅探,发现 BND.PORT 对于每个发出的请求都是不同的。(我不确定要输入哪个端口,因为我尝试的所有操作都导致 Proxifer(袜子客户端)显示“服务器进行了意外重播 - 连接终止”

来自实际 SOCKS5 服务器(不是我的)的 Wireshark 连接十六进制转储: 在此输入图像描述 在此输入图像描述

Sad*_*Cat 5

只是为了确保我们在同一页面上......这就是客户端、服务器和主机之间的关系。请注意,客户端和主机无法直接相互通信。

客户端 <-> 服务器 <-> 主机

“分配用于连接到目标主机的服务器”是什么意思 目标主机是“客户端”吗?

不。“主机”是客户端尝试通过 SOCKS5 服务器连接的设备。“客户端”位于 SOCKS5 服务器的另一侧,距离主机最远。

什么是 BND.PORT?我应该为它指定什么?

BND.PORT 是离开 SOCKS5 服务器、发往主机的数据包的源端口。您无法控制服务器选择哪个端口。想一想。主机从哪里看到数据包?这肯定不是客户。从主机的角度来看,数据包都是来自服务器,它不知道客户端的情况。另外,BND.ADDR 是服务器的 IP。

我所说的都是在使用CONNECT的情况下的。我还没有使用 BIND 或 UDP ASSOCIATE 的经验。