为什么我得到“SOCKS连接失败。 某些.onion网站的规则集不允许连接“?

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

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

然而,连接到海盗湾( uj3wazyk5u4hnvtk.onion )或TORCH( xmh57jrzrnw6insl.onion )返回…

错误:SOCKS连接失败。 规则集不允许连接。

这个错误是什么意思? 我怎样才能避免它?


这是重现它的代码:

 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被closures。 Tor的错误信息是无益的。

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

我采取的步骤来得出这一结论

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

grep ped socks5-https-client的代码库的错误,并得到了在这一行依赖socks5-client中的一击。 它将底层SOCKS连接的错误代码转换为可读的消息。 维基百科关于SOCKS5错误代码的解释与此类似,但同样无益的模糊

从5年前我发现一个相关的Tor错误报告 ,抱怨来自同一types的SOCKS连接的类似错误。 发现错误只是意味着服务器拒绝你的连接。

只是为了确认,我通过Tor在端口443(HTTPS)上编辑了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-http s -client,那么你的代码适用于我。