如何通过控制端口获取Tor出口节点的IP地址?
问题描述:
我想监视运行Tor实例的状态。如何通过控制端口获取Tor出口节点的IP地址?
我已经能够通过TCP连接获取信息到控制端口。 例如“GETINFO流状态”返回数据,但我无法确定当前选择的出口节点的IP地址。
可以简单地请求whatismyip.org之类的东西,但这太慢了,并且不能很好地扩展。
那么获得Tor连接的出口节点IP地址的最佳方法是什么?
答
根据Tor控制协议spec,正确的语法是“GETINFO地址”,它应该呈现the best guess at our external IP address
。如果我们没有猜测,则返回551错误。 (在0.1.2.2-α增补)”。
答
这是一个很大的问题!下面是使用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。
答
可以使用tor control api。但我不明白这一点。
你知道出口节点id~name
,你知道它正在侦听的IP地址。你不知道什么样的网络interfac e以及它将用于处理您的查询的ip地址。
我刚刚检查了约5%的tor出口节点使用未发布的ipv4地址。
世界正在转向ipv6。这些IP地址很便宜。每个出口节点可以有一袋ipv6未发布的地址。
您是否找到解决方案? – Fluffy 2013-02-02 20:40:44