我正在尝试使用Node和socks5-https-client。由于某些原因,某些Tor隐藏服务(.onion)网站返回时出现连接错误。

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

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



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

下面是重现它的代码:

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来解决此问题。

我采取的步骤得出的结论是

您的代码在使用Tor 0.2.5.10,socks5-https-client 1.0.1,Node 0.12.0的64位Linux上获得了与我相同的结果。

grepsocks5-https-client的代码库中查找了错误,并在依赖项socks5-client on this line中获得了成功。它将基础SOCKS连接的错误代码转换为人类可读的消息。 Wikipedia's explanation of SOCKS5 error codes对此表示赞同,但同样也含糊其词

我发现5年前的related Tor bug report提示类似类型的错误,来自相同类型的SOCKS连接。原来,该错误仅表示服务器拒绝了您的连接。

只是为了确认一下,我通过Tor在443(HTTPS)端口上对TPB进行了tcping编码。它不会回复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-http -client,那么您的代码对我有用。

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

10-09 20:25