Способ работы немного сложен.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.
Надеюсь, это поможет!