Как собрать статистику из bittorrent swarm?
-
21-09-2019 - |
Вопрос
Я хочу собрать статистику распространения файла в новом потоке bittorrent, фактически ничего не загружая (или как можно меньше).Мне нужно знать, у какого однорангового узла какие фрагменты (для составления статистики на основе файлов), зная количество сеялок и пиявок или проценты, недостаточно.Позже, когда появится много одноранговых узлов, мне нужно будет загрузить данные, чтобы определить, что это такое.Эту часть можно выполнить с помощью обычного торрент-клиента.
Я не планирую внедрять протокол самостоятельно, поэтому я просмотрел 2 реализации libtorrent и libbtcore от ktorrent.Ни один из них не способен собирать данные без загрузки, просто нет подключенных одноранговых узлов, когда нечего загружать.Libtorrent проще, но ktorrent выглядит лучше прокомментированным.
Я вижу 3 возможности:
- Используйте какое-нибудь приложение именно для этого.Есть ли они вообще?
- Измените реализацию торрента, чтобы делать то, что я хочу.Кто-нибудь знаком с ними?С чего начать?
- Реализуйте небольшое подмножество протокола.Просто периодически спрашивайте сверстников, что у них есть.Возможно ли это или программе потребуется поддерживать почти полный протокол?
Что вы рекомендуете?
Решение
Это старый вопрос, но, возможно, этот ответ может быть полезен другим.
- Используйте какое-нибудь приложение именно для этого.Есть ли они вообще?
Насколько мне известно, нет.
- Измените реализацию торрента, чтобы делать то, что я хочу.Кто-нибудь знаком с ними?С чего начать?
Я знаком только с ядром BitTornado (которое используется, например, вАзбука).Он написан на Python, но это архитектурный беспорядок.
Однако вы могли бы просто взять любую реализацию и начать избавлять ее от ненужной функциональности.
- Реализуйте небольшое подмножество протокола.Просто периодически спрашивайте сверстников, что у них есть.Возможно ли это или программе потребуется поддерживать почти полный протокол?
Обратите внимание, что вы не можете "спросить" коллегу, что у них есть.Другой одноранговый узел сообщает вам всякий раз, когда он хочет, о тех фрагментах, которые у него есть (так что это толкать вместо того , чтобы тянуть).После рукопожатия BitTorrent одноранговый узел может отправить битовое поле из кусочков, которые в нем есть.После этого он может отправлять вам сообщения, информирующие вас о том, что он приобрел новую деталь.Также обратите внимание, что коллеги могут лгать о тех фрагментах, которые у них есть.Примеры включают замещающие сверстники а клиентам фрирайда нравится BitThief.
Если вы хотите реализовать небольшое подмножество протокола, вам нужно, как минимум, реализовать сообщение о рукопожатии BitTorrent и, предпочтительно, расширенное сообщение о рукопожатии.Последнее позволяет вам получать (и отправлять) сообщения uTorrent PEX.PEX полезен для быстрого обнаружения других аналогов в рое.
Для целей сбора статистики вам дополнительно необходимо поддерживать битовое поле и ИМЕТЬ сообщения.