PostsOldAbout

dht

· 一些分享, 基础编程
哇这个东西。真的是。很爆炸的
我接触了解这个东西可能在一年前,一年多前?
我自己记不清楚了。一直都是看文章。看了一下。然后过了几个月这样子什么都忘记了再看一遍。。
我这人总是这样,老爱健忘。而且容易分神
<br />
其实一个dht爬虫(简化版)很简单很简单。
<br />
首先你需要一些知识。什么是p2p网络。什么是dht。什么是Kademlia。
学一个东西肯定得把名词先弄清楚。
我这里简单说一下。更复杂的内涵希望百度一下or google search
p2p是对等网络传输。用过迅雷的都知道。当你下载资源时,有时候也充当着提供资源方。
在p2p网络里面每一个用户是对等的。资源会通过广播来传播资源。所以一个资源多人下载的时候其实也是充当了多个下载点。
<br />
dht则是p2p网络实现的一种算法
Kademlia则是dht的一种实现。
<br />
网络上种种dht的实现。
http://www.bittorrent.org/beps/bep_0005.html
这篇文章估计是实现dht爬虫的关键点之一了。
看不懂英文可以看看http://justjavac.com/other/2015/02/01/bittorrent-dht-protocol.html
justjavac大神的翻译版。
<br />
简单的dht爬虫实现不难。
有的文章提及的路由表都可以不实现。
那我们干什么?
只需要把自身加入到别人的dht网络。即可。
当别人有资源下载操作查询之类的操作的时候,都会广播给你。此时你可以进行捕获
一个dht网络就是一个圈子。你得认识人才能进入这个圈子。
如何进入这些圈子?网络上有一些大型的<strong>&nbsp;tracker</strong>服务器,他们可以帮助我们加入dht网络。
很无私。这就是世界。
<br />
路由表?不存在的。
KRPC协议。划重点
ping 用来测试节点活性。我们没有路由表。干脆不用了。哈哈
find_node 划重点 这个很重要。我们对节点发送这个请求。他们即会给我们发送它网络的nodes
我们再通过他发送给我们的nodes再find &nbsp;不停的添加网络。(对。dht就是得不停的加好朋友)
get_peer get_peer的request我们是不用实现的。因为get_peer的资源活性并不能保证。我们并不用发这种包
只需要实现响应就好了。让别人知道你是一个节点。但是你没有这个资源就ok
announce_peer&nbsp;这个请求用来表明发出 announce_peer 请求的节点,正在某个端口下载 torrent 文件
它都下载了。证明这个资源存在性很高。我们要抓取的就是这个信息。
提取里面的info_hash &nbsp;这个info_hash就是所谓的磁力链。
<br />
一个简单的dht爬虫就好了、
1.初始化节点。加入<strong>tracker</strong>
2.不断地找朋友 交朋友。find_node
3.回响别人请求的KRPC
4.抓取infohash
<br />
infohash有了再去解析种子的信息。
最好用大点的语言写。
有个大兄弟。用易语言写。并不能找到解析库。2333
<br />
用什么语言写都可以。关键是语言有socket层操作就可以了。
理论实现不拘泥语言。
<br />
that's all
希望自己会多写写字

2026 © zwkang.RSS