使用 python 连接到 tor 上的 .onion 网站?

Connect to .onion websites on tor using python?

这是我到目前为止的代码

import socks
import socket
import requests
import json

socks.setdefaultproxy(proxy_type=socks.PROXY_TYPE_SOCKS5, addr="127.0.0.1", port=9050)
socket.socket = socks.socksocket

data = json.loads(requests.get("http://freegeoip.net/json/").text)

而且效果很好。问题是当我使用 .onion url 它显示错误

Failed to establish a new connection: [Errno -2] Name or service not known

经过一番研究后,我发现虽然 http 请求是通过 tor 发出的,但解析仍然发生在 clearnet 上。什么是正确的方法,这样我也可以通过 Tor 网络解析域以连接到 .onion urls?

尽可能避免猴子补丁。如果您使用的是现代版本的请求,那么您应该已经拥有此功能。

import requests
import json

proxies = {
    'http': 'socks5h://127.0.0.1:9050',
    'https': 'socks5h://127.0.0.1:9050'
}

data = requests.get("http://altaddresswcxlld.onion",proxies=proxies).text

print(data)

使用 socks5h:// 方案指定代理很重要,这样 DNS 解析就可以通过 SOCKS 处理,这样 Tor 就可以正确解析 .onion 地址。

对此有一个更简单的解决方案,但因此您需要 Kali Linux。如果你有这个OS,你可以安装tor服务和kalitorify,用sudo service tor start启动tor服务,用sudo kalitorify -t启动kalitorify 。现在您的流量将通过 tor 发送,您可以访问 .onion 网站,就像访问普通网站一样。