我正在尝试使用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上获得了与我相同的结果。
我grep
在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)端口上对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/