Сбор данных из DHT (как работают агрегаторы)

от автора

После моей прошлой статьи прилетело много фидбэка. Я не эксперт в области торрентов, но благодаря комментариям узнал несколько интересных нюансов. Это вдохновило меня на продолжение предыдущей стати и создание мини-аналога IKnowWhatYouDownload (как оказалось, его можно сделать буквально за пару часов).

Начнем с базы
Разберемся, как работает IKnowWhatYouDownload (и подобные агрегаторы).
Вот что говорят его создатели:
Торрент-файлы попадают в нашу базу данных несколькими способами. Во-первых, мы собираем новинки с популярных торрент-сайтов (как зарубежных, так и российских). Во-вторых, у нас есть компоненты, которые постоянно мониторят DHT-сеть. Если кто-то ищет или анонсирует infohash, мы также добавляем его в базу.

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

Обычно мы решаем другие задачи — отслеживать небольшое количество торрент файлов, получая по ним как можно больше данных.

Как вы понимаете, на сайте идеология другая — получить по большому количеству торрент-файлов как можно больше данных, поэтому применяемые методы могут быть неточными. Да, кроме того, на сайте не отображаются данные старше 4х недель.

Что такое DHT?

DHT (Distributed Hash Table) — это технология, которая используется в торрент-сетях для децентрализованного поиска участников раздачи (пиров) без необходимости подключения к центральному трекеру. Вместо того чтобы полагаться на сервер, DHT позволяет каждому участнику сети хранить и обмениваться информацией о пирах напрямую.

Проще говоря, DHT хранит данные о том, какие пиры участвуют в раздаче конкретного торрента (по его info_hash). Когда вы обращаетесь к DHT, другие узлы сети возвращают список IP-адресов и портов, которые они знают для данного торрента. Именно эту информацию собирают агрегаторы, делая запросы с определенным интервалом.

Как написать свой агрегатор?

После изучения вышеперечисленных деталей стало понятно, что для создания своего аналога нужно выполнить следующие шаги:
1. Собрать хэши интересующих раздач с трекеров;
2. Делать запросы в DHT по каждому хэшу, чтобы получить IP-адреса и порты пиров, участвующих в раздаче, и сохранять их в удобном формате (например, JSON).
3. Загружать данные в базу для дальнейшей обработки и отображения пользователю.
4. Повторять процесс с определенным интервалом (например, раз в час).

Пункты 1, 3 и 4 довольно просты (для первого понадобится VPN, а для остальных есть множество готовых гайдов).

Самый сложный — это пункт 2. Документации и гайдов по работе с DHT мало, а готового кода я не нашел. Поэтому пришлось немного по python-ить самостоятельно.

В качестве языка программирования я выбрал Python и для взаимодействия с DHT решил использовать libtorrent.

Что получилось?
Я написал скрипт, который:
1. принимает на входе хэш торрента (либо файл с набором хэшей)
2. делает запрос к DHT и сохраняет результаты в JSON-файл (ключом в файле является хэш торрента, а значением — список IP-адресов и портов пиров, участвующих в раздаче)

Для теста я нагуглил хэш торрента с игрой «Ведьмак 3» (2AA7BD1D13F982293512F873A4E9C5EAD4C18BA8).

В результате работы скрипта отображается информация об активных на текущий момент пирах (скрины работы в комментариях): часть пиров совпала с данными IKnowWhatYouDownload, а часть — нет (IKnowWhatYouDownload работает с задержкой в сутки + некоторые клиенты могут появляться и исчезать довольно быстро и агрегатор может не успевать их собирать).

Запрос к DHT с целью получить доступных пиров

Запрос к DHT с целью получить доступных пиров
Содержимое JSON-файла с итоговым результатом

Содержимое JSON-файла с итоговым результатом

То есть получилось собрать больше данных, чем у вышеупомянутого агрегатора (мини-успех).
Итоговый скрипт залит на GitHub.

Важный момент: пользователи могут отключать DHT (он включен по умолчанию). В таком случае этот способ их не «обнаружит» (как и агрегаторы).

Если вам понравилась эта статья и вы хотите узнавать больше о подобных инструментах, технологиях и лайфхаках, подписывайтесь на мой авторский Telegram-канал!

https://t.me/ru_vm


ссылка на оригинал статьи https://habr.com/ru/articles/891204/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *