Здравствуйте.
Почитал
мануал по DHT протоколу.
Меня интересует реализация безтрекерного (trackerless) файлообмена.
Правильно ли я понимаю Алгоритм
BEP-5?
1. Делаем запрос в router.utorrent.com: 6881 - получаем стартовый список нод. Насколько я понял инфохэши мы не запрашиваем, т.к. в данном случае единого трекера нет.
import bencode
import random
import socket
my_id = ''.join([chr(random.randint(0, 255)) for _ in range(20)])
ping_query = {'y': 'q',
't': '0f',
'q': 'find_node',
'a': {'id': my_id}}
ping_query_bencoded = bencode.bencode(ping_query)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(ping_query_bencoded,
(socket.gethostbyname('router.bittorrent.com'), 6881))
r = s.recvfrom(1024)
ping_response = bencode.bdecode(r[0])
print(ping_response)
2. Записываем ноды в routing table.
nodes = [
["<host>", <port>],
["<host>", <port>]
]
3. Используя routing table, обзваниваем ноды на предмет поиска инфохэша файла (get_peers) или анонсируем свой инфохэш (announce_peer)
В какую таблицу мы складируем инфохэши от собственных и полученных файлов?
Запрос 'ping' делаем только в router.utorrent.com: 6881 или по всем нодам из routing table?
Запрос 'ping' в данном случае делаем 1 раз в n секунд - показываем, что наша нода жива?
Заранее спасибо за ответы.