经验分享-磁力链接结构解析

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

 magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C

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

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

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

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

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

 magnet:?xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xt.2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7

描述

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

参数

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 Connect和Gnutella2在内的几个网络中。

SHA-1(安全散列算法1)

Gnutella和Gnutella2使用的散列函数。

BitPrint

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

Gnutella和Gnutella2使用。

eD2k Hash(eDonkey2000)散列函数

eDonkey2000使用的散列函数算法。

AICH(高级智能型损坏处理)

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

Kazaa散列函数

FastTrack使用的散列函数算法。

BTIH(BitTorrent Info Hash)

BitTorrent使用的散列函数算法。

MD5(信息-摘要算法5)

Gnutella2支持的散列函数算法。

CRC-32(循环冗余校验)

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

网络链接至文件

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

普通链接(as)

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

P2P链接(xs)

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

内容寻址网络(CAN)URL

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

例:

链接到DirectConnect hub并为文件查找源

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

为Gnutella2上的文件引用基于网络的源缓存

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

引用ED2K源

文件列表(mt)

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

或者是一个URN

关键字(kt)

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

Tracker地址(tr)

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

补充格式(x.)

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

参数组

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

示例

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

mediawiki-1.15.1.tar.gz

url magnet

参考资料:维基百科

https://zh.wikipedia.org/wiki/%E7%A3%81%E5%8A%9B%E9%93%BE%E6%8E%A5

俊霖

发表评论

您必须