整合tor和python

时间:2012-11-16 20:11:00

标签: python proxy socks tor

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

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

我偶然发现的第一页就是这个; How to make urllib2 requests through Tor in Python?,最流行的答案是;

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专用代理(端口9050),所以它拒绝所有非SOCKS流量(例如HTTP)要处理非SOCKS流量,您需要使用Privoxy(端口8118)或Polipo(端口8123)将流量转换为SOCKS,以便Tor接受。

Privoxy更适合隐私,Polipo更适合性能,因为它可以缓存。“

所以这不会让我到任何地方,经过一些搜索我发现这Python urllib over TOR?

我下载了socksipy,并尝试了代码。它有效,但我得到了与这个家伙相同的错误。他的问题没有被接受的答案。该帖子是从2011年开始的,我认为我试图澄清的一个新问题是有序的。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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地址,而不是一个网址,我可能会泄露信息。但我不是肯定的,因为DNS查找是通过我的本地代理通过Tor。