首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python urllib胜过TOR?

Python urllib胜过TOR?
EN

Stack Overflow用户
提问于 2011-03-01 06:59:48
回答 2查看 21.7K关注 0票数 17

示例代码:

代码语言:javascript
复制
#!/usr/bin/python
import socks
import socket
import urllib2

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4, "127.0.0.1", 9050, True)
socket.socket = socks.socksocket

print urllib2.urlopen("http://almien.co.uk/m/tools/net/ip/").read()

TOR正在端口9050 (其默认端口)上运行SOCKS代理。请求通过TOR,出现在我自己的IP地址之外的其他IP地址。但是,TOR控制台会给出警告:

"Feb 28 22:44:26.233警告您的应用程序(使用socks4到端口80)只给Tor一个IP地址。进行DNS解析的应用程序可能会泄漏信息。请考虑改用Socks4A (例如,通过privoxy或socat)。有关详细信息,请参阅https://wiki.torproject.org/TheOnionRouter/TorFAQ#SOCKSAndDNS。“

即DNS查找不会通过代理。但这就是setdefaultproxy的第四个参数应该做的事情,对吧?

来自http://socksipy.sourceforge.net/readme.txt

设置代理(代理类型,地址[,端口[,rdns[,用户名,密码])

rdns -这是一个布尔标志,用于修改有关DNS解析的行为。如果设置为True,将在服务器上远程执行DNS解析。

选择PROXY_TYPE_SOCKS4和PROXY_TYPE_SOCKS5时效果相同。

它不能是本地DNS缓存(如果urllib2支持的话),因为当我将URL更改为此计算机以前从未访问过的域时,就会发生这种情况。

EN

回答 2

Stack Overflow用户

发布于 2012-12-17 11:32:33

问题是httplib.HTTPConnection使用了socket模块的DNS函数,该函数在连接套接字之前通过通常的getaddrinfo方法执行create_connection请求。

解决方案是创建您自己的create_connection函数,并在导入urllib2之前将其修补到socket模块中,就像我们对socket类所做的那样。

代码语言:javascript
复制
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 urllib2

# Now you can go ahead and scrape those shady darknet .onion sites
票数 21
EN

Stack Overflow用户

发布于 2011-12-17 02:13:33

我发表了一篇带有完整源代码的文章,展示了如何在http://blog.databigbang.com/distributed-scraping-with-multiple-tor-circuits/上使用urllib2 + SOCKS + Tor

希望它能解决你的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5148589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档