Получение метаданных из инфохэша магнетлинка

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

Согласно BEP009,

формат URI магнита

Формат URI магнита:

v1: магнит:?xt=urn:btih:info-hash&dn=name&tr=tracker-url

v2: магнит:?xt=urn:btmh:tagged-info-hash&dn=name&tr=tracker-url

info-hash Закодированный в шестнадцатеричном формате информационный хеш, всего 40 символов. Для совместимости с существующими ссылками клиенты также должны поддерживать 32-символьный информационный хэш в кодировке base32.

tagged-info-hash — это отформатированный в шестнадцатеричном формате полный информационный хеш для торрентов в новом формате метаданных. Точные темы «btmh» и «btih» могут существовать в одном и том же магните, если они описывают один и тот же гибридный поток.

пример магнитной ссылки: magnet:?xt=urn:btih:407AEA6F3D7DC846879449B24CA3F57DB280DE5C&dn=ubuntu-educationpack_14+04_all&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969

Поправьте меня, если я ошибаюсь, но urn:btih:407AEA6F3D7DC846879449B24CA3F57DB280DE5C — это info-hash из магнитной ссылки, и мне нужно будет расшифровать его, чтобы получить метаданные bencoded, такие как перечисленные в BEP015. Такие вещи, как: downloaded, left, uploaded, event, etc.

Мой вопрос в том, как мне декодировать это в python?


person jake wong    schedule 06.05.2020    source источник


Ответы (3)


Информационный хэш в Magnet Link такой же, как и хэш, необходимый для UDP-трекера (20-байтовый хэш SHA-1 закодированного «информационного» словаря торрента).

Кроме того, UDP Tracker вообще не использует закодированные данные, а только байты! Однако формат Bencode используется трекерами HTTP/HTTP.

person SuRGeoNix    schedule 07.05.2020
comment
Здравствуйте, спасибо за это! Имеется в виду, что информационный хеш магнитной ссылки пропускает часть бенкодирования, которая была бы необходима для файла .tor, верно? Как мне тогда announcing обратиться к средствам отслеживания udp, чтобы они вернули мне списки пиров? Потому что согласно BEP015. Полезная нагрузка должна содержать эту информацию, такую ​​как: загружено, оставлено, загружено, событие и т. д. - person jake wong; 08.05.2020

Вы можете выполнить поиск в открытом исходном коде, например libtorrent. Он написан на C++, поэтому вам нужно прочитать часть bdecode и bencode. Эта часть несложная, и тогда вы можете сами писать коды на Python.

person tyChen    schedule 13.05.2020

Поправьте меня, если я ошибаюсь, но urn:btih:407AEA6F3D7DC846879449B24CA3F57DB280DE5C — это информационный хеш из магнитной ссылки, и мне нужно будет его декодировать, чтобы получить закодированные метаданные, такие как перечисленные в BEP015. Такие вещи, как: загружено, оставлено, загружено, событие и т. д.

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

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

В вашем примере есть два трекера UDP:

tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969

После их декодирования URL они становятся:

tr=udp://tracker.opentrackr.org:1337/announce&tr=udp://explodie.org:6969

Итак, это трекеры, на которые вы должны отправить свой запрос на анонс, внедрив https://libtorrent.org/udp_tracker_protocol.html

Обратите внимание, что это не дает вам никакой информации о торрент-файле, для этого вам необходимо реализовать BEP-9.

person Uku Loskit    schedule 12.07.2020