1
0
Files

3.6 KiB
Raw Permalink Blame History

Torrent Tracker Scraper

Минимальная утилита для чтения агрегированной статистики одного info hash через UDP BitTorrent tracker protocol (BEP 15). Проект переработан из _torrent/torrent.py и GetPeers.py: парсинг сайтов, прокси, базы данных, загрузка контента и прочий несвязанный код удалены. Остался только запрос состояния трекера.

Что делает

Программа выполняет два стандартных UDP-запроса к указанному трекеру:

  1. connect — получает временный connection ID;
  2. scrape — получает seeders, completed и leechers для одного info hash.

Она не скачивает файлы, не отправляет announce, не присоединяется к swarm, не обходит ограничения и не записывает состояние на диск. Ответ зависит от политики конкретного трекера: некоторые отключают scrape или требуют аутентификацию.

Установка

Требуется Python 3.10 или новее. Внешних Python-зависимостей нет.

git clone https://github.dfv24.com/fofanov.dmitry/torrent-tracker-scraper.git
cd torrent-tracker-scraper
python -m venv .venv
. .venv/bin/activate
python -m pip install --editable .

Использование

torrent-tracker-scrape tracker.example.org 6969 \
  0123456789abcdef0123456789abcdef01234567

Параметры:

  • host — DNS-имя или IPv4-адрес UDP-трекера;
  • port — UDP-порт трекера;
  • info_hash — ровно 40 шестнадцатеричных символов;
  • --timeout 5 — необязательное время ожидания в секундах, по умолчанию 8.

Успешный ответ имеет вид:

seeders=12 completed=340 leechers=4

При недоступности трекера, неожиданном ответе или неверном hash программа завершается с ошибкой. Это намеренно: вызывающий скрипт не должен принять неполные сетевые данные за нулевую статистику.

Структура и проверка

src/torrent_tracker_scraper/
  udp.py   # реализация пакетов BEP 15 и проверка ответов
  cli.py   # параметры команды и текстовый вывод
python -m compileall -q src
PYTHONPATH=src python -c "from torrent_tracker_scraper.udp import scrape; scrape('127.0.0.1', 1, 'bad')"

Вторая команда должна завершиться с понятной ошибкой валидации hash до сетевого обращения.

Использование по назначению

Работайте только с трекерами и материалами, к которым у вас есть законный доступ. Проверьте правила трекера до отправки запросов: публичность адреса не означает, что статистику разрешено опрашивать автоматически.

Лицензия

Код распространяется по лицензии MIT.