磁力链接 结构解析

摘要:
xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJQCZO5C&xt。2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7描述了磁链路可以包括一个或多个由“&”分隔的参数。一些参数的值对于客户端正确解析磁性链接非常重要。用于查找和验证包含磁性链接的文件。Xt=urn:ed2k:[ED2KHash]AICH不是官方磁链接的一部分。Xt=urn:crc32:[CCR-32]文件的网络链接有两个下载链接可以作为直接或备用资源插入磁链接。仅在指定超时后链接,以防止服务器过载。As=[文件的网络链接]P2P链接可以是链接到磁链接的文件的HTTP下载源、文件的P2P源地址或集线器地址。

https://blog.csdn.net/cony_14/article/details/50888073

磁力链接由一组参数组成,参数间的顺序没有讲究,其格式与在HTTP链接末尾的查询字符串相同。最常见的参数是"xt",是"exact topic"的缩写,通常是一个特定文件的内容散列函数值形成的URN,例如:

Magnet-icon.gif magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C

其值是Base32编码的文件的SHA-1散列。

注意,虽然这个链接指向一个特定文件,但是客户端应用程序仍然必须进行搜索来确定哪里,如果有,能够获取那个文件。

在标准的草稿中其他参数的定义如下:

  • "dn" ("显示名称"):为了方便,为用户显示文件名称
  • "kt" ("关键字"):更笼统的搜索,指定搜索关键字而不是特定文件
  • "mt" ("文件列表"):一个URI指向一个列表,例如一个项目列表
  • 应用程序定义的实验参数,必须以"x."开头

标准还建议同类的多个参数可以在参数名称后面加上".1", ".2"等来使用,例如

Magnet-icon.gif magnet:?xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xt.2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7

描述

磁力链接可以包括一个或多个参数,之间用'&'隔开。参数的顺序在文件在标准中没有记录。有一些参数的值对于客户端正确解析磁力链接很重要。

magnet:? xl = [字节大小]& dn = [文件名(已编码URL)]& xt = urn: tree: tiger: [ TTH hash(Base32)]

参数

  • dn(显示名称)- 文件名
  • xl(绝对长度)- 文件字节数
  • xt(eXact Topic)- 包含文件散列函数值的URN
  • as(可接受来源) - 在线文件的网络链接
  • xs(绝对资源)- P2P链接
  • kt(关键字)- 用于搜索的关键字
  • mt(文件列表)- 链接到一个包含磁力链接的元文件 (MAGMA - MAGnet MAnifest
  • tr(Tracker地址)- BT下载的Tracker URL

xt参数

磁力链接的这部分最重要。用于寻找和验证包含着磁力链接中的文件。

TTH(Tiger Tree散列函数)

TigerTree散列函数被用在包括Direct ConnectGnutella2在内的几个网络中。

xt=urn:tree:tiger:[ TTH HashBase32)]
SHA-1(安全散列算法1)

GnutellaGnutella2使用的散列函数。

xt=urn:sha1:[ SHA-1 HashBase32)]
BitPrint

这种散列函数包含一个SHA-1散列函数和一个TTH散列函数,用"."隔开。

GnutellaGnutella2使用。

xt=urn:bitprint:[ SHA-1 HashBase32)].[ TTH HashBase32)]
eD2k Hash(eDonkey2000)散列函数

eDonkey2000使用的散列函数算法。

xt=urn:ed2k:[ ED2K HashHex)]
AICH(高级智能型损坏处理)

不是正式的磁力链接的一部分。eDonkey2000使用的散列函数算法,用于存储和控制下载完成、正在下载的文件的完整性。

xt=urn:aich:[ aich HashBase32)]
Kazaa散列函数

FastTrack使用的散列函数算法。

xt=urn:kzhash:[ Kazaa HashHex)]
BTIH(BitTorrent Info Hash)

BitTorrent使用的散列函数算法。

xt=urn:btih:[ BitTorrent Info HashHex)]
MD5(信息-摘要算法5)

Gnutella2支持的散列函数算法。

xt=urn:md5:[ MD5 HashHex)]
CRC-32(循环冗余校验)

不是正式的磁力链接的一部分。没有任何已知的P2P网络使用。

xt=urn:crc32:[ CRC-32(Base10)]

网络链接至文件

有两种可以插入到磁力链接的下载链接作为直接或者备用资源。

普通链接(as)

"as"的意思是"acceptable source"。这种链接指向从网络服务器的直接下载。只有在指定的超时后才会链接,防止服务器过载。客户端在考虑向服务器发送下载请求前会先花一定时间在P2P网络中定位文件。

as=[文件的网络链接(已编码URL)]
P2P链接(xs)

链接可以是链接到磁力链接的文件的HTTP(SHTTP、FTP、SFTP等)下载源、文件的P2P源地址或是hub(使用DC++时)地址。对于这一链接,客户端尝试直接链接,并请求文件或其来源,有时会同时请求二者。这一字段常被P2P客户端用来存储源。引用中可能包含文件hash。

内容寻址网络(CAN)URL

这类链接被Gnutella还有G2应用程序使用,基于RFC 2168。

xs=http://[ 客户端地址]:[客户端端口]/uri-res/N2R?[包含一个文件hashURN ]

例:

xs=http://192.0.2.0.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF
链接到DirectConnect hub并为文件查找源

这一链接立即将DirectConnect客户端连接到刚才讨论的hub。

xs=dchub://[hub 地址]:[hub端口]
Gnutella2上的文件引用基于网络的源缓存

