Являюсь держателем простенького ретрекера в небольшой локальной сети. Есть желание превратить унылый список info_hash во что-то более информативное. Но нигде не могу найти информации(тяжко гуглится) о том как работает система получения структуры торент файла когда мы располагаем только названием трекера и info_hash. Я так понимаю существует способ и получение это структуры с самих источников, но не нашёл описание этого процесса в описании протокола =\
Просьба тех кто знает где найти инфу или сам сталкивался с этим вопросом, не скупиться на ответ :)
P.s. так как не являюсь программистом на C/C++, ковыряние в исходниках торент клиентов, особого успеха не принесло.
>Without going into to much detail, the hash of the magnet link is used to find peers using DHT.
Всё что нашёл. Получается, info_hash просто напросто ищется в DHT, а не на трекере. Хотя это даже логично — в magnet uri ж не указан адрес трекера. Фактически там всего лишь info_hash торрента.
Нет, вопрос в другом. DHT нам помогает искать источник, его же 100% вернёт и анонсир ретрекера. Вопрос, как зная IP:PORT источника и info_hash получить структуру торрента.
Спеки все эти читал, а эту и не один раз. Но не понял как с ней работать, тупо даже не пойму где тут идёт запрос по конкретному info_hash, и в каком формате придёт ответ.
Мне по-сути нужно узнать дерево файлов и закрепить его info_hash.
В соответствии с этим сообщением, info_hash передаётся на этапе handshake. Так что условно говоря вторая сторона его уже знает, и отправляет пакеты в соответствии с ним.
А передаётся в таком формате (пакет data):
d8:msg_typei1e5:piecei0e10:total_sizei99999ee
А дальше аппендится в бинарном виде сама метадата торрента. В частности info секция. Вроде передаётся только она.
Соответственно:
1. Делаем handshake (как при скачивании простого торрента)
2. Передаём request (d8:msg_typei0e5:piecei0ee)
3. Получаем данные (пакет data) или отказ (пакет reject: d8:msg_typei1e5:piecei0ee)