node.js - 为什么我的一些 .onion 网站会得到 "SOCKS connection failed. Connection not allowed by ruleset"?

标签 node.js tor socks

我正在试验 Node 和 socks5-https-client .出于某种原因,某些 Tor 隐藏服务 (.onion) 站点返回连接错误。

例如,连接到 DuckDuckGo (3g2upl4pq6kufc4m.onion) 可以正常工作并返回 HTML。

但是,连接到海盗湾 (uj3wazyk5u4hnvtk.onion) 或 TORCH (xmh57jrzrnw6insl.onion) 会返回...

Error: SOCKS connection failed. Connection not allowed by ruleset.

这个错误是什么意思?我该如何避免?


这是重现它的代码:

var shttps = require('socks5-https-client');

shttps.get({
    hostname: '3g2upl4pq6kufc4m.onion',
    path: '',
    socksHost: '127.0.0.1',
    socksPort: 9150,
    rejectUnauthorized: false
}, function(res) {
    res.setEncoding('utf8');
    res.on('readable', function() {
        console.log(res.read()); // Log response to console.
    });
});

错误似乎是由服务器响应的字段 2 中的 0x02 值引起的。

最佳答案

总结

您无法访问的服务器不支持 HTTPS。换句话说,他们的端口 443 是关闭的。 Tor 的错误消息没有帮助。

如果您的安全需要允许,您可以回退到 socks5-http-client 来解决这个问题。

我采取的步骤

你的代码在 64 位 Linux 上使用 Tor 0.2.5.10、socks5-https-client 1.0.1、Node 0.12.0 得到了相同的结果。

grepped socks5-https-client 的错误代码库,并在依赖项 socks5-client on this line 中命中。它将底层 SOCKS 连接的错误代码转换为人类可读的消息。 Wikipedia's explanation of SOCKS5 error codes 与此一致,但同样含糊不清

我发现 5 年前的 related Tor bug report 提示类似的错误,来自相同类型的 SOCKS 连接。原来这个错误只是意味着服务器拒绝了你的连接。

为了确认,我通过 Tor 在端口 443 (HTTPS) 上tcpinged TPB。它不回复 TCP SYN,并且失败并出现同样令人困惑的错误:

$ torify tcping uj3wazyk5u4hnvtk.onion 443
[Mar 22 22:40:59] ERROR torsocks[18560]: Connection not allowed by ruleset (in socks5_recv_connect_reply() at socks5.c:520)
error: uj3wazyk5u4hnvtk.onion port 443: Software caused connection abort

虽然他们的端口 80 (HTTP) 回复:

$ torify tcping uj3wazyk5u4hnvtk.onion 80
uj3wazyk5u4hnvtk.onion port 80 open.

因此,如果我使用 socks5-http-client 而不是 socks5-https-client,您的代码对我有用。

关于node.js - 为什么我的一些 .onion 网站会得到 "SOCKS connection failed. Connection not allowed by ruleset"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29175734/

相关文章:

javascript - 如何确保node js在异步调用后返回数据?

javascript - 如何在 JavaScript 中编译一串 CoffeeScript 代码?

python - 使用tor代理时如何控制tor

python - 无法通过 tor ConnectionRefusedError : [WinError 10061] 发出 python 请求

javascript - 如何在 sockjs-STOMP 上禁用调试消息

javascript - 如何使用 Node js 和 socket.io 在 mysql 数据库中插入新记录时通知并更新客户端

javascript - `util.inherits` 和扩展 NodeJS 原型(prototype)的区别

python - 如何通过 Python 使用 GeckoDriver 和 Selenium 启动使用默认 Firefox 到 68.9.0esr 的 Tor 浏览器 9.5

node.js - 如何在 node.js 中同时使用多个代理(代理)

c++ - socks 5 UDP 连接