如何通过控制端口获取Tor出口节点IP地址?

pin*_*int 14 ip exit tor

我想监视运行Tor实例的状态.

我已经能够通过TCP连接获取信息到控制端口.例如,"GETINFO stream-status"返回数据,但我无法确定当前所选退出节点的IP地址.

可以简单地请求像whatismyip.org这样的东西,但这太慢了,并且不能很好地扩展.

那么获得Tor连接的出口节点IP地址的最佳方法是什么?

Dam*_*ian 10

这是一个很好的问题!这是一个使用词干的简短脚本...

from stem import CircStatus
from stem.control import Controller

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

  for circ in controller.get_circuits():
    if circ.status != CircStatus.BUILT:
      continue

    exit_fp, exit_nickname = circ.path[-1]

    exit_desc = controller.get_network_status(exit_fp, None)
    exit_address = exit_desc.address if exit_desc else 'unknown'

    print "Exit relay"
    print "  fingerprint: %s" % exit_fp
    print "  nickname: %s" % exit_nickname
    print "  address: %s" % exit_address
    print
Run Code Online (Sandbox Code Playgroud)

谢谢你的提问.我已将此添加到常见问题解答中.

  • 我如何知道这些Tor将使用哪个? (2认同)

小智 -1

根据 Tor 控制协议规范,正确的语法是“GETINFO 地址”,它应该呈现the best guess at our external IP address。如果我们无法猜测,则返回 551 错误。(在 0.1.2.2-alpha 中添加)”。

  • “GETINFO 地址”提供您自己的 IP 地址(即,如果您选择成为中继,其他人将看到的地址)。发帖者询问的是他当前电路的出口中继地址。 (5认同)