互联网冲浪膜法:Magnet磁链与ed2k
Magnet磁链
磁力链接是对等网络中进行信息检索和下载文档的程序。和基于位置连接的统一资源定位符不同,磁力链接是基于元数据文件内容,也就是说,磁力链接不基于文件的IP地址和定位符,不依赖一个处于启
动状态的主机就可以下载。
BitTorrent协议下载的特点
下载的人越多,提供的带宽也就越多,下载速度越快。拥有完整文件的用户也会越来越多,使得文件“寿命不断延长”,即“热门资源”
磁力链接参数规则
磁力链接由一组参数构成,以协议头magnet开头,参数顺序无顺序规则,常用的规则如下:
1 |
|
种子发布
发布者根据需要发布的文件生成一个.torrent文件,也就是种子文件,它本质上就是一个文本文件,包含了如下内容:
- Tracker信息:存储BT下载中需要用到的Tracker服务器地址和针对Tracker服务器的设置
- 文件信息:将需发布的文件分成大小相等的虚拟块,把每个块的索引信息和Hash验证码写入文件信息
因此,种子文件就是被下载文件的索引
种子下载
首先拿到相应的种子文件(或磁力链接),使用BT客户端进行下载。BT客户端先解析种子文件得到Tracker地址,再连接Tracker服务器,Tracker服务器回应下载请求,提供下载者和其他下载者的IP(也>包括发布者),下载者再连接其他下载者(基于DHT网络,请看下方解释)。根据种子文件中的文件信息,两者分别告知对方自己已经有的块,然后交换对方所没有的数据。下载者每得到一个块,就计算>块的Hash验证码与种子文件中对比,一样则块正确,不一样则需要重新下载这个块。
DHT网络:Distributed Hash Table,分布式哈希表。是一种分布式存储方式。DHT网络是Tracker-less的,不依赖于其他Tracker服务器。每个客户端负责一个小范围的路由,并负责存储一小部分数>据,实现整个DHT网络的寻址和存储。使用支持该技术的BT下载软件,用户无需连接Tracker就可以下载,软件会在DHT网络中寻找下载同一文件的其他用户并与之通信,从而下载文件。
热知识:一般来说,BT工具下载到最后都会停顿一会儿。大概率是在校验已下载的资源是否正确,一般不会很久。但国内有些应用在下载到99.99%时卡住,多半是平台在拿你的上行带宽给其他VIP用户提
供下载。
关于磁力链接和种子
磁力链接是基于文件内容的Hash值来链接文件,生成唯一文件识别符,在DHT网络中定位下载文件的。实际上还是通过种子来进一步下载,但由于现在对种子封锁严重,传播种子容易被和谐,作为文本的>磁链更易于传播
- 种子:稳定性高,信息多,不利于传播
- 磁链:不稳定,仍需获得种子,但便于扩散
种子与磁链是可以互相转换的,详情Google。在Python中,libtorrent库也封装了BT相关的内容
Magnet磁链案例
完整磁力链接
1 |
|
必要参数
磁链原文(切分,前半段):
1 |
|
- magnet: 协议名
- xt: eXact Topic,资源定位点
- urn: Uniform Resource Name,统一资源定位符
- btih: BitTorrent info hash,哈希值(哈希方法名),可以使用SHA1、MD5等,是必备参数
可选参数
一般来说,一个磁力链接拥有上面的参数即可找到资源,其他可选参数如下:
- dn: display name,向用户显示的文件名
- tr: tracker,表示tracker服务器地址的地址
- kt: 关键字,更笼统的搜索,置顶搜索关键字而不是特定文件
- mt: 文件列表,链接到一个包含磁力链接的源文件
磁链原文(切分,后半段):
可以看到基本都是tracker服务器地址
1 |
|
eD2k链接
wD2k链接是指示在eDonkey网络上存储的文件,eDonkey是分布式、基于服务器的P2P文件分享网络。与magnet类似,但magnet使用的算法不仅限于ed2kHash。ed2k链接同样可以通过迅雷等App下载到资源,ed2k链接在国内俗称电驴。
eD2k链接格式
ed2k://|类型|其他信息|/
ed2k://:协议名,注明该协议是ed2k协议
类型:链接类型,三种链接类型分别是:file(文件)、server(服务器)、serverlist(服务器列表)
其他信息:具体的其他信息,例如文件名、文件大小、文件哈希、IP地址端口等,如存在多个则使用|分开
eD2k链接格式
典型的、基础的ed2k文件链接需要包含三样信息:
文件名
文件大小(单位字节)
文件的ed2kHash值(MD4算法的变体)
例如:
1 |
|
有的ed2k链接包含了一或多个来源的IP端口,例如
1 |
|
有的ed2k链接包含根Hash值,用于传输文件时纠正恢复,例如
1 |
|
少部分链接包含如下几种参数:
1 |
|
ed2k链接案例分析
完整电驴链接
ed2k://|file|【高清MP4电影www.domp4.cc】慈禧秘密生活.1994.127分钟完整版.DVDRip.国粤双语.中字.mkv|2650427059|50E58646F85EA2EF6CB866969B6C7592|h=NZG53QOLS3CXXT2USAIY6XRPV4V27O77|/
1 |
|
ed2k与magnet磁链
ed2k和bt磁链发展这么些年,很多专业名词例如Tracker、server、DHT网络、KAD网络等,不是此处解释的重点,我不再赘述。
- magnet磁链: 去中心化的BitTorrent,基于DHT网络,文件需要发布者做种,支持IPv6
- ed2k:描述KAD网络中文件的一段字符,基本中心服务器,文件是基于文件分享的,不支持IPv6
(补充,转)手搓一个种子
比较简单的方式是直接使用BT(BitTorrent)软件创建,我下面将使用「比特彗星(BitComent)」软件为您演示种子和磁力链的创建方法。
首先,点击文件、制作Torrent文件。
制作Torrent文件
然后选择您要共享的文件或文件夹、填写Tracker服务器及DHT网络节点列表:
1 |
|
这里我使用了一个我站提供的Tracker服务器「https://tracker.renfei.net:443/announce」,为了确保种子存活率,您可以为种子添加更多的Tracker服务器,您可以通过网络搜索得到更多Tracker服务器的列表,这里推荐一个Github项目,上面维护了很多Tracker服务器的列表:https://github.com/XIU2/TrackersListCollection
然后您还可以填写发布者的信息,例如名称、网址、说明,这些不是必须的,可以不填。
制作Torrent文件信息
点击制作按钮,就可以生成一个BT(BitTorrent)种子.torrent文件,并且在我们的列表里已经可以看到这个文件的任务,我们还需要点击开始,这样才能加入网络,让别人来下载。我们右击新建的这个任务,选择「复制磁链」就得到了磁力链接。到这里我们就创建了一个BT(BitTorrent)种子和磁力链接,下面是我本次教程创建的种子和磁链,来试试吧。
获得磁力链接
- 本次教程生成的种子文件:https://cdn.renfei.net/bt/第一个BT分享文件.txt.torrent
- 本次教程生成的磁链:magnet:?xt=urn:btih:KDHSNAX4IYXOAMC4CBLWJCEJEIF5AMJS
注意事项
当您创建发布种子以后,全网只有你一个人拥有全部文件,所以你不能下线,需要持续为其他人提供下载,也就是做种,一旦你下线了,这个和种子就暂时死亡了,因为在BT网络上其他人没有这个文件,所以需要等一段时间,下载的人多了,做种的人多了,你就可以离线了,就行成了下载的人越多速度越快的情况。
同样,别人寻找你的时候,也是通过Tracker服务器,你链接的Tracker服务器越多,就越容易被找到,所以也要链接多一点的Tracker服务器。
为什么一些 Tracker 连不上
首先这是正常的,Tracker服务器分布在全球各地,受到网络原因会有一些连不上,另外 HTTPS 的链接成功率更高,HTTP、UDP这种明文的经常被运营商干扰、限制,还有一方面是由于迅雷把中国范围的BT下载名声弄臭了,一些国外 Tracker 服务器屏蔽了国内连接。
为什么下载没速度
在BT网络中,下载速度是别的用户上传给你的,可能拥有你需要的文件用户比较少,Tracker 可以帮你找到更多的用户,并帮助你们之间建立链接,链接到的用户越多,下载也就越快。
被迅雷吸血的情况,上面已经说过迅雷把中国范围的BT下载名声弄臭了,主要是因为迅雷在享受其他 BT 软件用户上传提供的速度时,自身却只把上传的速度提供给其他迅雷用户,而不会提供给其他 BT 软件用户 ,所以对于其他客户端来说,迅雷只进不出,俗称吸血雷。
补充信息
关于国内BT环境问题,可以转这个帖子…………
BT Tracker服务器列表:https://github.com/XIU2/TrackersListCollection
Python支持的做种库:https://github.com/rndusr/torf