如何构造磁力链接

磁力連結(Magnet URI scheme),是对等网络中进行信息检索和下载文档的电脑程序。和基于“位置”连接的统一资源定位符不同,磁力连结是基于元数据文件内容,属于统一资源名称。也就是说,磁力连结不基于文档的IP地址或定位符,而是在分布式数据库中,通过散列函数值来识别、搜索来下载文档。因为不依赖一个处于启动状态的主机来下载文档,所以特别适用没有中心服务器的对等网络。它符合开源标准。

磁力連結可以包括一个或多个参数,之间用'&'隔开。参数的顺序在文件在标准中没有记录。有一些参数的值对于客户端正确解析磁力連結很重要。
magnet:? xl = [字节大小]& dn = [文件名(已编码URL)]& xt = urn: tree: tiger: [ TTH hash(Base32)]

从其格式可以看出磁力链接都是以magnet:?开头的,这与其它URI类似。后面跟着一系列的参数,大致其参数有下列这些:
xt(eXact Topic)- 包含文件散列函数值的URN
dn(显示名称)- 文件名
tr(Tracker地址)- BT下载的Tracker URL
xl(绝对长度)- 文件字节数
as(可接受来源) - 在线文件的网络链接
xs(绝对资源)- P2P链接
kt(关键字)- 用于搜索的关键字
mt(文件列表)- 链接到一个包含磁力連結的元文件 (MAGMA - MAGnet MAnifest (页面存档备份,存于互联网档案馆))

-> 那么如果你取得了一个文件的Hash值,比如这个 c12fe1c06bba254a9dc9f519b335aa7c1367a88a 该如何组装成一个磁力链接以用于下载呢?
注:由于不同的浏览器渲染方式不同,长的纯英文字符串可能会被浏览器截断成多行,而且有时截断位置会让人感觉那是两行,但其实并不是那样的,如果你选中复制一下就会发现其实是在同一行里,只不过浏览器显示错误了。这完全是浏览器自以为是的行为,这相当让人厌烦,也是不应该的,但无奈现在的这些科技公司们总是这么把他们自己的想法强加于人。

下面是xt参数的一些信息,这个参数较复杂,但也是磁力連結中最重要的部份。用于寻找和验证包含着磁力連結中的文件。
大概有下列这些:

BTIH(BitTorrent Info Hash)
BitTorrent使用的散列函数算法。出于向下兼容的考虑,客户端需要同时支持被Base32编码过[1]的BTIH散列结果。
xt=urn:btih:[ BitTorrent Info Hash(Hex)]

TTH(Tiger Tree散列函数)
TigerTree散列函数被用在包括Direct Connect (protocol)和Gnutella2在内的几个网络中。
xt=urn:tree:tiger:[ TTH Hash(Base32)]

SHA-1(安全散列演算法1)
Gnutella和Gnutella2使用的散列函数。
xt=urn:sha1:[ SHA-1 Hash(Base32)]

BitPrint
这种散列函数包含一个SHA-1散列函数和一个TTH散列函数,用"."隔开。
Gnutella和Gnutella2使用。
xt=urn:bitprint:[ SHA-1 Hash(Base32)].[ TTH Hash(Base32)]

eD2k Hash(eDonkey2000)散列函数
eDonkey2000使用的散列函数算法。
xt=urn:ed2k:[ ED2K Hash(Hex)]

AICH(高级智能型损坏处理)
不是正式的磁力連結的一部分。eDonkey2000使用的散列函数算法,用于存储和控制下载完成、正在下载的文件的完整性。
xt=urn:aich:[ aich Hash(Base32)]

Kazaa散列函数
FastTrack使用的散列函数算法。
xt=urn:kzhash:[ Kazaa Hash(Hex)]

MD5(信息-摘要算法5)
Gnutella2支持的散列函数算法。
xt=urn:md5:[ MD5 Hash(Hex)]

CRC-32(循环冗余校验)
不是正式的磁力連結的一部分。没有任何已知的P2P网络使用。
xt=urn:crc32:[ CRC-32(Base10)]


本文由 https://www.timeline.menu/article/co/如何构造磁力链接.html 原创,转载时请标明出处。

如果想就本文的内容展开讨论,可以点击前往讨论区 。你既可以在别人的帖子后面跟帖讨论,也可以自己发起新的帖子表达自己的观点。