Tor,Stem和Sockets - 用TOR改变身份

时间:2015-02-20 20:13:46

标签: python sockets ip tor

我试图通过python运行Tor。我的目标是能够在我选择的时间切换退出或以其他方式改变我的IP。我已经关注了几个教程并遇到了几个不同的错误。

此代码打印我的IP地址

import requests
r = requests.get('http://icanhazip.com/')
r.content
# returns my regular IP

我已经下载并安装了' Tor浏览器(虽然它似乎是从.exe运行)。当它运行时,我可以使用以下代码返回我的Tor IP,它似乎每10分钟左右更改一次,所以到目前为止一切似乎都在工作

import socks
import socket
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9150)
socket.socket = socks.socksocket

r = requests.get('http://icanhazip.com/')
print r.content
# Returns a different IP

现在,我已经找到了关于如何以编程方式请求新身份的说明here,但这就是事情开始出错的地方。我运行以下代码

from stem import Signal
from stem.control import Controller

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

我收到错误" SOCKS5错误:0x01:一般SOCKS服务器故障"在创建控制器的行。我认为这可能是一个配置问题 - instructions say应该有一个名为' torrc'的配置文件。包含端口号,除了其他东西。

最终,在目录C:\ Users \ .. myname .. \ Desktop \ Tor Browser \ Browser \ TorBrowser \ Data \ Tor中我找到了三个文件,一个' torrc',&#39 ; torrc-defaults'和' torrc.orig.1'。我的'torrc-defaults'看起来类似于' torrc'在文档中显示,我的torrc.orig.1'是空的,我的'torrc'有两行注释,如下所示,后面有一些设置,但没有端口设置

# This file was generated by Tor; if you edit it, comments will not be preserved
# The old torrc file was renamed to torrc.orig.1 or similar, and Tor will ignore it
...

我已经尝试确保“torrc-defaults”中列出的两个端口'匹配开头的socks语句中的端口和控制器语句。当它们分别是9150和9151时,我得到上面列出的一般SOCKS服务器故障。

当我尝试使用错误的端口运行Controller时(在这种情况下,9051在其他帖子中推荐但是对我来说导致Tor浏览器无法加载,当我调整' torrc-defaults' )然后我得到错误消息" [Errno 10061]无法建立连接,因为目标机器主动拒绝它"

最后,当我运行带有Tor浏览器的Controller在后台运行但没有先运行SOCKS语句时,我反而得到了很多警告文本,最后出现了错误,如下面的部分所示:

...
...
250 __OwningControllerProcess
DEBUG:stem:GETCONF __owningcontrollerprocess (runtime: 0.0010)
TRACE:stem:Sent to tor:
SIGNAL NEWNYM
TRACE:stem:Received from tor:
250 OK
TRACE:stem:Received from tor:
650 SIGNAL NEWNYM
TRACE:stem:Sent to tor:
QUIT
TRACE:stem:Received from tor:
250 closing connection
INFO:stem:Error while receiving a control message (SocketClosed): empty socket content

起初我认为这看起来非常有前途 - 我在新用户请求之前和之后都设置了这样的快速检查线

print requests.get('http://icanhazip.com/').content

它打印IP,但遗憾的是它之前和之后都是一样的。

我在这里迷失了 - 任何支持都会受到赞赏!

感谢。

2 个答案:

答案 0 :(得分:2)

获取您的哈希密码:

tor --hash-password my_password

修改配置文件:

sudo gedit /etc/tor/torrc

添加这些行

ControlPort 9051 
HashedControlPassword 16:E600ADC1B52C80BB6022A0E999A7734571A451EB6AE50FED489B72E3DF
CookieAuthentication 1

注意: - HashedControlPassword是从第一个命令生成的

请参阅此link

我没有尝试过,因为我正在使用mac,但我希望这有助于配置

答案 1 :(得分:1)

您可以使用torify来实现目标。例如,运行python解释器作为此命令“sudo torify python”,每个连接将通过TOR路由。

参考torify:https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO