现有DHT的Hello World

| 我熟悉分布式哈希表(DHT)的工作原理。是否可以编写一个将数据存储到现有DHT(例如Kademlia或Mainline DHT)的程序?是否有一个简单的“ Hello World”程序类型,可以显示出最简单的方法?     
已邀请:
DHT最好的方法是将Bittorrent的DHT上的“ 0”发送到引导节点。这些步骤是: 对KRPC PING消息进行编码。 通过UDP将其发送到引导节点。 等待回复。 这些是我开始从事自己​​的DHT实现之前所采取的步骤。     
这个问题可能已经过时,但无论如何。 如前所述,对现有DHT说“ Hello”的最简单方法是向DHT节点之一发送“ 1”消息。让我们考虑一下基于Kademlia的Mainline DHT(MDHT)。 端口
6881
上的地址
router.bittorrent.com
处有一个引导服务器。您可以将此服务器视为永久在线的常规DHT节点。另外,您可以使用其他节点,例如使用DHT的本地运行的torrent客户端。 我用Python编写了一个小例子:
import bencode
import random
import socket


# Generate a 160-bit (20-byte) random node ID.
my_id = \'\'.join([chr(random.randint(0, 255)) for _ in range(20)])

# Create ping query and bencode it.
# \"\'y\': \'q\'\" is for \"query\".
# \"\'t\': \'0f\'\" is a transaction ID which will be echoed in the response.
# \"\'q\': \'ping\'\" is a query type.
# \"\'a\': {\'id\': my_id}\" is arguments. In this case there is only one argument -
# our node ID.
ping_query = {\'y\': \'q\',
              \'t\': \'0f\',
              \'q\': \'ping\',
              \'a\': {\'id\': my_id}}
ping_query_bencoded = bencode.bencode(ping_query)

# Send a datagram to a server and recieve a response.
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)
我使用了“ 5”模块对消息进行bencode和bdecode。 有关Mainline DHT协议的更多信息可以在此文档中。 (请注意,该协议与原始的Kademlia协议略有不同。)     

要回复问题请先登录注册