为什么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)
答案 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)
还要确保密码和端口正确!