admin管理员组

文章数量:1130349

前言

简介

DHT爬虫要做的事情,首先就是要加入到DHT网络中,这样就会源源不断收到其他节点发过来的请求,然后从中获取种子的hash值。

那么问题来了

1: 怎么加入到DHT网络中?

2: 怎么让其他节点给你发消息?

3: 哪些请求里面包含hash信息?

看过上面的文章,大家应该明白DHT网络中节点之间的通信只有下面4种请求

ping

find_node

get_peer

announce_peer

1:加入DHT网络

要加入网络要给下面的根地址发消息:

"router.utorrent:6881",

"router.bittorrent:6881",

"dht.transmissionbt:6881",

向这几个节点查找任意节点(发送find_node请求),然后他们会返回距离该节点最近的K个节点,那么我们再依次向K个节点查找任意节点,以此类推,就有更多的节点认识自己。

2: 加入网络后就会收到其他节点的信息,认识的节点越多收到的消息就越多,所以爬虫应该尽可能让更多的节点认识自己

3: 要获取的hash信息主要是来自announce_peer请求,这个请求同时还会携带ip和port信息,get_peer也可以得到一个hash信息,但是这个hash不能确定是否真实存在,如果我们只是想得到hash值然后通过其的软件下载,也可以把这个hash收集起来。

另外announce_peer请求中implied_port这个字段,表示忽略参数中的port,继续使用默认的udp端口,这个记得处理。

得到的hash只需要hex之后,就可以通过某雷下载了

下载metadata

得到了hash需要去下载元数据,元数据中包含主题名称,以及种子包含的所有文件的名称,这样就可以做一些搜索了。

Bt协议调试了很久,出错的时候认

前言

简介

DHT爬虫要做的事情,首先就是要加入到DHT网络中,这样就会源源不断收到其他节点发过来的请求,然后从中获取种子的hash值。

那么问题来了

1: 怎么加入到DHT网络中?

2: 怎么让其他节点给你发消息?

3: 哪些请求里面包含hash信息?

看过上面的文章,大家应该明白DHT网络中节点之间的通信只有下面4种请求

ping

find_node

get_peer

announce_peer

1:加入DHT网络

要加入网络要给下面的根地址发消息:

"router.utorrent:6881",

"router.bittorrent:6881",

"dht.transmissionbt:6881",

向这几个节点查找任意节点(发送find_node请求),然后他们会返回距离该节点最近的K个节点,那么我们再依次向K个节点查找任意节点,以此类推,就有更多的节点认识自己。

2: 加入网络后就会收到其他节点的信息,认识的节点越多收到的消息就越多,所以爬虫应该尽可能让更多的节点认识自己

3: 要获取的hash信息主要是来自announce_peer请求,这个请求同时还会携带ip和port信息,get_peer也可以得到一个hash信息,但是这个hash不能确定是否真实存在,如果我们只是想得到hash值然后通过其的软件下载,也可以把这个hash收集起来。

另外announce_peer请求中implied_port这个字段,表示忽略参数中的port,继续使用默认的udp端口,这个记得处理。

得到的hash只需要hex之后,就可以通过某雷下载了

下载metadata

得到了hash需要去下载元数据,元数据中包含主题名称,以及种子包含的所有文件的名称,这样就可以做一些搜索了。

Bt协议调试了很久,出错的时候认

本文标签: 爬虫源码DHTjava