Как я могу узнать IP-адрес маршрута Tor? - PullRequest
0 голосов
/ 11 июня 2018

Я студент колледжа, который проводит исследования Tor в японском университете.

Как я могу отобразить IP-адрес маршрута, как показано на рисунке?

enter image description here

Я подозреваю, что мне нужно выполнить некоторые операции с порта управления.

1 Ответ

0 голосов
/ 14 июня 2018

Способ работы немного сложен.Tor будет создавать различные каналы при запуске, а запросы SOCKS будут использовать схему, которую он сочтет подходящей.

Браузер Tor (работает от TorButton) имеет специальную функцию изоляции домена, где он передает запросы для определенной комбинации domain:port.через изолированную цепь, используя учетные данные с SOCKS-прокси Tor.Таким образом, вы можете открыть две вкладки в браузере Tor и посетить два разных домена и иметь разные IP-адреса для каждого сайта (потому что каждая вкладка использует совершенно разные схемы).

Для выполнения того, что вы 'пытаясь сделать это, вам нужно подражать этому поведению.

Вот подтверждение концепции, с которой можно начать.

  • Запуск Tor
  • Подключение кУправляющий порт Tor
  • Начать прослушивание событий STREAM SETEVENTS STREAM
  • Выполнить запрос SOCKS через Tor с использованием учетных данных прокси-сервера (лучше всего будет работать, если имя пользователя является доменным: порт combo для сайта, который выподключаются к и случайный пароль, который вы будете использовать для каждого последующего запроса к этому домену)
  • Отслеживать события потока для события SENTCONNECT, соответствующего вашей цели домена, и извлекать идентификатор канала из события.
  • Отправьте команду GETINFO circuit-status на контроллер для получения списка цепей, и путь к схеме будет представлен с идентификатором цепи из предыдущего шага..

Это даст вам узлы, через которые вы ретранслируете, и затем вы сможете получить информацию для получения имен и адресов ретранслятора.

Расширение по PoC выше, здесьЭто пример выходных данных, которые вы можете увидеть.

Подключитесь к контроллеру и прослушайте события

AUTHENTICATE "password"
250 OK
SETEVENTS STREAM
250 OK

Отправьте запрос с учетными данными прокси

curl --socks5-hostname localhost:9050 \
-U "torproject.org%3A:randomPasswordHere" \
https://torproject.org/donate`

Имя пользователя проксиtorproject.org:443 который является доменом и портом, который мы запрашиваем.randomPasswordHere - пароль.

Мониторинг событий STREAM

Когда вышеуказанный запрос будет выполнен, контроллер отправит некоторые события.

Пример:

650 STREAM 153 NEW 0 torproject.org:443 SOURCE_ADDR=127.0.0.1:45508 PURPOSE=USER
650 STREAM 153 SENTCONNECT 38 torproject.org:443
650 STREAM 153 REMAP 38 154.35.132.71:443 SOURCE=EXIT
650 STREAM 153 SUCCEEDED 38 154.35.132.71:443
650 STREAM 153 CLOSED 38 154.35.132.71:443 REASON=DONE

Интересующее нас событие - это событие SENTCONNECT, где target - запрашиваемая комбинация портов домена.

Формат этих событий:

"650" SP "STREAM" SP StreamID SP StreamStatus SP CircuitID SP Target
          [SP "REASON=" Reason [ SP "REMOTE_REASON=" Reason ]]
          [SP "SOURCE=" Source] [ SP "SOURCE_ADDR=" Address ":" Port ]
          [SP "PURPOSE=" Purpose]
          CRLF

Применяя эти знания к вышеуказанным данным, 153 - это идентификатор потока, 38 - это интересующий нас ID канала, torproject.org:443 - запрашиваемая нами цель.

Получить статус каналаdata

Теперь, зная идентификатор канала, который использовался в нашем запросе, мы можем получить информацию о канале, чтобы найти путь, по которому запрос поступил из сети.

GETINFO circuit-status
250+circuit-status=
38 BUILT $9E1E4F5B5F94812D02C4D18CB4086CE71CA5C614~torpidsDEhetzner1,$F0D264435B31F70FEFB322794E93211A8419F890~ANGRYRONIN,$79E169B25E4C7CE99584F6ED06F379478F23E2B8~MilesPrower BUILD_FLAGS=NEED_CAPACITY PURPOSE=GENERAL TIME_CREATED=2018-06-14T17:26:38.216992 SOCKS_USERNAME="torproject.org:443" SOCKS_PASSWORD="randomPasswordHere"
.
250 OK

Здесь вы увидите другие каналы, но яопустите их для простоты.

38 - это интересующий нас ID канала, так что вы можете проанализировать информацию о цепи, чтобы найти, что реле torpidsDEhetzner1 является защитой, ANGRYRONIN является серединой, иMilesPrower это выход.Дважды убедитесь, что поля SOCKS_USERNAME и SOCKS_PASSWORD присутствуют и совпадают с полями из запроса, чтобы убедиться, что у вас есть правильная схема.

Получение информации о реле

Затем можно выполнить различные команды дляконтроллер для получения информации о реле.

GETINFO ns/id/79E169B25E4C7CE99584F6ED06F379478F23E2B8
250+ns/id/79E169B25E4C7CE99584F6ED06F379478F23E2B8=
r MilesPrower eeFpsl5MfOmVhPbtBvN5R48j4rg axOufc4UeKsDqI/SrNiH31jyB1Y 2018-06-14 05:38:34 62.210.129.246 443 80
s Exit Fast Guard Running Stable V2Dir Valid
w Bandwidth=8170
.
250 OK

Оттуда вы можете извлечь IP-адрес и информацию о реле в цепи.

Дальнейшее чтение:

Такие библиотеки, как stem (Python) или TorUtils (PHP) (раскрытие: я являюсь автором PHP TorUtils), могут помочь в связи с протоколом управления Tor.

Надеюсь, это поможет!

...