kangkangblog

Menu

dht

哇这个东西。真的是。很爆炸的

我接触了解这个东西可能在一年前,一年多前?

我自己记不清楚了。一直都是看文章。看了一下。然后过了几个月这样子什么都忘记了再看一遍。。

我这人总是这样,老爱健忘。而且容易分神

其实一个dht爬虫(简化版)很简单很简单。

首先你需要一些知识。什么是p2p网络。什么是dht。什么是Kademlia。

学一个东西肯定得把名词先弄清楚。

我这里简单说一下。更复杂的内涵希望百度一下or google search

p2p是对等网络传输。用过迅雷的都知道。当你下载资源时,有时候也充当着提供资源方。

在p2p网络里面每一个用户是对等的。资源会通过广播来传播资源。所以一个资源多人下载的时候其实也是充当了多个下载点。

dht则是p2p网络实现的一种算法

Kademlia则是dht的一种实现。

网络上种种dht的实现。

http://www.bittorrent.org/beps/bep_0005.html

这篇文章估计是实现dht爬虫的关键点之一了。

看不懂英文可以看看http://justjavac.com/other/2015/02/01/bittorrent-dht-protocol.html

justjavac大神的翻译版。

简单的dht爬虫实现不难。

有的文章提及的路由表都可以不实现。

那我们干什么?

只需要把自身加入到别人的dht网络。即可。

当别人有资源下载操作查询之类的操作的时候,都会广播给你。此时你可以进行捕获

一个dht网络就是一个圈子。你得认识人才能进入这个圈子。

如何进入这些圈子?网络上有一些大型的 tracker服务器,他们可以帮助我们加入dht网络。

很无私。这就是世界。

路由表?不存在的。

KRPC协议。划重点

ping 用来测试节点活性。我们没有路由表。干脆不用了。哈哈

find_node 划重点 这个很重要。我们对节点发送这个请求。他们即会给我们发送它网络的nodes

我们再通过他发送给我们的nodes再find  不停的添加网络。(对。dht就是得不停的加好朋友)

get_peer get_peer的request我们是不用实现的。因为get_peer的资源活性并不能保证。我们并不用发这种包

只需要实现响应就好了。让别人知道你是一个节点。但是你没有这个资源就ok

announce_peer 这个请求用来表明发出 announce_peer 请求的节点,正在某个端口下载 torrent 文件

它都下载了。证明这个资源存在性很高。我们要抓取的就是这个信息。

提取里面的info_hash  这个info_hash就是所谓的磁力链。

一个简单的dht爬虫就好了、

1.初始化节点。加入tracker

2.不断地找朋友 交朋友。find_node

3.回响别人请求的KRPC

4.抓取infohash

infohash有了再去解析种子的信息。

最好用大点的语言写。

有个大兄弟。用易语言写。并不能找到解析库。2333

用什么语言写都可以。关键是语言有socket层操作就可以了。

理论实现不拘泥语言。

that's all

希望自己会多写写字

— 于 共写了1248个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注