文件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获取文件信息的问题,可以先通过一些第三方网站获取种子文件,例如:

http://torrage.com

https://zoink.it

http://bt.box.n0808.com

然后通过解析种子文件获取文字信息。

另外也可以通过emule网络获取。

参考链接:

http://codemacro.com/2013/06/21/magnet-search-impl/

http://codemacro.com/2013/05/19/crawl-dht/