这种情况下,链接包含的点不是客户端IP或直接来源,而是来源缓存。这样的缓存并不包含文件本身,而是存储了其他客户端的IP,这些客户端连接到缓存来下载相同的文件。一旦客户端连接到缓存并获得其他替代来源的IP,其自身IP就会存入到缓存中,然后继续连接到下一个缓存,继续请求替代来源。这种系统类似于BitTorrent tracker的操作。

xs=http://cache.freebase.be/[ SHA-1 hash ]
引用ED2K源
xs=ed2k://[ 客户端地址]:[客户端端口]/[ed2k hash]/[文件大小]/

文件列表(mt)

这是一个导向一系列连链接列表(也许是个网页)的链接……

mt=http://weblog.foo/all-my-favorites.rss

或者是一个URN

mt=urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ

关键字(kt)

该部分代表了一串用于P2P网络搜索用的关键字

kt=martin+luther+king+mp3

Tracker地址(tr)

Tracker URL.用于在不需要DHT支持下下载BitTorrent资源。

tr=http://example.com/announce

补充格式(x.)

对于实验性且自补的非正式选项,可以使用前缀x后加已选择的第二个字母

x.[新参数名]=[新参数数据(已编码URL)]

参数组

通过在每个参数后编号并用"."来分隔允许一个Magnet链接中包含多个文件及它们URN,文件名和散列函数值。

magnet:?xt.1=[第一个文件的URN]&xt.2=[第二个文件的URN]

示例

链接到一个0字节长度的文件。

magnet:?xt=urn:ed2k:31D6CFE0D16AE931B73C59D7E0C089C0
&xl=0&dn=zero_len.fil
&xt=urn:bitprint:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ
.LWPNACQDBZRYXW3VHJVCJ64QBZNGHOHHHZWCLNQ
&xt=urn:md5:D41D8CD98F00B204E9800998ECF8427E

mediawiki-1.15.1.tar.gz

magnet:?xt=urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1
&xl=10826029&dn=mediawiki-1.15.1.tar.gz
&xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY
&xt=urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q
&tr=http%3A%2F%2Ftracker.example.org%2Fannounce.php%3Fuk%3D1111111111%26
&as=http%3A%2F%2Fdownload.wikimedia.org%2Fmediawiki%2F1.15%2Fmediawiki-1.15.1.tar.gz
&xs=http%3A%2F%2Fcache.example.org%2FXRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5
&xs=dchub://example.org

url magnet

http://sure-raza.com/magnet:?xl=10826029&
dn=mediawiki-1.15.1.tar.gz&
xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY

参考资料:维基百科https://zh.wikipedia.org/wiki/%E7%A3%81%E5%8A%9B%E9%93%BE%E6%8E%A5

免责声明:文章转载自《磁力链接 结构解析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇element-ui下拉框在ios上点两次才能选中?????敏捷绩效管理三剑客:OKR 、KPI、CFR下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HashMap之原理及死锁

一、HashMap原理 1.HashMap的本质就是数组和链表。table是一个entry数组,每一个数组元素保存一个Entry节点,而Entry节点内部又连接着同样key的下一个Entry节点,就构成了链表。. 详情见 HashMap源码分析 2.HashMap死锁原因: HashMap会造成死锁,因为HashMap是线程非安全的,多并发的情况...

面试题:HashSet、TreeSet 和HashMap 的实现与原理

说下 TreeSet 和 HashSet 什么区别呢? 它们的区别点主要在他们的底层数据结构不同,HashSet 使用的是 HashMap 来实现,而 TreeSet 使用的是 TreeMap 来实现的。 哦?那你了解 HashMap 和 TreeMap 的区别吗? HashMap 是一个最常用的数据结构,它主要用于我们有通过固定值(key)获取内...

用Javascript进行HTML转义(分享)

  众所周知页面上的字符内容通常都需要进行HTML转义才能正确显示,尤其对于Input,Textarea提交的内容,更是要进行转义以防止javascript注入攻击。   通常的HTML转义主要是针对内容中的"<",">","&",以及空格、单双引号等。但其实还有很多字符也需要进行转义。具体的可以参考这篇文章。   ** 1、HTML转...

C#结合js 上传文件和删除文件(技术点有:asp.net mvc ,nhibernate,ajax等)

之前做项目的时候要用到上传文件的功能,现在我总结一下,上传文件和删除文件的代码,在以后的使用的过程中也更方便查找。 [HttpPost] public ActionResult EditUser() { var userDal = new UserDal(); cons...

前端缓存最佳实践

前言 缓存,这是一个老生常谈的话题,也常被作为前端面试的一个知识点。 本文,重点在与探讨在实际项目中,如何进行缓存的设置,并给出一个较为合理的方案。 强缓存和协商缓存 在介绍缓存的时候,我们习惯将缓存分为强缓存和协商缓存两种。两者的主要区别是使用本地缓存的时候,是否需要向服务器验证本地缓存是否依旧有效。顾名思义,协商缓存,就是需要和服务器进行协商,最终确定...

InnoDB和MyISAM是否支持hash索引

今天和同学探讨说MySQL哪些存储引擎支持hash索引,因为所看书籍MySQL版本和现有的MySQL版本有出入,故中间出了点歧义。所以就手动敲了一下代码,测试了一下MySQL8.0中的存储引擎是如何支持hash索引的。 我们都知道MySQL最常用的存储引擎为InnoDB和MyISAM。它们默认的存储引擎都是B-Tree(实质为B+Tree)。他们本身都是不...