使用Tor和Stem更改标识

时间:2016-11-30 00:05:23

标签: python tor stem

我正在关注教程To Russia With Love,作为其中的一部分,我想在每次运行代码时更改身份。我已经查看了多个问题和教程,从它的外观来看,我的torrc-defaults文件是正确的,因为它具有: ControlPort 9151 CookieAuthentication 1

我想首先编辑torrc文件,但如果我触摸它,Tor将不再运行,所以我在某处看了看torrc。 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

我不想设置密码,所以我从阅读干文档的理解是设置身份验证就足够了。我有以下代码:

import socks  # SocksiPy module
import socket
import requests

SOCKS_PORT = 9150

# Set socks proxy and wrap the urllib module

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', SOCKS_PORT)
socket.socket = socks.socksocket

def getaddrinfo(*args):
  return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]

socket.getaddrinfo = getaddrinfo

url = "http://google.com"

print requests.get(url).elapsed.total_seconds()

from stem import Signal
from stem.control import Controller

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

但是当我运行它时我得到错误: socks.SOCKS5Error:0x01:一般SOCKS服务器故障

我不知道该怎么做,我已经读了好几个小时,但却无法解决问题。任何提示都会很棒。

编辑: 我也读过This Post,但似乎没有解决方案。 我还尝试在设置套接字之前放置Controller语句,但在这种情况下,IP保持不变并且不会更改。

1 个答案:

答案 0 :(得分:0)

我最终通过在设置套接字之前移动控制器语句来解决此问题。最初看起来IP保持不变但是如果你等了3或4秒IP更改,那么我只是添加了一个时间延迟,它运行正常。