Как мне обнаружить дубликаты файлов внутри и между торрентами?
Если я загружаю кучу торрентов, есть ли способ или клиент, который обнаруживает уже загруженные файлы и перестает их скачивать?
Изменить: уточнение из комментариев. Да, это означает поиск дублирующих файлов между различными торрентами и избегание их загрузки.
Я знаю, что некоторые клиенты позволяют вам выбирать, какие файлы внутри торрента загружать. Можно ли получить контрольную сумму отдельных файлов внутри торрента, прежде чем скачивать их? Если так, я мог бы сделать сценарий или что-то.
2 ответа
По данным, доступным в файлах.torrent, невозможно определить, существует ли файл в торренте в другом торренте. В стандартном протоколе BitTorrent просто отсутствует поддержка дедупликации.
Когда создается торрент, все файлы в нем объединяются, а затем разбиваются на части.
example:
Files |---#1|#2|---#3|-----------------------#4|#5|------#6|-----#7|-------#8|
Pieces |--0|--1|--2|--3|--4|--5|--6|--7|--8|--9|-10|-11|-12|-13|-14|-15|-16|17|
- Все части имеют одинаковую длину, кроме последней.
- Файл имеет одну или несколько частей.
- Часть может содержать (части из) более одного файла.
- Очень редко совпадают внутренние границы файла и фрагмента (кроме случаев, когда используются файлы заполнения).
- Файл в многофайловом торренте почти всегда содержит фрагмент, совместно используемый с другим файлом.
Проблема в том, что невозможно создать хеш файла из хешей фрагмента.
(@jdwolf Даже если файл № 1 и файл № 3 идентичны, все их части хэши будут отличаться.)
Существует несколько программ для создания торрентов, которые могут добавлять хэши файлов, но на самом деле они нигде не используются.
Первая версия протокола BitTorrent не поддерживает дедупликацию, как упоминал @encombe.
Версия 2, с другой стороны, поставляется со встроенными хэшами файлов, которые не являются потоком sha256, а скорее модифицированы (например, с дополнительными данными заполнения).
Они назвали хеши BTMR (BitTorrent Merkle Root).
Эти ключи расположены в информационном словаре внутри свойства дерева файлов, и доступ к ним осуществляетсяpieces root
поле с двоичным кодированием.
Есть также инструменты для их извлечения.
Пример хеша BTMR (не декодирован):