Stem没有在Python中生成新的IP地址

时间:2017-07-13 23:22:15

标签: python tor

为什么Signal.NEWNYM没有生成新的IP地址?

from stem import Signal
from stem.control import Controller
import requests

with Controller.from_port(port=9051) as controller:
    print('Ready')
    controller.authenticate(password='872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C')
    print("Success!")
    controller.signal(Signal.NEWNYM)
    print("New Tor connection processed")
    print(requests.get('http://icanhazip.com').content)

2 个答案:

答案 0 :(得分:0)

NEWNYM信号不是用于获取新的退出节点,它仅将当前电路标记为脏,并确保新连接将使用新电路。

来自stem docs

  

需要注意的一点是,新电路并不一定意味着新的IP地址。根据速度和稳定性等启发式随机选择路径。 Tor网络中只有很多大型出口,因此重复使用之前的出口并不罕见。

     

Tor没有循环IP地址的方法。这是故意的,并且有几个原因。首先,这种能力通常被要求用于禁止逃避或搜索引擎优化等不太好的理由。其次,重复的电路创建会给Tor网络带来很大的负担,所以请不要!

修改即可。我最初错过了你在提出请求时没有使用Tor(代理)!这是问题的第一部分。

您应首先为socks库(requests)安装pip install requests[socks]支持,然后通过本地Tor代理发出请求,如下所示:

requests.get('https://httpbin.org/ip', 
             proxies={'http': 'socks5://127.0.0.1:9050',
                      'https': 'socks5://127.0.0.1:9050'}).text

答案 1 :(得分:0)

当你提出请求时,你得到了相同的 IP 还是第一次 IP 没有改变?

如果请求的 IP 相同:您应该让脚本休眠 30 秒,然后才能工作。

我遇到了同样的问题并通过睡眠解决了。

def renew_connection():
    with Controller.from_port(port=9051) as controller:
        controller.authenticate(password="YourPass")
        controller.signal(Signal.NEWNYM)
    time.sleep(30)

还要确保密码和端口正确!