首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中更改Tor标识?

如何在Python中更改Tor标识?
EN

Stack Overflow用户
提问于 2012-03-27 10:13:07
回答 7查看 44.5K关注 0票数 28

我有以下脚本:

代码语言:javascript
复制
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
import urllib2

print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

它使用tor和SocksiPy

现在,我希望更改每个请求的tor标识,例如:

代码语言:javascript
复制
for i in range(0, 10):
   #somehow change tor identity
   print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

我该怎么做?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-03-29 15:41:46

今天,我搜索了很多关于这个问题,并最终设法回答我自己。但在我需要说,食人鱼和托尔应该正确配置之前。首先是脚本,然后是一些关于配置的内容:

代码语言:javascript
复制
import urllib2
from TorCtl import TorCtl

proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
opener = urllib2.build_opener(proxy_support) 

def newId():
    conn = TorCtl.connect(controlAddr="127.0.0.1", controlPort=9051, passphrase="your_password")
    conn.send_signal("NEWNYM")

for i in range(0, 10):
    print "case "+str(i+1)
    newId()
    proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
    urllib2.install_opener(opener)
    print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

上面的脚本获得新的IP,并从ifconfig.me网站上检查它。关于配置:我们需要Privoxy。要在HTTP连接中使用tor,privoxy应该与TOR一起工作。我们可以通过将thi添加到/etc/privoxy/config文件中来做到这一点:

代码语言:javascript
复制
forward-socks5 / localhost:9050 . #dot is important at the end

然后在/etc/tor/torrc文件中配置ControlPort。我们只需取消这一行的评论:

代码语言:javascript
复制
ControlPort 9051
## If you enable the controlport, be sure to enable one of these
## authentication methods, to prevent attackers from accessing it.
HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C

然后我们重新启动tor:

代码语言:javascript
复制
/etc/init.d/tor restart
票数 22
EN

Stack Overflow用户

发布于 2013-11-06 10:06:49

Tor用Python,词干编写了一个新的TOR控件库。它可以在PyPI上找到。它们提供了一些关于如何使用它的很好的教程,其中的解释了如何更改您的身份:

代码语言:javascript
复制
from stem import Signal
from stem.control import Controller

with Controller.from_port(port = 9051) as controller:
  controller.authenticate()
  controller.signal(Signal.NEWNYM)

确保您的配置是对,是这样

票数 35
EN

Stack Overflow用户

发布于 2013-06-14 14:41:35

另一个简单的解决方案(不需要外部库)适用于IPv4和IPv6:

代码语言:javascript
复制
import socket

try:
    tor_c = socket.create_connection((TOR_CTRL_HOST, TOR_CTRL_PORT))
    tor_c.send('AUTHENTICATE "{}"\r\nSIGNAL NEWNYM\r\n'.format(TOR_CTRL_PWD))
    response = tor_c.recv(1024)
    if response != '250 OK\r\n250 OK\r\n':
        sys.stderr.write('Unexpected response from Tor control port: {}\n'.format(response))
except Exception, e:
    sys.stderr.write('Error connecting to Tor control port: {}\n'.format(repr(e)))
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9887505

复制
相关文章

相似问题

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