【问题标题】:Is it possible to speed up the changing of IP addresses when using theStem package in Python via Tor?通过 Tor 在 Python 中使用 Stem 包时,是否可以加快 IP 地址的更改?
【发布时间】:2019-01-31 13:50:32
【问题描述】:

我目前正在使用以下设置来更改我在 Mac OS X 中的 IP 地址:

from stem import Signal
from stem.control import Controller

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

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.1'
}

proxies = {
    "http": "http://127.0.0.1:8118"
}

r_ip = requests.get("http://icanhazip.com", proxies=proxies, headers=headers_tor)
print(r_ip.text)

我首先在命令行中运行 Tor,然后执行上面的。我注意到 IP 地址不会立即更改,而是需要几秒钟才能运行上面的代码块以生成新的 IP 地址。此外,在我运行 Tor 的终端页面上,它会输出如下消息:

Aug 25 04:13:53.000 [notice] Rate limiting NEWNYM request: delaying by 7 second(s)

有没有一种方法可以无延迟地更改 IP 地址?

【问题讨论】:

    标签: python python-3.x tor stem


    【解决方案1】:

    根据Tor control specificationsNEWNYM 信号指示您的 Tor 客户端打开新电路。结果,您将(很可能)获得一个具有与以前不同的出口节点的电路,因此具有不同的 IP 地址。

    这总是需要一些时间,而且你不能真正加快电路构建本身。您可以做的是将“CircuitBuildTimeout”(请参阅​​the Tor manual)更改为默认值 60 秒以外的其他值,因此如果花费的时间超过指定的时间,tor 会尝试构建不同的电路。请注意,这可能会引发隐私问题,因为您更喜欢快速路由器。

    电路结构总是会给 Tor 网络带来很大的负载。为了注意这一点,“tor 可能会限制响应”对 NEWNYM 信号 (section 3.7 of the tor control specification)。所以你不能经常建立电路。除了更改源代码以禁用此机制外,没有办法规避此预期限制。

    如果您需要固定数量的不同 IP 地址,您可以使用不同的端口多次指定“HTTPTunnelPort”配置选项。为此,您需要在 torrc 文件中添加以下行(对于 linux,通常在 /etc/tor/torrc。对于 Mac,该文件似乎更难找到 as descirbed here):

    HTTPTunnelPort 8118
    HTTPTunnelPort 8119 
    

    等等。 然后,tor 将在启动时为每个端口打开一个电路,因此这部分需要更长的时间。您的请求将具有不同的 IP 地址,具体取决于您发送它们的端口。例如:port 8118 -> 5.5.5.5 port 8119 -> 4.4.4.4. 要在地址之间切换,请在您的 python 脚本中更改代理配置中的端口。

    这有利于在固定数量的地址之间进行切换。但是,它只改变等待电路构建的时间。 对于每次请求后进行更改,使用 NEWNYM 似乎更好。

    此外,您可以使用stem 的get_newnym_waitis_newnym_available 来查看tor 是否允许您构建新电路,如果不允许,您需要等待多长时间。

    【讨论】:

    • 感谢您的回复,这真的很棒。一直在到处寻找这样的东西。我有一个问题要问你:我实际上需要一个固定数量的 IP 地址开始。使用“HTTPTunnelPort”配置,您能详细说明它是如何工作的吗?会不会先“保存”所有地址,然后一个一个地使用?
    • 欢迎您!我修改了答案以更详细地显示配置。请问你到底想达到什么目标?如果您想在多个 IP 之间切换,允许重用它们,打开多个端口似乎是个好主意。如果您想为每个请求使用不同的 IP,则不是。那么,使用 newnym 可能会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多