DHT爬虫和使用BEP协议完成metadata的下载(BT下载)

本文介绍了如何使用Python实现DHT网络爬虫,通过BEP协议获取BT种子的metadata。首先解释了DHT网络和Tracker服务器的工作原理,然后详细讲述了BEP协议中的ping、find_node、get_peer、announce_peer消息格式。在实际操作中,需要注意infohash的编码与解码问题。作者分享了代码实现过程,包括异步种子爬虫maga的使用,以及如何遵循BEP-0009和BEP-0010协议下载metadata。最后,作者遇到了连接Peer的问题,欢迎读者提供解决方案。
摘要由CSDN通过智能技术生成

在BitTorrent技术出世以来,很多网络资源被制作成种子进行传播,随后磁力链接加速了资源的传播。然后非常好奇,如今世界人民对什么资源需求大呢,所以在网上查询了许多资料和源代码,完成了这个爬虫。源代码在Github:https://github.com/1205628673/BT-Spider

首先我们先知道什么是" DHT网络"

如上图所示,每个人的机器都是一个"Peer",即对端...,而中间的那个服务器,就是中心叫做Tracker服务器,一些迅雷之流就是这种存在

既然是p2p,那么肯定也能去中心化,即上图去掉Tracker服务器。这样一来,每个使用BT下载软件的人,就遵循规则自动做种,那么在网络的其他端就能通过BEP协议下载到这个种子

 

什么是BEP协议,这里不多赘述,几个链接大家去阅读:

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

大致意思就是在这个DHT网络中,只有遵循B编码发送标准消息才能得到答复,而消息主要分为几种:

ping

最基本的查询是ping。”q“=”ping”ping查询只有一个参数,“id”值是一个20字节的字符串,按网络字节顺序包含发送者节点id。对ping的适当响应只有一个键“id”,其中包含响应节点的节点id。

格式:

ping Query = {"t":"aa", "y":"q", "q":"ping", "a":{"id":"abcdefghij0123456789"}}
bencoded = d1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t2:aa1:y1:qe
Response = {"t":"aa", "y":"r", "r": {"id":"mnopqrstuvwxyz123456"}}
bencoded = d1:rd2:id20:mnopqrstuvwxyz123456e1:t2:aa1:y1:re

find_node

Find node用于查找给定ID的节点的联系信息。“q”=“Find_node”Find_node查询有两个参数,“ID”包含查询节点的节点ID,而“target”包含查询者所查找的节点的ID。当一个节点接收到一个find_node查询时,它应该用一个键“nodes”和一个字符串的值来响应,该字符串包含目标节点或其自身路由表中K(8)个最近的好节点的压缩节点信息。

格式:

find_node Query = {"t":"aa", "y":"q", "q":"find_node", "a": {"id":"abcdefghij0123456789", "target":"mnopqrstuvwxyz123456"}}
bencoded = d1:ad2:id20:abcdefghij01234567896:target20:mnopqrstuvwxyz123456e1:q9:find_node1:t2:aa1:y1:qe
Response = {"t":"aa", "y":"r", "r": {"id":"0123456789abcdefghij", "nodes": "def456..."}}
bencoded = d1:rd2:id20:0123456789abcdefghij5:nodes9:def456...e1:t2:aa1:y1:re

由于我们这是DHT爬虫,所以就不实现Routetable了,只需要将自身id和对端id简单拼一下就行

get_peer

获取与torrent infohash关联的对等方。”q“=”get_peers“get_peers查询有两个参数,“id”包含查询节点的节点id,“info_hash”包含torrent的infohash。如果查询的节点有infohash的对等节点,则它们将作为字符串列表以键“value”的形式返回。每个字符串包含单个对等点的“压缩”格式对等信息。如果查询

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值