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

问题描述:

我想监视运行Tor实例的状态。如何通过控制端口获取Tor出口节点的IP地址?

我已经能够通过TCP连接获取信息到控制端口。 例如“GETINFO流状态”返回数据,但我无法确定当前选择的出口节点的IP地址。

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

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

+0

您是否找到解决方案? – Fluffy 2013-02-02 20:40:44

根据Tor控制协议spec,正确的语法是“GETINFO地址”,它应该呈现the best guess at our external IP address。如果我们没有猜测,则返回551错误。 (在0.1.2.2-α增补)”。

+4

“GETINFO地址”提供了您自己的IP地址(即,如果您选择继电器,其他人会看到的地址)。海报所问的是他目前电路的出口中继地址。 – Damian 2013-06-16 03:26:32

+0

''getinfo电路状态''当前电路内置和准备。这将包含OR名称(路由器/跳跃的名称)和ID。有了这个,你可以用''getinfo ns/id/''或''getinfo ns/name/''可以让你确定ip – gesell 2015-07-03 12:30:55

这是一个很大的问题!下面是使用stem做一个简短的脚本...

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 

谢谢你的问题。我已经添加了这个到our FAQ

+1

如何知道这些Tor会使用哪一个? – Tyilo 2013-08-20 05:40:51

+0

是的,我们如何知道Tor正在使用哪些? – rdsoze 2014-01-30 12:07:08

+0

这个python/stem的用法如何转换成Tor控制协议?我想这是'GETINFO电路状态'。 – 2016-03-13 15:00:19

可以使用tor control api。但我不明白这一点。

你知道出口节点id~name,你知道它正在侦听的IP地址。你不知道什么样的网络interfac e以及它将用于处理您的查询的ip地址。

我刚刚检查了约5%的tor出口节点使用未发布的ipv4地址。

世界正在转向ipv6。这些IP地址很便宜。每个出口节点可以有一袋ipv6未发布的地址。