虽然这看起来像一个bug,但一些开发人员认为它是如何完全符合RFC的。
我在Linux上编写了一个简单的C++程序,它连接到HTTP页面并通过Tor读取其内容。我使用以下命令启动tor服务:
tor --ignore-missing-torrc -f / --SocksPort auto --DataDirectory $HOME/tren/tor_0$HOME/tren只是我作为tmpfs挂载的一个目录(顺便说一句,即使我只运行tor,也会发生同样的情况)。Tor连接成功,我可以使用它的套接字。现在,我的程序与端口协商如下:
我发送{5,1,0}
SOCKS5发送{5,0}
我发送{5,1,0,3,17,www.icanhazip.com,0,80}
SOCKS5发送{5,0,0,1,0,0,0,0,0,0}
此域名地址是逐字节写入的,不需要空条件。为什么我的SOCKS5响应为0地址?如果我使用本地解析的IPv4连接到网站,也会发生同样的情况。我尝试请求HTTP页面,它正确地响应。
我使用的是Arch,我已经安装了正式的tor软件包。
编辑:我删除了我的代码,因为它是不完整的,而且远离“最小”。
发布于 2022-06-25 15:55:09
您的SOCKS5请求非常好,代理正在回复它成功地连接到www.icanhazip.com:80,因此开始根据需要通过现有的代理连接交换HTTP数据。
代理的答复只是告诉您,当它连接到0.0.0.0:0时,它将自己绑定到www.icanhazip.com:80 (或者它选择不告诉您它绑定到的实际IP/端口)。
BND.ADDR/BND.PORT
|
\/
+--------+ +-------+ +--------+
| Client | x <-> p1 | Proxy | p2 <-> y | Target |
+--------+ +-------+ +--------+
^
| +-----+
+-----> | DNS |
+-----+您所引用的零位于代理应答的BND.ADDR/BND.PORT字段中。这些字段表示上面的p2 -代理在解析客户端请求的主机名后用于连接目标服务器的出站IP/端口。听起来,您希望这些字段包含y目标服务器的入站IP/端口,但情况并非如此。
您不需要知道目标的IP/端口才能使用连接。您通过代理在您和目标之间有一个功能齐全的隧道,只需在隧道建立后使用- is连接即可。你不可能知道目标的IP/端口。你不能从代理那里得到那个信息。获得它的唯一方法是自己解析主机名(这违背了请求代理为您解析它的目的),或者询问目标本身(如果它有一个用于此目的的脚本)。
https://stackoverflow.com/questions/72753182
复制相似问题