zoukankan      html  css  js  c++  java
  • 磁力链接 结构解析

    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
  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/linuxws/p/10166685.html
Copyright © 2011-2022 走看看