Ответы пользователя по тегу DHT
  • Как скачать торрент по magnet- ссылке, если клиент реализован через тор и dht фактически не активен?

    @ivan386
    Если в magnet-ссылке указан адрес трекера то клиент получит от него список пиров а от них уже скачает инфо и файлы.

    Соответственно если в magnet-ссылке не указан трекер:
    magnet:?xt=urn:btih:c12fe1c06bba2542222227c1367a88a


    то его можно добавить в ручную:

    magnet:?xt=urn:btih:c12fe1c06bba2542222227c1367a88a&tr=http://example.com/announce


    Адрес трекера можно взять например здесь: https://trackerlist.org/
    Только важно чтобы он начинался на https или http.
    Ответ написан
    Комментировать
  • DHT. Как реализовать безтрекерный обмен файлами?

    @ivan386
    ID для узла выбирается уже не случайно https://www.bittorrent.org/beps/bep_0042.html
    Но если не предполагается анонса и приёма запросов то ID можно выбрать любой. Не все клиенты реализовали этот BEP.

    1. router.utorrent.com: 6881 - используется только для первичного получения списка узлов командой find_node. Она не требует info_hash а только id узла и target которые могут быть одинаковы так как мы ищем свою позицию в сети.

    В дальнейшем router.utorrent.com: 6881 не должен использоваться больше никак.

    2. routing table должен содержать значения для каждого узла: id, ip(v4 или v6), port, время последнего ответа.

    Её периодически нужно сохранять на диск и при следующем старте пытаться загрузиться уже с неё.

    3. Из таблицы выбираются ближайшие по id узлы к target или info_hash. И к ним соответственно отправляются find_node или get_peers.

    announce_peer возможен только после get_peers так как нужен токен для анонса который в ответе на get_peers.

    find_node используется для нахождения ближайших к своему id узлов. Также периодически можно искать случайные id для пополнения routing table.

    В какую таблицу мы складируем инфохэши от собственных и полученных файлов?


    Соответственно нужна отдельная таблица в которой по info_hash будет храниться список пиров.

    Запрос 'ping' делаем только в router.utorrent.com: 6881 или по всем нодам из routing table?


    Ни в коем случае. Работа с ним закончена на первом этапе.

    Ping нужно отсылать только на узлы из routing table с которыми длительное время не было связи. До тех пор пока узлы не ответят на ping их нельзя отдавать другим узлам на их запросы. Соответственно и узлы полученные от другого узла нельзя отдавать дальше до проверки их состояния.

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