闲谈 Spring Cloud + Netty 打造分布式可集群部署的 DHT 磁力爬虫(开源) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LonelyWalker
V2EX    2019

闲谈 Spring Cloud + Netty 打造分布式可集群部署的 DHT 磁力爬虫(开源)

  •  
  •   LonelyWalker 2019-03-05 14:29:54 +08:00 2833 次点击
    这是一个创建于 2414 天前的主题,其中的信息可能已经有所发展或是发生改变。

    演示地址: https://dodder.cc

    三年前,照着 Python 版 DHT 网络爬虫用 Java 重写了一遍,当时大学还未毕业,写出来的代码比较杂乱,数据跑到 1600 万的时候就遇到了瓶颈,最近辞职了想学习一波 Spring Cloud 微服务开发,于是就有了现在这个项目。

    学习一门新的技术总是枯燥无味的,不知道大家有没有这样的感觉,照着官方文档或者 Demo 去敲代码,不仅印象不深刻容易忘记,而且特别无聊,所以对于我个人而言,在学习一门新技术时喜欢去找一个自己感兴趣的实战场景,然后再进行学习实践,遇到不懂的再去 Google 或者看官方文档,而不是按部就班地买本书一页一页的全部看完,只有自己要用到什么的时候再去查相关的文档,这样子对应用场景以及技术要点才会更加深刻。

    闲话不多说了,接下来谈谈 DHT 网络爬虫吧。

    对于老湿鸡来说,到磁力搜索网站去搜索番号是他们获取资源的一种快速途径,对于这种网站,广告也是一大堆的,那么身为 IT 技术人,能不能自己来实现一个呢?

    答案肯定是可以的,而且技术含量也不是特别高,但实现之前,Bittorrent 协议以及其 Wire Peer 扩展协议,还是必须要了解的,前者在官方文档还能详细找到,后者在维基百科上貌似已经被删掉了(官方文档里只有简单的介绍了,整个协议数据收发的流程已经没有了)。

    参考协议: http://www.bittorrent.org/beps/bep_0005.html http://www.bittorrent.org/beps/bep_0009.html

    除此之外,还需要熟悉 Torrent 种子文件里的结构信息,Bittorrent 协议以及 Torrent 种子文件信息大多都采用 bencode 编码,学习之前,可以先去了解一下这个编码,和 json 有点类似,不过也不是必要的,不用自己去实现,有现成的编解码库。

    对前面的东西了解过后,再整理下整个爬取的流程:

    1. 使用 Netty 本地模拟一个 DHT 网络节点加入到 DHT 网络中去(即向启动节点发送 find_node 请求)

    2. 收到 find_node 回复解析出更多的 DHT 节点信息,向这些节点发送 find_node 节点(目的就是让更多的人知道自己,专业术语就是把自己的节点 ID 加入到对方的桶里,和推销自己差不多吧~)

    3. 那些收到 find_node 请求的节点,把我们的节点 ID 加入到桶里之后,它就会向我们发送 find_node、get_peers、announce_peer 请求。

    4. 对于其他节点发送给我们的请求,我们需要根据协议进行回复,否则对方会认为我们是个不活跃节点把我们从对方的桶里删除,并且不会发送 announce_peer 消息给我们

    5. 对于 get_peers 消息里的 info_hash 我们可以进行忽略,因为此时对方也是在查找对应 info_hash 的种子文件,只有收到 announce_peer 消息时的 info_hash 对我们才有用,因为它表示当前对方正在指定端口下载该种子文件的 metadata 信息。

    6. 根据 announce_peer 中的 info_hash 到指定 ip 端口使用 wire peer 扩展协议进行 metadata 数据的交换(即下载)

    7. 下载成功,解析出种子文件列表信息入库。

    具体实现请参考我的开源项目: https://github.com/xwlcn/Dodder

    代码如有问题,欢迎指正,仅供技术交流,切勿用作非法、商业用途。

    2 条回复    2021-07-04 18:31:11 +08:00
    zhchyu999
        1
    zhchyu999  
       2019-03-05 16:35:44 +08:00
    赞一个,也想研究 DHT 爬虫,可惜一直没潜下心去
    sunzenmail
        2
    sunzenmail  
       2021-07-04 18:31:11 +08:00
    部署教程有吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1470 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 16:43 PVG 00:43 LAX 09:43 JFK 12:43
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86