Подключаемся к торрент-рою или DHT с рубином

Мне, вероятно, не хватает фундаментального понимания того, как работают BitTorrent, DHT и «рой», поскольку я даже не уверен, что DHT и «рой» - одно и то же.

Однако я пытаюсь найти пиров, количество пиров и некоторую статистику о торренте по его магнитной ссылке (и хешу).

Я искал несколько библиотек для этого, но они кажутся либо устаревшими, либо несвязанными, либо просто запрограммированы.

Как мне подключиться и запросить информацию? Краткое объяснение было бы восхитительно.


person tekknolagi    schedule 14.11.2012    source источник


Ответы (1)


официальные спецификации: http://www.bittorrent.org/beps/bep_0000.html < br /> неофициальная спецификация: http://wiki.theory.org/BitTorrentSpecification

BEncoding - это формат сериализации данных, используемый в BitTorrent для нескольких целей.

DHT - это глобальная, децентрализованная, итеративная система поиска на основе UDP, которая может использоваться для поиска клиентов, участвующих в определенном рое на основе infohash, который может быть либо получено непосредственно из магнитной ссылки или рассчитано из файла метаданных .torrent.

Если у вас есть URL-адрес объявления для трекера (необязательная часть торрент-файла или магнитная ссылка), вы можете получить адреса клиентов прямо из трекера.

После того, как вы получили адреса клиентов для определенного роя, вы можете подключиться к ним - или они будут подключаться к вам, если вы заявили о себе в DHT / ответственный трекер - с помощью проводного протокола bittorrent, который в основном является асинхронным протоколом обмена двоичными сообщениями. .

Чтобы получить полнофункциональный современный клиент bittorrent, вам необходимо реализовать следующее:

  • узел DHT (кодирование через UDP)
  • протокол объявления и очистки трекера (использует кодирование через HTTP и настраиваемый двоичный протокол через UDP)
  • проводной протокол BitTorrent (настраиваемый двоичный протокол через TCP с дополнительным уровнем расширения. Некоторые сообщения закодированы. Транспортный протокол на основе UDP, предотвращающий перегрузку, также существует в качестве альтернативы TCP)
  • парсер торрент-файлов (очевидно, Bencoding)
  • общие вещи, такие как постановка в очередь активных торрентов, управление файлами, одновременный сетевой ввод-вывод

Это большая работа, которая, насколько мне известно, не выполнялась в Ruby. Так что либо у вас много впереди, либо вы можете использовать библиотеку bittorrent, написанную на другом языке (например, libtorrent), или взаимодействовать с клиентом, предоставляющим веб-службу (например, передачу).

person the8472    schedule 15.11.2012
comment
Хорошо, спасибо за это объяснение. Скажем, у меня есть магнитная ссылка только с хешем и торрент-именем - что тогда? - person tekknolagi; 15.11.2012
comment
затем вам нужно найти клиентов через DHT, подключиться к ним и использовать расширение обмена метаданными, чтобы получить файл метаданных. тогда вы можете начать загрузку данных. Также есть несколько торрент-архивов, которые обслуживают торрент-файлы на основе их хэшей. - person the8472; 16.11.2012
comment
Как мне найти этих клиентов? - person tekknolagi; 16.11.2012
comment
Если вы хотите сделать это вручную, вы можете просто найти хэш в Google, скачать торрент и запустить его в клиентском битторрент. Чтобы сделать это программно, вам нужна реализация DHT. - person the8472; 17.11.2012
comment
Хорошо, это все еще очень расплывчато. Как мне реализовать DHT? Было бы здорово, если бы вы были более конкретными, потому что я планирую написать рубиновый драгоценный камень - person tekknolagi; 17.11.2012
comment
Прочитав спецификации (на которые я уже ссылался), документ kademlia и на страницу wikipedia и просматривая существующие реализации. - person the8472; 19.11.2012