6

我正在使用stem来控制使用stem.process.launch_tor_with_config. 我还创建了一个stem.control.Controller在上述进程的控制端口上运行的。

如何更改出口节点?我看了看stem.controller.Controller.new_circuit,但这似乎改变了中间节点,保留了端点。

有谁知道如何做到这一点?

谢谢!

编辑:

所以我想我可能误解了一些基本的东西,但我似乎无法理解它。我尝试调用Controller.get_circuits()并找到一个CircuitEvent对象列表。这是否意味着单个进程可以处理多个电路?如果是这样,我该如何选择使用一种?

请注意,我通过 Privoxy 将 HTTP 请求定向到,而 Privoxy 又将其转发到 tor 进程的 SOCKS 端口。

编辑2:

我发现了一些有用的东西,但我不知道它是如何工作的,这让我很担心。我很乐意为任何可以回答的人提供答案:

  1. 解释为什么我的方法有效
  2. 展示一个更好的方法并解释它是如何工作的

这是我所做的:

for circuit in controller.get_circuits():
    controller.close_circuit(circuit.id)

它在那里。外部 IP 发生了变化,所以我知道我做了一些事情,但如果我确切知道是什么,那就见鬼了。

4

1 回答 1

6

您有几个选项可以使用特定的出口...

  • 在你的 torrc 中设置 ExitNodes 属性。这体现在...

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

  • 在您当前的电路之一上调用 extend_circuit() 到所需的端点...

https://stem.torproject.org/api/control.html#stem.control.Controller.extend_circuit

如果您要问的问题真的是“我如何获得新的 IP 地址”,那么这是我们更不愿意回答的问题。部分是因为它主要是为了规避禁令或搜索引擎优化,部分是因为重复的电路创建会给 Tor 网络带来高负载。

至于为什么当你调用 close_circuit() 时你的 IP 似乎发生了变化,那是因为 Tor 然后需要代表你为以下请求重新创建一个新电路。无法保证 IP 将是新的,并且这样做需要相当多的流量来通过三个新的跃点扩展您的连接。

我不经常在 StackOverflow 上,所以如果您对针对 Tor 编写脚本还有其他问题,那么我建议您使用 tor-dev@ 电子邮件列表...

https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-dev/

干杯! -Damian(stem 的作者)

于 2013-06-11T03:25:49.573 回答