Сбор данных из DHT (Пишем свой аналог
IKnowWhatYouDownload)
После
моего прошлого поста прилетело много фидбэка. Я не эксперт в области торрентов, но благодаря комментариям узнал несколько интересных нюансов. Это вдохновило меня на создание мини-аналога
IKnowWhatYouDownload, и, как оказалось, его можно сделать буквально за пару часов.
Начнем с базы
Разберемся, как работает IKnowWhatYouDownload (и подобные агрегаторы).
Вот что говорят его создатели:
Торрент-файлы попадают в нашу базу данных несколькими способами. Во-первых, мы собираем новинки с популярных торрент-сайтов (как зарубежных, так и российских). Во-вторых, у нас есть компоненты, которые постоянно мониторят DHT-сеть. Если кто-то ищет или анонсирует infohash, мы также добавляем его в базу.
Данные по одному торрент-файлу собираются раз в несколько часов. Чем дольше вы находитесь на раздаче, тем выше вероятность попасть в нашу базу. Данные на сайте обновляются с задержкой в сутки.
Что такое 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-ить самостоятельно.
Что получилось?
Я написал скрипт, который:
1️⃣ Принимает на входе хэш торрента (либо файл с набором хэшей)
2️⃣ Делает запрос к DHT и сохраняет результаты в JSON-файл (ключом в файле является хэш торрента, а значением — список IP-адресов и портов пиров, участвующих в раздаче)
Для теста я нагуглил хэш торрента с игрой "Ведьмак 3".
В результате работы скрипта отображается информация об активных на текущий момент пирах (скрины работы в комментариях): часть пиров совпала с данными IKnowWhatYouDownload, а часть — нет (IKnowWhatYouDownload работает с задержкой в сутки + некоторые клиенты могут появляться и исчезать довольно быстро и агрегатор может не успевать их собирать). Т.е получилось собрать больше данных, чем у вышеупомянутого агрегатора (мини-успех).
Итоговый
скрипт залил на GitHub.Важный момент: пользователи могут отключать DHT (он включен по умолчанию). В таком случае этот способ их не "обнаружит" (как и агрегаторы).
Если тема вызовет интерес, я глубже погружусь в работу торрентов и расскажу, как пользователи могут "обманывать" агрегаторов, которые следят за DHT.
@ru_vm
#ru_vm #Торренты #DHT #ИнформационнаяБезопасность #Разработка