Подтвердить что ты не робот

Как получить Tor выход node IP-адрес через порт управления?

Я хочу отслеживать состояние запуска экземпляров Tor.

Я уже могу получить информацию через TCP-соединение с портами управления. Например. "Состояние потока GETINFO" возвращает данные, но я не могу определить IP-адрес текущего выбранного выхода node.

Можно было бы просто запросить что-то вроде whatismyip.org, но это слишком медленно и плохо масштабируется.

Итак, каков наилучший способ получить выход node IP-адрес соединения Tor?

4b9b3361

Ответ 1

Это отличный вопрос! Здесь короткий script для этого, используя 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

Спасибо за вопрос. Я добавил это в наши часто задаваемые вопросы.

Ответ 2

Вы можете использовать tor control api. Но я не вижу смысла.

Вы знаете выход node id~name, вы знаете IP-адрес, который он прослушивает. Вы не знаете, какой сетевой интерфейс и какой IP-адрес он будет использовать для обработки вашего запроса.

Я только что проверил, что около 5% узлов выхода tor используют неопубликованные адреса ipv4.

Мир движется к ipv6. Эти IP-адреса дешевы. Каждый выход node может иметь пакет непокрытых адресов ipv6.

Ответ 3

Согласно протоколу управления Tor spec, правильный синтаксис - это "адрес GETINFO", который должен отображать the best guess at our external IP address. Если у нас нет догадки, верните ошибку 551. (Добавлено в 0.1.2.2-альфа) ".