文件中生成的词干列表 Tor 电路

Stem list Tor circuit generated in file

我正在尝试使用 Stem 启动 Tor 连接,然后列出选择的节点。

使用他们网站上的其他问题和常见问题解答,我可以做一个或另一个,但不能同时做。

例如,我可以用

启动一个 Tor 电路
  tor_process = stem.process.launch_tor_with_config(
    config = {
      'ControlPort': '2778',
      'Log': [
        'NOTICE stdout',
        'ERR file /tmp/tor_error_log',
      ],
    "MaxCircuitDirtiness" : str(60*60*24*30),
    "NewCircuitPeriod" : str(60*60*24*30),
    },
  )

如果我使用 here 中的代码单独启动 Tor,我可以单独查看电路节点。

但是如果我两者都尝试做,比如:

from stem import CircStatus
from stem.control import Controller
import stem
import stem.connection
import stem.process

from stem.control import Controller

if __name__ == '__main__':
  tor_process = stem.process.launch_tor_with_config(
    config = {
      'ControlPort': '2778',
      'Log': [
        'NOTICE stdout',
        'ERR file /tmp/tor_error_log',
      ],
    "MaxCircuitDirtiness" : str(60*60*24*30),
    "NewCircuitPeriod" : str(60*60*24*30),
    },
  )

  with Controller.from_port() as controller:
    controller.authenticate()

    for circ in controller.get_circuits():
      if circ.status != CircStatus.BUILT:
        continue  # skip circuits that aren't yet usable

      entry_fingerprint = circ.path[0][0]
      entry_descriptor = controller.get_network_status(entry_fingerprint, None)

      if entry_descriptor:
        print "Circuit %s starts with %s" % (circ.id, entry_descriptor.address)
      else:
        print "Unable to determine the address belonging to circuit %s" % circ.id
  tor_process.kill()

我得到一个错误:

Traceback (most recent call last):
  File "circuit.py", line 22, in <module>
    with Controller.from_port() as controller:
  File "/usr/local/lib/python2.7/dist-packages/stem/control.py", line 1024, in from_port
    control_port = stem.connection._connection_for_default_port(address)
  File "/usr/local/lib/python2.7/dist-packages/stem/connection.py", line 1058, in _connection_for_default_port
    raise exc
stem.SocketError: [Errno 111] Connection refused

这通常是我在没有单独启动的情况下尝试做事时遇到的错误 tor

有没有办法结合这两个操作?

编辑:有,我忘了我设置 ControlPort 在下面回答了我的问题。

答案很简单,我忘了我在config设置了端口,我设置了ControlPort : 2778,但是打开了Contoller.from_port(),它使用默认端口9051。

使用 Controller.from_port(port = 2778) 解决了问题。