文件hash:20长度的字符串,使用sha1算法获得,可以看成文件UUID。 如何从网络中获取文件hash?
Mainline DHT协议
四种请求组成:ping, find_node, get_peer, announce_peer.
其中announce_peer又叫store,get_peer被称作find_value.
ping
用来确定节点是否在线。
find_node
查找某个节点,获得地址信息。如果收到请求的节点不在自己的路由表里面,那么返回离目标节点最近的k个节点。
get_peer
通过资源的info_hash获取含有该资源的peer列表,如果没有的话,则返回离info_hash最近的若干节点。
get_peer回应消息里面会携带一个token,用于稍后的announce_peer。
announce_peer
用于通知其他节点(通过get_peer获取的节点和peer)自己开始下载某个资源。
announce_pees会携带上面通过get_peer获得的token。
DHT搜索实现
如果要实现搜索的话应当实现下面几个步骤
首先根据kademlia算法,如果只有单独一个节点的话,能监听到的announce_peer的消息很少,可以采用均匀分布的多个ID。
info_hash获取文件信息的问题,可以先通过一些第三方网站获取种子文件,例如:
然后通过解析种子文件获取文字信息。
另外也可以通过emule网络获取。
参考链接: