stem - 无法通过 tor 使用 python 获取新 ip

stem - can't get new ip with python via tor

我正在尝试使用 stem 和以下函数在 tor 会话中获取新 IP,该函数由 this answer 大量 'inspired':

def get_new_IP():
    socket.socket = old_socket
    with Controller.from_port(port=SOCKS_PORT) as controller:
        controller.authenticate()
        controller.signal(Signal.NEWNYM)
    socket.socket = socks.socksocket

但是我收到 controller.authenticate() 引发的错误 'IncorrectSocketType: unable to use the control socket' 这让我有点迷茫,因为没有密码或任何指定的内容,而且我设置的初始连接也有效。

我也曾尝试在启动 tor 进程时将 'CookieAuthentication': str(1)as suggested here 添加到配置设置中,但这也没有用。

为什么初始连接有效?为什么我在尝试重新连接时无法通过身份验证?

Controller.from_port() 应该连接到 ControlPort 而不是 torrc 中定义的 SocksPort(ControlPort 是 Stem 与之交谈的,而 SocksPort 是使用 tor 的应用程序,如 Firefox 使用的)。

https://stem.torproject.org/tutorials/the_little_relay_that_could.html

正如常见问题解答中所讨论的那样,请表现出一些克制,因为循环 IP 会给网络带来压力...

https://stem.torproject.org/faq.html#how-do-i-request-a-new-identity-from-tor