2

我想知道如何在 Python 中通过 Tor 访问网页。

有一些类似的问题,但没有一个是完全回答的,而且很多答案是完全错误的。

我偶然发现的第一页是这个;如何在 Python 中通过 Tor 发出 urllib2 请求?,最流行的答案是;

proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
opener = urllib2.build_opener(proxy_support) 
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
print opener.open('http://www.google.com').read()

有几页有类似的答案,反正那个页面上有人评论了;

“阅读这个帖子的人可能值得知道端口 8118 实际上是 Privoxy 的端口,而不是 Tor。Tor 是一个严格的 SOCKS-only 代理(端口 9050),因此它拒绝所有非 SOCKS 流量(例如 HTTP)。处理非 SOCKS 流量,您需要使用 Privoxy(端口 8118)或 Polipo(端口 8123)将流量转换为 SOCKS,以便 Tor 接受。

Privoxy 更适合隐私,而 Polipo 更适合性能,因为它会缓存。”

所以这不会让我到任何地方,经过一番搜索后,我在 TOR 上找到了这个 Python urllib?

我下载了socksipy,并尝试了代码。它有效,但我得到了和这个人一样的错误。他的问题没有公认的答案。该帖子来自2011年,我认为我试图澄清一个新问题是有序的。

或者,是否有一个很好的库来处理 Tor?

4

2 回答 2

2

是的,我们有几个 Python 库用于处理 Tor,最常见的是stemtxtorcon。有关此类客户端使用的教程,请参见此处

于 2013-06-16T04:25:44.800 回答
1

好的,这是我使用的解决方案;

我下载了这个 - http://pastie.org/6002288(不记得来源,但如果你需要的话,你可以追踪它的信息)

我运行它

现在我更改了我的计算机的设置,以强制任何 dns 解析在端口 53 上本地通过我的代理名称服务器。它将它中继到 tor。

处理它,现在我可以运行以下代码,知道我是安全的!

import socks
import socket
def create_connection(address, timeout=None, source_address=None):
    sock = socks.socksocket()
    sock.connect(address)
    return sock

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)

# patch the socket module
socket.socket = socks.socksocket
socket.create_connection = create_connection


import urllib

url = "http://www.google.com"
urllib.urlopen(url)

Tor 仍然告诉我它只接收一个 IP 地址,而不是一个 url,我可能正在泄漏信息。但我肯定不是,因为 DNS 查找正在通过我的本地代理,该代理通过 Tor。

于 2013-02-01T02:31:44.707 回答