如何构造磁力链接
磁力連結(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 该如何组装成一个磁力链接以用于下载呢?
-
首先是协议头,即magnet:?
-
一般情况下,我们可以认为Hash值是 BitTorrent Info Hash 类型的(磁力链接还支持一些其它的Hash值算法,会在后面说明),所以我们可以构造xt参数为 xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a
这时我们就得到了 magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a 这样一个字符串。现在你就可以把这个字符串当成一个磁力链接添加进你的bt下载软件中去,从而开始下载了。
-
在某些情况下,也许你希望添加一些 Tracker 服务器的地址。当然,这也可以构造在磁力链接中。比如你有一个 Tracker 服务器地址是 http://example.org/Fannounce ,那么你需要做的是将:用%3A替换、将/用%2F替换后,再在前面加上&tr=,形成 &tr=http%3A%2F%2Fexample.org%2Fannounce 的样子,这时就可以放在上一步构造好的磁力链接后面了,最终的样子形如:
magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&tr=http%3A%2F%2Fexample.org%2Fannounce
需要注意的是这是一个整个的字符串,中间没有空格。如果你想再添几个也是没问题的,不停的放在后面就行了。比如我们再添加一个.com的tracker服务器地址:
magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&tr=http%3A%2F%2Fexample.org%2Fannounce&tr=http%3A%2F%2Fexample.com%2Fannounce
注:由于不同的浏览器渲染方式不同,长的纯英文字符串可能会被浏览器截断成多行,而且有时截断位置会让人感觉那是两行,但其实并不是那样的,如果你选中复制一下就会发现其实是在同一行里,只不过浏览器显示错误了。这完全是浏览器自以为是的行为,这相当让人厌烦,也是不应该的,但无奈现在的这些科技公司们总是这么把他们自己的想法强加于人。
下面是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 原创,转载时请标明出处。
如果想就本文的内容展开讨论,可以点击前往讨论区 。你既可以在别人的帖子后面跟帖讨论,也可以自己发起新的帖子表达自己的观点。