Magnet URI scheme: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Minor grammar edit
m Reverted edit by Sdrty (talk) to last version by Citation bot
 
(250 intermediate revisions by more than 100 users not shown)
Line 1: Line 1:
{{Short description|Scheme that defines the format of magnet links}}
{{lead too short|date=May 2012}}
{{Multiple issues|
{{cleanup|reason = The lists of examples should be better organized; the layout is too haphazard|date=May 2012}}
{{more citations needed|date=January 2015}}
[[Image:Magnet icon.svg|128px|thumb|Magnet icon]]
{{Cleanup|reason = The lists of examples should be better organized; the layout is too haphazard|date=May 2012}}
The '''Magnet URI scheme''' is a [[de facto standard]] (instead of an [[open standard]]) defining a [[URI scheme]] for '''Magnet links''', which mainly refer to resources available for download via [[peer-to-peer]] networks. Such a link typically identifies a file not by location, but by content—more precisely, by the content's [[cryptographic hash value]].
{{Technical|date=December 2014}}
}}
[[File:TPB Magnet Icon.gif|thumb|Rounded magnet icon used on [[The Pirate Bay]]]]


'''Magnet''' is a [[Uniform Resource Identifier|URI scheme]] that defines the format of '''magnet links''', a [[de facto standard]] for identifying files ([[Uniform Resource Name|URN]]) by their content, via [[Cryptographic hash function|cryptographic hash value]] rather than by their location.
Since it specifies a file based on content or [[metadata]], rather than by location, a Magnet link can be considered a kind of [[Uniform Resource Name|Uniform Resource ''Name'']], rather than the more common [[Uniform Resource Locator|Uniform Resource ''Locators'']]. Although it could be used for other applications, it is particularly useful in a peer-to-peer context, because it allows resources to be referred to without the need for a continuously available host.
#
Although magnet links can be used in a number of contexts, they are particularly useful in [[peer-to-peer file sharing]] networks because they allow resources to be referred to without the need for a continuously available host, and can be generated by anyone who already has the file, without the need for a central authority to issue them. This makes them popular for use as "guaranteed" search terms within the [[file sharing]] community where anyone can distribute a magnet link to ensure that the resource retrieved by that link is the one intended, regardless of how it is retrieved.


== History ==
== History ==
The standard for Magnet URIs was developed in 2002, partly as a "vendor- and project-neutral generalization" of the <code>ed2k:</code> and <code>freenet:</code> URI schemes used by [[eDonkey2000]] and [[Freenet]], respectively, and attempts to follow official [[Internet Engineering Task Force|IETF]] [[Uniform Resource Identifier|URI]] standards as closely as possible.
The standard for Magnet [[Uniform Resource Identifier|URI]]s was developed by [[Bitzi]] in 2002, partly as a "vendor- and project-neutral generalization" of the <code>ed2k:</code> and <code>freenet:</code> URI schemes used by [[eDonkey2000]] and [[Freenet]], respectively, and attempts to follow official [[Internet Engineering Task Force|IETF]] [[Uniform Resource Identifier|URI]] standards as closely as possible. [[BitTorrent]] introduced the <code>btmh:</code> protocol in 2020 as part of its BitTorrent v2 changes.<ref>{{cite web|title=BitTorrent v2|url=https://blog.libtorrent.org/2020/09/bittorrent-v2/|publisher=BitTorrent|access-date=7 September 2020|archive-date=30 October 2020|archive-url=https://web.archive.org/web/20201030011550/https://blog.libtorrent.org/2020/09/bittorrent-v2/|url-status=live}}</ref>


== Format {{anchor|Parameters}}==
Applications supporting Magnet links include [[μTorrent]], [[aMule]], [[BitComet]], [[BitSpirit]], [[BitTorrent (software)|BitTorrent]], [[DC++]], [[Deluge (software)|Deluge]], [[FrostWire]], [[gtk-gnutella]], [[Installous (iOS app)]], [[I2P]], [[KTorrent]], [[MLDonkey]], [[Morpheus (computer program)|Morpheus]], [[Qbittorrent]], [[rTorrent]], [[Shareaza]], [[Tixati]], [[Transmission (BitTorrent client)|Transmission]], [[Tribler]] and [[Vuze]].
Magnet URIs consist of a series of one or more parameters, the order of which is not significant, formatted in the same way as [[query string]]s that ordinarily terminate [[HTTP]] URLs.


The following parameters are supported:<ref name=":0" /><ref name="BEP-9" />
[[File:TPB Magnet Icon.gif|Inverted and rounded icon used on [[The Pirate Bay]]|thumb]]
[[The Pirate Bay]] migrated from [[.torrent]] files to magnet URI in February 2012. This migration made the storage footprint of The Pirate Bay exceptionally small. A user demonstrated total size of The Pirate Bay magnets would be approximately 90[[Megabyte|MB]] of compressed data.<ref>http://www.myce.com/news/the-pirate-bay-will-cease-hosting-most-torrent-files-in-february-58667/</ref>


{| class="wikitable"
== Use of content hashes ==
!Parameter
The most common use of Magnet URIs is to point to a particular file based on a [[hash function|hash]] of its contents, producing a unique identifier for the file, similar to an [[ISBN]] or [[catalog numbering systems for single records|catalog number]]. Unlike traditional identifiers, however, content-based signatures can be generated by anyone who already has the file, without the need for a central authority to issue them. This makes them popular for use as "guaranteed" search terms within the [[file sharing]] community where anyone can distribute a Magnet link to ensure that the resource retrieved by that link is the one intended, regardless of how it is retrieved. While it is theoretically possible for two files to have the same hash value (known as a "hash collision"), [[cryptographic hash function]]s are designed to reduce that occurrence to a practical impossibility{{spaced ndash}} even if an expert with vast computational resources is intentionally looking for two files with the same hash value.
!Name
!Description


|-
Another advantage of Magnet URIs is their open nature and platform independence: the same Magnet link can be used to download a resource from numerous applications on almost any operating system. Because they are concise and plain-text, users can [[copy-and-paste]] them into e-mails or instant messages, a property not found in, for example, [[BitTorrent (protocol)|BitTorrent]] files.
|'''xt'''
|'''Exact Topic'''
|[[Uniform Resource Name|URN]] containing file [[hash sum|hash]]. This is the most crucial part of the magnet link, and is used to find and verify the specified file. The URN is specific to the protocol, so a file hash URN under btih (BitTorrent) would be completely different from the file hash URN for ed2k
: <code>xt=<nowiki>urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a</nowiki></code>


|-
=== Technical description ===
|'''dn'''
Magnet URIs consist of a series of one or more parameters, the order of which is not significant, formatted in the same way as [[query string]]s that ordinarily terminate [[HTTP]] URLs. The most common parameter is "xt" ("exact topic"), which is generally a [[Uniform Resource Name|URN]] formed from the content hash of a particular file, e.g..
|'''Display Name'''
|A filename to display to the user, for convenience.
|-
|'''xl'''
|'''eXact Length'''
|The file size, in bytes
|-
|'''tr'''
|'''Address TRacker'''
|Tracker [[URL]]; used to obtain resources for [[BitTorrent (protocol)|BitTorrent]] downloads without a need for [[Distributed hash table|DHT]] support.<ref name="BEP-9"/> The value must be URL encoded.
:<code>tr=http%3A%2F%2Fexample.org%2Fannounce</code>


|-
<code>magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C</code>
|'''ws'''
|'''Web Seed'''
|The payload data served over HTTP(S)


|-
This refers to the [[Base32]] encoded [[SHA-1]] hash of the file in question. Note that, although a particular file is indicated, an availability search for it must still be carried out by the client application.
|'''as'''{{Citation needed|date=May 2022}}
|'''Acceptable Source'''
|Refers to a direct download from a web server. Regarded as only a fall-back source in case a client is unable to locate and/or download the linked-to file in its supported P2P network(s)
:<code>as=[web link to file(URL encoded)]</code>


|-
Other parameters defined by the draft standard are:
|'''xs'''{{Citation needed|date=May 2022}}
* "dn" ("display name"): a filename to display to the user, for convenience
|'''eXact Source'''
* "kt" ("keyword topic"): a more general search, specifying search terms, rather than a particular file
|Either an HTTP (or HTTPS, FTP, FTPS, etc.) download source for the file pointed to by the Magnet link, the address of a P2P source for the file or the address of a hub (in the case of [[DC++]]), by which a client tries to connect directly, asking for the file and/or its sources. This field is commonly used by P2P clients to store the source, and may include the file hash.
* "mt" ("manifest topic"): a URI pointing to a "manifest", e.g. a list of further items
: <code>xs=http://[Client Address]:[Port of client]/uri-res/N2R?[ [[Uniform Resource Name|URN]] containing a file [[hash sum|hash]] ]</code>
* application-specific experimental parameters, which must begin "x."
: <code>xs=<nowiki>http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF</nowiki></code>


|-
The standard also allows for multiple parameters of the same type to be used by appending ".1", ".2", etc. to the parameter name, e.g.:
|'''kt'''{{Citation needed|date=May 2022}}
<code>magnet:?xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xt.2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7</code>
|'''Keyword Topic'''

|Specifies a string of search keywords to search for in P2P networks, rather than a particular file
== Design ==
:<code>kt=martin+luther+king+mp3</code>


|-
Magnet URIs can contain multiple parameters, in any order, separated from each other by '&'.
|'''mt'''{{Citation needed|date=May 2022}}
<code> magnet:? xl = [Size in Bytes] & dn = [file name ([[Percent-encoding|URL encoded]])] & xt = urn: tree: tiger: [ [[Hash tree#Tiger tree hash|TTH]] [[hash sum|hash]] ([[Base32]]) ] </code>
|'''Manifest Topic'''

|Link to the metafile that contains a list of magneto (MAGMA{{spaced ndash}} [http://rakjar.de/gnuticles/MAGMA-Specsv22.txt MAGnet MAnifest]); i.e. a link to a list of links
=== Parameters ===
:<code>mt=<nowiki>http://example.org/all-my-favorites.rss</nowiki></code>
* dn (Display Name){{spaced ndash}}Filename
:<code>mt=<nowiki>urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ</nowiki></code>
* xl (eXact Length){{spaced ndash}}Size in bytes
|-
* [[#URN, containing hash (xt)|xt (eXact Topic)]]{{spaced ndash}}[[Uniform Resource Name|URN]] containing file [[hash sum|hash]]
|'''so'''<ref>{{Cite web |orig-date=2022-10-23 |title=libtorrent/magnet_uri.cpp at 64817e0e8793d0875fc10245de52ffb2540a223d · arvidn/libtorrent |url=https://github.com/arvidn/libtorrent/blob/64817e0e8793d0875fc10245de52ffb2540a223d/src/magnet_uri.cpp#L302-L501 |url-status=live |archive-url=https://web.archive.org/web/20221104095247/https://github.com/arvidn/libtorrent/blob/64817e0e8793d0875fc10245de52ffb2540a223d/src/magnet_uri.cpp#L302-L501 |archive-date=2022-11-04 |access-date=2022-11-04 |publisher=[[libtorrent]] |via=[[GitHub]]}}</ref>
* [[#Normal (as)|as (Acceptable Source)]]{{spaced ndash}}Web link to the file online
|'''Select Only'''
* [[#P2P (xs)|xs (eXact Source)]]{{spaced ndash}}[[Peer-to-peer|P2P]] link.
|Lists specific files torrent clients should download,<ref>{{Cite web |date=2017-06-06 |title=BitTorrent Enhancement Proposal 53: Magnet URI extension - Select specific file indices for download |url=https://www.bittorrent.org/beps/bep_0053.html |url-status=live |archive-url=https://web.archive.org/web/20221010161216/https://www.bittorrent.org/beps/bep_0053.html |archive-date=2022-10-10 |access-date=2022-11-04 |website=BitTorrent.org}}</ref> indicated as individual or ranges (inclusive) of file indexes.
* [[#Keywords (kt)|kt (Keyword Topic)]]{{spaced ndash}}Key words for search
:<code>so=0,2,4,6-8</code>
* [[#Manifest (mt)|mt (Manifest Topic)]]{{spaced ndash}}link to the metafile that contains a list of magneto (MAGMA{{spaced ndash}}[http://rakjar.de/gnuticles/MAGMA-Specsv22.txt MAGnet MAnifest])
|-
* [[#Address tracker (tr)|tr (address TRacker)]]{{spaced ndash}}Tracker URL for BitTorrent downloads
|'''x.pe'''

|'''PEer'''
=== URN, containing hash (xt) ===
|Specifies fixed peer addresses to connect to. Used to bootstrap discovery of peers in the absence of (e.g.) trackers or [[Mainline DHT|DHT]].<ref name="BEP-9" />
"xt" ("exact topic"): the most important part of a Magnet link, this parameter is used to find and verify the specified files.
:<code>x.pe=hostname:port</code>

:<code>x.pe=ipv4-literal:port</code>
;[[Hash tree#Tiger tree hash|TTH]] (Tiger Tree Hash)
:<code>x.pe=[ipv6-literal]:port</code>
These hashes are used on [[Direct Connect (file sharing)|Direct Connect]] and [[Gnutella2|G2]] (Gnutella2), among others.
|}
xt=urn:tree:tiger:[ [[Hash tree#Tiger tree hash|TTH]] [[hash sum|Hash]] ([[Base32]]) ]

;[[SHA-1]] (Secure Hash Algorithm 1)
These hash sums are used on [[gnutella]] and [[Gnutella2|G2]] (Gnutella2).
xt=urn:sha1:[ [[SHA-1]] [[hash sum|Hash]] ([[Base32]]) ]

;[[BitPrint]]
Such hash sums consist of an SHA-1 Hash, followed by a TTH Hash, delimited by a point; they are used on [[gnutella]] and [[Gnutella2|G2]] (Gnutella2).
xt=urn:bitprint:[ [[SHA-1]] [[hash sum|Hash]] ([[Base32]]) ].[ [[Hash tree#Tiger tree hash|TTH]] [[hash sum|Hash]] ([[Base32]]) ]

;[[EDonkey network#Hash identification|ED2K]] (eDonkey2000) Hash
These hash sums are used on [[eDonkey network|eDonkey2000]].
xt=urn:ed2k:[ [[EDonkey network#Hash identification|ED2K]] [[hash sum|Hash]] ([[Hexadecimal|Hex]]) ]


The standard also allows for application-specific experimental parameters, which must begin with "x".{{Citation needed|date=May 2022}}
;[[AICH]] (Advanced Intelligent Corruption Handler)
Not formal URNs for Magnet links, such hash sums are used by [[eDonkey network|eDonkey2000]] to restore and control the integrity of downloading and already downloaded files.
xt=urn:aich:[ [[AICH|aich]] [[hash sum|Hash]] ([[Base32]]) ]


=== Exact Topic (xt) ===
;[[Kazaa]] Hash
The xt parameter specifies the URN for a given p2p protocol. Its purpose is to provide a search parameter for finding the metadata to the torrent. This effectively acts as a replacement to a .torrent file, which itself contains the torrent metadata, by instead searching the p2p network (using the URN) for that metadata. Each protocol handles a URN uniquely; for example, <code>xt=<nowiki>urn:btih:FFC7E738EAA4CD4ECF51EC6FD669C6CDE2C281A8</nowiki></code> uses the btih (BitTorrent v1 protocol), so a BitTorrent client can take the hash and lookup the torrent's metadata in the BitTorrent DHT.<ref>{{Cite web |title=bep_0005.rst_post |url=http://bittorrent.org/beps/bep_0005.html |access-date=2022-05-12 |website=bittorrent.org}}</ref> In the case of DHT the client searches through a set of pre-known nodes and requests the metadata for an infohash; those nodes will make the same request to other known nodes until eventually a swarm is found and returned.
Used on [[FastTrack]], these hash sums are vulnerable to [[Collision attack|hash collision attacks]].
xt=urn:kzhash:[ [[Kazaa]] [[hash sum|Hash]] ([[Hexadecimal|Hex]]) ]


xt also allows for a group setting. Multiple files can be included by adding a count number preceded by a dot (".") to each link parameter.{{Citation needed|date=May 2022}}
;[[BTIH]] (BitTorrent Info Hash)
:<code><nowiki>magnet:?xt.1=</nowiki>[ [[Uniform Resource Name|URN]] of the first file]&xt.2=[ URN of the second file]</code>
These are hex encoded SHA1 hash sums of the "info" sections of [[BitTorrent (protocol)#Creating and publishing torrents|BitTorrent metafile]]s as used by [[BitTorrent (protocol)|BitTorrent]] to identify downloadable files or sets of files. For backwards compatibility with existing links, clients should also support the [[Base32]] encoded version of the hash.<ref name="BEP-9">[http://bittorrent.org/beps/bep_0009.html BEP-9: Extension for Peers to Send Metadata Files]</ref>
xt=urn:btih:[ [[BitTorrent (protocol)|BitTorrent]] Info [[hash sum|Hash]] ([[Hexadecimal|Hex]]) ]
Some clients require [[Base32]] of info_hash ([[Vuze]] for ex.).


; [[Merkle tree#Tiger tree hash|Tiger Tree Hash]] (TTH): These hashes are used on [[Direct Connect (file sharing)|Direct Connect]] and [[Gnutella2|G2]] (Gnutella2), among others.
;[[MD5]] (Message Digest 5)
:<code>xt=<nowiki>urn:tree:tiger</nowiki>:[ [[Merkle tree#Tiger tree hash|TTH]] [[hash sum|Hash]] ([[Base32]]) ]</code>
Supported by [[Gnutella2|G2]] (Gnutella2), such hashes are vulnerable to [[Collision attack|hash collision attacks]].
; [[SHA-1|Secure Hash Algorithm 1]] (SHA-1): These hash sums are used on [[gnutella]] and [[Gnutella2|G2]] (Gnutella2).
xt=urn:md5:[ [[MD5]] [[hash sum|Hash]] ([[Hexadecimal|Hex]]) ]
:<code>xt=<nowiki>urn:sha1</nowiki>:[ [[SHA-1]] [[hash function|Hash]] ([[Base32]]) ]</code>
; [[BitPrint]]: Such hash sums consist of an SHA-1 Hash, followed by a TTH Hash, delimited by a point; they are used on [[gnutella]] and [[Gnutella2|G2]] (Gnutella2).
:<code>xt=<nowiki>urn:bitprint</nowiki>:[ [[SHA-1]] [[hash function|Hash]] ([[Base32]]) ].[ [[Merkle tree#Tiger tree hash|TTH]] [[hash sum|Hash]] ([[Base32]]) ]</code>
; [[EDonkey network#Hash identification|ED2K]] (eDonkey2000) hash: These hash sums are used on [[eDonkey network|eDonkey2000]].
:<code>xt=<nowiki>urn:ed2k</nowiki>:[ [[EDonkey network#Hash identification|ED2K]] [[hash sum|Hash]] ([[Hexadecimal|Hex]]) ]</code>
; [[AICH|Advanced Intelligent Corruption Handler]] (AICH): Not formal URNs for Magnet links, such hash sums are used by [[eDonkey network|eDonkey2000]] to restore and control the integrity of downloading and already downloaded files.
:<code>xt=<nowiki>urn:aich</nowiki>:[ [[AICH|aich]] [[hash sum|Hash]] ([[Base32]]) ]</code>
; [[Kazaa]] hash: Used on [[FastTrack]], these hash sums are vulnerable to [[Collision attack|hash collision attacks]].
:<code>xt=<nowiki>urn:kzhash</nowiki>:[ [[Kazaa]] [[hash sum|Hash]] ([[Hexadecimal|Hex]]) ]</code>
; BitTorrent info hash (BTIH): These are hex-encoded [[SHA-1]] hash sums of the "info" sections of [[BitTorrent (protocol)#Creating and publishing|BitTorrent metafile]]s as used by [[BitTorrent (protocol)|BitTorrent]] to identify downloadable files or sets of files. For backwards compatibility with existing links, clients should also support the [[Base32]] encoded version of the hash.<ref name="BEP-9">{{Cite web |date=2017-03-26 |title=BitTorrent Enhancement Proposal 9: Extension for Peers to Send Metadata Files |url=http://bittorrent.org/beps/bep_0009.html |url-status=live |archive-url=https://web.archive.org/web/20221010161216/https://www.bittorrent.org/beps/bep_0009.html#magnet-uri-format |archive-date=2022-10-10 |access-date=2022-11-04 |website=bittorrent.org |publication-date=2008-01-31}}</ref>
:<code>xt=<nowiki>urn:btih</nowiki>:[ [[BitTorrent (protocol)|BitTorrent]] Info [[hash sum|Hash]] ([[Hexadecimal|Hex]]) ]</code>
: Some clients require [[Base32]] of info_hash (e.g., [[Vuze]]).
; BitTorrent info hash v2 (BTMH): [[BitTorrent|BitTorrent v2]] replaces the [[SHA-1|obsolete SHA-1 hash]] with a [[SHA-2|SHA-256]] info hash. The v2 info-hash is given a new prefix (<code>btmh</code>) to allow for torrents that can participate in both v1 and v2 swarms<ref>{{Cite web |date=2020-09-07 |title=BitTorrent v2 |url=https://blog.libtorrent.org/2020/09/bittorrent-v2/ |url-status=live |archive-url=https://web.archive.org/web/20221022200751/https://blog.libtorrent.org/2020/09/bittorrent-v2/ |archive-date=2022-10-22 |access-date=2022-11-05 |website=libbittorrent.org |publisher=libbittorrent |language=en-US}}</ref>
:<code>xt=<nowiki>urn:btmh</nowiki>:[1220: (v2 prefix) [[BitTorrent (protocol)|BitTorrent]] Info [[hash sum|Hash]] ([[Hexadecimal|Hex]]) ]</code>
; [[MD5|Message Digest 5]] (MD5): Supported by [[Gnutella2|G2]] (Gnutella2), such hashes are vulnerable to [[Collision attack|hash collision attacks]].
:<code>xt=<nowiki>urn:md5</nowiki>:[ [[MD5]] [[hash sum|Hash]] ([[Hexadecimal|Hex]]) ]</code>


=== Web links to the file ===
=== Web links to the file ===
There are two types of download links that a Magnet link can include as a direct or backup source.
There are two types of download links that a Magnet link can include as a direct or backup source.


; "as" ("acceptable source"): Most clients treat "as" as equal to the "xs" token when it comes to priority, and ignore the timeout before contacting "as" sources denoted by the specs.
==== Normal (as) ====
; Content-Addressable Web URL: This type of {{IETF RFC|2168}}-based link is used by [[gnutella]] as well as [[Gnutella2|G2]] applications.<ref>{{cite web |url=http://lists.w3.org/Archives/Public/www-talk/2001NovDec/0090.html |title=HTTP Extensions for a Content-Addressable Web |work=www-talk |publisher=W3C |first=Justin |last=Chapweske |date=November 29, 2001 |access-date=November 7, 2010 |archive-date=July 28, 2011 |archive-url=https://web.archive.org/web/20110728165323/http://lists.w3.org/Archives/Public/www-talk/2001NovDec/0090.html |url-status=live }}</ref>
"as" ("acceptable source") refers to a direct download from a web server. Regarded as only a fall-back source in case a client is unable to locate and/or download the linked-to file in its supported P2P network(s), most clients treat it equal to the "xs" token when it comes to priority, and ignore the timeout before contacting "as" sources denoted by the specs.
:<code>xs=http://[Client Address]:[Port of client]/uri-res/N2R?[ [[Uniform Resource Name|URN]] containing a file [[hash sum|hash]] ]</code>

:<code>xs=<nowiki>http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF</nowiki></code>
as=[ a web link to the file([[URL]] encoded) ]
;Link to a [[DirectConnect]] hub to find sources for a file: This type of link connects a DirectConnect client immediately to the hub in question.

:<code>xs=dchub://[hub address]:[hub port]</code>
==== P2P (xs) ====
"xs" ("exact source") is either an HTTP (or HTTPS, FTP, FTPS, etc.) download source for the file pointed to by the Magnet link, the address of a P2P source for the file or the address of a hub (in the case of [[DC++]]), by which a client tries to connect directly, asking for the file and/or its sources. This field is commonly used by P2P clients to store the source, and may include the file hash.
;Reference to a web-based source cache for a file on [[Gnutella2]]: In this case, the included link points, not to a client IP or direct source, but to a source cache which stores the IPs of other clients contacting it to download the same file. Once a client connects to the cache, it is served IPs for alternate sources, while its own IP is stored within the cache and forwarded to the next one connecting to the cache. This system operates similar to a [[BitTorrent tracker]].
:<code>xs=http://cache.freebase.be/[ [[SHA-1]] [[hash sum|hash]] ]</code>

;Content-Addressable Web<ref>{{cite web |url=http://lists.w3.org/Archives/Public/www-talk/2001NovDec/0090.html |title=HTTP Extensions for a Content-Addressable Web |work=www-talk |publisher=W3C |first=Justin |last=Chapweske |date=November 29, 2001}}</ref> URL
This type of RFC 2168-based link is used by [[gnutella]] as well as [[Gnutella2|G2]] applications.
xs=http://[Client Address]:[Port of client]/uri-res/N2R?[ [[Uniform Resource Name|URN]] containing a file [[hash sum|hash]] ]
Example:
<nowiki>xs=http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF</nowiki>

;Link to a [[DirectConnect]] hub to find sources for a file
This type of link connects a DirectConnect client immediately to the hub in question.
xs=dchub://[hub address]:[hub port]

;Reference to a web-based source cache for a file on [[Gnutella2]]
In this case, the included link points, not to a client IP or direct source, but to a source cache which stores the IPs of other clients contacting it to download the same file. Once a client connects to the cache, it is served IPs for alternate sources, while its own IP is stored within the cache and forwarded to the next one connecting to the cache. This system operates similar to a [[BitTorrent tracker]].
<nowiki>xs=http://cache.freebase.be/</nowiki>[ [[SHA-1]] [[hash sum|hash]] ]

;Reference to an eD2k source
;Reference to an eD2k source
xs=ed2kftp://[client address]:[client port]/[ed2k hash]/[file size]/
:<code>xs=ed2kftp://[client address]:[client port]/[ed2k hash]/[file size]/</code>

=== Manifest (mt) ===
This is a link to a list of links (see list). Perhaps as a web link...
<nowiki>mt=http://weblog.foo/all-my-favorites.rss</nowiki>
...or a [[Uniform Resource Name|URN]]
mt=urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ

=== Keywords (kt) ===
This field specifies a string of search keywords to search for in P2P networks.
kt=joe+blow+mp3

=== Address tracker (tr) ===
Tracker [[URL]]; used to obtain resources for [[BitTorrent (protocol)|BitTorrent]] downloads without a need for [[Distributed hash table|DHT]] support.<ref name="BEP-9"/>
<nowiki>tr=http://example.com/announce</nowiki>


=== Supplement format (x.) ===
=== Supplement format (x.) ===
For experimental and self-complementing informal options, the prefix x followed by a chosen second letter can be used.
For experimental and self-complementing informal options, the prefix {{code|x.}} followed by a chosen suffix letter can be used. These names are guaranteed to never be standardized.
x.[name of the new parameter]=[data of the new parameter ([[URL]] encoded)]
:<code>x.[name of the new parameter]=[data of the new parameter ([[URL]] encoded)]</code>{{Citation needed|date=May 2022}}


=== Group settings ===
== Clients ==
{| class="wikitable sortable"
Multiple files and their URNs, names and hashes in the Magnet link can be included by adding a count number preceded by a dot (".") to each link parameter.
magnet:?xt.1=[ [[Uniform Resource Name|URN]] of the first file]&xt.2=[ URN of the second file]

== Examples ==

===Link to a file of zero bytes length===
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

== Features and Clients ==
Parameters:

dn (Display Name){{spaced ndash}}Filename
xl (Exact Length){{spaced ndash}}Size in bytes
xt (Exact Topic){{spaced ndash}}URN containing file hash
as (Acceptable Source){{spaced ndash}}Web link to the file online
xs (Exact Source){{spaced ndash}}P2P link.
kt (Keyword Topic){{spaced ndash}}Key words for search
mt (Manifest Topic){{spaced ndash}}link to the metafile that contains a list of magneto (MAGMA{{spaced ndash}}MAGnet MAnifest)
tr (Address Tracker){{spaced ndash}}Tracker URL for BitTorrent downloads

=== Clients table ===

{|Class = "wikitable"
|-
|-
! Client
! Client
! [[#Parameters|dn]]
! [[#Format|dn]]
! [[#Parameters|xl]]
! [[#Format|xl]]
! [[#URN, containing hash (xt)|xt]]
! [[#xt exact topic|xt]]
! [[#Address tracker (tr)|tr]]
! [[#Address tracker (tr)|tr]]
! [[#P2P (xs)|xs]]
! [[#P2P (xs)|xs]]
Line 180: Line 146:
! [[#Keywords (kt)|kt]]
! [[#Keywords (kt)|kt]]
! [[#Manifest (mt)|mt]]
! [[#Manifest (mt)|mt]]
! [[#Web Seed (ws)|ws]]
! Interception<ref group=Note>Ability to intercept Magnet links directly from within the web browser. i.e. When a Magnet link is entered into the address bar, the application will intercept the link and try to open the link itself. So if a compatible client is installed on your computer and you enter a Magnet link into your browser address bar, a window pops up asking if you want to allow that client to open the link.</ref>
! Box<ref group=Note>Possibility to inject the link directly into the application in question.</ref>
|-
|-
| [[MiniGet]]
| [[AMule]]
| {{yes}}
| {{yes}}
| {{yes}}
| <code><nowiki>urn:ed2k:</nowiki></code>
| {{no}}
| {{no}}
| {{unk}}
| <code>urn:btih:</code>
| {{unk}}
| {{unk}}
| {{unk}}
| {{unk}}
|-
| [[ApexDC++]]
| {{yes}}
| {{yes}}
| {{yes}}
| <code><nowiki>urn:bitprint:</nowiki></code> <br/> <code><nowiki>urn:tree:tiger:</nowiki></code>
| {{no}}
| {{no}}
| {{yes|dchub:}}<ref name="Dchub" group="Note">dchub://[hubaddress]:[hubport]</ref>
| {{yes|dchub:}}<ref name="Dchub" group="Note"/>
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{unk}}
|-
| [[BitComet]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| <code><nowiki>urn:btih:</nowiki></code>
| {{yes}}
| {{yes}}<code><nowiki>1.76</nowiki></code>
| {{no}}
| {{no}}
| {{no}}
| {{yes}}<code><nowiki>1.74</nowiki></code><ref name="v1.74 Core Improve: support ws parameter in Magnet URI, to add web seed">{{cite web |title=v1.74 Core Improve: support ws parameter in Magnet URI, to add web seed |url=https://www.bitcomet.com/en/downloads |website=bitcomet |access-date=2021-04-07 |archive-date=2021-04-10 |archive-url=https://web.archive.org/web/20210410081721/http://www.bitcomet.com/en/downloads |url-status=live }}</ref>
|-
|-
| [[µTorrent]]
| [[Bitflu]]
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| <code>urn:btih:</code>
| <code><nowiki>urn:btih:</nowiki></code>
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
Line 204: Line 190:
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{yes}}
| {{unk}}
| {{yes}}
|-
|-
| [[Deluge (software)|Deluge]]
| [[AMule]]
| {{yes}}
| {{yes}}
| {{no}}
| <code><nowiki>urn:btih:</nowiki></code>
| {{yes}}
| {{yes}}
| <code>urn:ed2k:</code>
| {{no}}
| {{no}}
| {{unk}}
| {{unk}}
| {{unk}}
| {{unk}}
| {{no}}
| {{no}}
| {{yes}}
|-
| [[ApexDC++]]
| {{yes}}
| {{yes}}
| <code>urn:bitprint: <br /> urn:tree:tiger:</code>
| {{no}}
| {{no}}
| {{yes|Dchub:<ref name=Dchub group=Note>Dchub://[hubaddress]:[hubport]</ref>}}
| {{yes|Dchub:<ref name=Dchub group=Note/>}}
| {{no}}
| {{no}}
| {{unk}}
| {{unk}}
| {{yes}}
| {{no}}
|-
|-
| EiskaltDC++
| [[aria2]]
| {{yes}}
| {{yes}}
| {{unk}}
| <code>urn:btih:</code>
| {{yes}}
| {{yes}}
| <code><nowiki>urn:tree:tiger:</nowiki></code> <br/> <code><nowiki>urn:bitprint:</nowiki></code> <br/> <code><nowiki>urn:btih:</nowiki></code><ref name="toBTClient" group="Note">Passes link to external software</ref> <br/> <code><nowiki>urn:btmh:</nowiki></code><ref group="Note" name="toBTClient"/>
| {{unk}}
| {{unk}}
| {{no}}
| {{yes|dchub:}}<ref group="Note" name="Dchub" /> <br/> adc:<ref name="ADC" group="Note">adc://[hubaddress]:[hubport]</ref> <br/> adcs:<ref name="ADCS" group="Note">adcs://[hubaddress]:[hubport]</ref>
| {{unk}}
| {{yes|dchub:}}<ref name=Dchub group=Note/>
| {{unk}}
| {{yes}}
| {{no}}
| {{no}}
| {{unk}}
| {{unk}}
Line 246: Line 217:
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| <code>urn:bitprint: <br /> urn:tree:tiger:</code>
| <code><nowiki>urn:tree:tiger:</nowiki></code> <br/> <code><nowiki>urn:bitprint:</nowiki></code> <br/> <code><nowiki>urn:btih:</nowiki></code>
| {{no}}
| {{no}}
| {{yes|Dchub:<ref name=Dchub group=Note>Dchub://[hubaddress]:[hubport]</ref>}}
| {{yes|dchub:}}<ref group="Note" name="Dchub" /> <br/> adc:<ref name="ADC" group="Note"/> <br/> adcs:<ref name="ADCS" group="Note"/>
| {{yes|Dchub:<ref name=Dchub group=Note/>}}
| {{yes|dchub:}}<ref name=Dchub group=Note/>
| {{yes}}
| {{yes}}
| {{no}}
| {{unk}}
| {{unk}}
| {{yes}}
| {{no}}
|-
|-
| [[Vuze]]
| [[gtk-gnutella]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| <code>urn:btih:</code>
| <code><nowiki>urn:sha1:</nowiki></code>
| {{no}}
| {{yes|http:}} <br /> push:
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| {{no}}
| {{unk}}
| {{no}}
| {{yes}}
| {{yes}}
|-
|-
| [[BitComet]]
| [[KTorrent]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{no}}
| <code>urn:btih:</code>
| <code><nowiki>urn:btih:</nowiki></code>
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
Line 276: Line 245:
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{yes}}
| {{unk}}
| {{yes}}
|-
|-
| [[LimeWire]]
| [[Deluge (software)|Deluge]]
| {{yes}}
| {{yes}}
| {{no}}
| <code>urn:btih:</code>
| {{yes}}
| {{yes}}
| <code><nowiki>urn:sha1:</nowiki></code>
| {{no}}
| {{no}}
| {{yes|http:}} <br /> urn:guid:
| {{unk}}
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{unk}}
|-
| [[MonoTorrent]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| <code><nowiki>urn:btih:</nowiki></code>
|-
| [[gtk-gnutella]]
| {{yes}}
| {{yes}}
| {{yes}}
| <code>urn:sha1:</code>
| {{no}}
| {{no}}
| {{yes|http:}} <br /> push:
| {{yes}}
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{yes}}
| {{unk}}
|-
|-
| [[LimeWire]]
| [[μTorrent]]
| {{yes}}
| {{yes}}
| {{no}}
| <code><nowiki>urn:btih:</nowiki></code>
| {{yes}}
| {{yes}}
| <code>urn:sha1:</code>
| {{no}}
| {{no}}
| {{yes|http:}} <br /> urn:guid:
| {{unk}}
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{yes}}
| {{no}}
| {{yes}}
| {{yes}}
|-
|-
| [[KTorrent]]
| [[qBittorrent]]
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| <code>urn:btih:</code>
| <code><nowiki>urn:btih:</nowiki></code> <br/> <code><nowiki>urn:btmh:</nowiki></code>
| {{yes}}
| {{yes}}
| {{unk}}
| {{unk}}
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{unk}}
| {{no}}
| {{yes}}
| {{yes}}
|-
|-
| [[Shareaza]]
| [[Shareaza]]
| {{yes}}
| {{yes}}
| {{yes}}
| {{yes}}
| <code>urn:bitprint: <br /> urn:btih: <br /> urn:ed2k: <br /> urn:md5: <br /> urn:sha1: <br /> urn:tree:tiger: </code>
| <code><nowiki>urn:bitprint:</nowiki></code> <br/> <code><nowiki>urn:btih:</nowiki></code> <br/> <code><nowiki>urn:ed2k:</nowiki></code> <br/> <code><nowiki>urn:md5:</nowiki></code> <br/> <code><nowiki>urn:sha1:</nowiki></code> <br/> <code><nowiki>urn:tree:tiger: </nowiki></code>
| {{yes}} <ref group=Note>Since v2.5.1.0</ref>
| {{yes}}<ref group=Note>Since v2.5.1.0</ref>
| {{yes|http:}} <br /> ftp:
| {{yes|http:}} <br /> ftp:
| {{yes|http:}} <br /> ftp: <br /> <small>(Same priority as xs)</small>
| {{yes|http:}} <br /> ftp: <br /> <small>(Same priority as xs)</small>
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| {{unk}}
|-
| [[Tixati]]
| {{yes}}
| {{yes}}
| {{yes}}
| <code><nowiki>urn:btih:</nowiki></code>
| {{yes}}
| {{yes}}
| {{yes}}
| {{unk}}
| {{unk}}
| {{yes}}
| {{yes}}
|-
|-
| [[Transmission (BitTorrent client)|Transmission]]<ref>{{cite web |url=https://trac.transmissionbt.com/browser/trunk/libtransmission/magnet-test.c?rev=9531 |title=magnet-test.c in trunk/libtransmission; Revision 9531 |publisher=Transmission}}</ref><ref>{{cite web |url=https://trac.transmissionbt.com/browser/trunk/libtransmission/magnet.c?rev=9979 |title=magnet.c in trunk/libtransmission; Revision 9979 |publisher=Transmission}}</ref>
| [[Transmission (BitTorrent client)|Transmission]]<ref name=":0">{{cite web |url=https://trac.transmissionbt.com/browser/trunk/libtransmission/magnet-test.c?rev=9531 |title=magnet-test.c in trunk/libtransmission; Revision 9531 |publisher=Transmission |access-date=2012-02-04 |archive-date=2012-02-17 |archive-url=https://web.archive.org/web/20120217152203/https://trac.transmissionbt.com/browser/trunk/libtransmission/magnet-test.c?rev=9531 |url-status=live }}</ref><ref>{{cite web |url=https://trac.transmissionbt.com/browser/trunk/libtransmission/magnet.c?rev=9979 |title=magnet.c in trunk/libtransmission; Revision 9979 |publisher=Transmission |access-date=2012-02-04 |archive-date=2012-02-17 |archive-url=https://web.archive.org/web/20120217232524/https://trac.transmissionbt.com/browser/trunk/libtransmission/magnet.c?rev=9979 |url-status=live }}</ref>
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
| <code>urn:btih:</code>
| <code><nowiki>urn:btih:</nowiki></code>
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
Line 348: Line 322:
| {{no}}
| {{no}}
| {{no}}
| {{no}}
| {{yes}}<ref>{{cite web |url=https://github.com/transmission/transmission/commit/5c3fd1b5ccc3a8c4ab68e2c56861df31dd1c720a#diff-05c4e2919dd53eccc714f113e12f821685c9140c9e40491f2a069a2970912396 |title=magnet.c in libtransmission: Commit 5c3fd1b5ccc3a8c4ab68e2c56861df31dd1c720a |publisher=Transmission |access-date=2021-09-04 |archive-date=2021-09-04 |archive-url=https://web.archive.org/web/20210904042539/https://github.com/transmission/transmission/commit/5c3fd1b5ccc3a8c4ab68e2c56861df31dd1c720a#diff-05c4e2919dd53eccc714f113e12f821685c9140c9e40491f2a069a2970912396 |url-status=live }}</ref>
|-
| [[Vuze]]
| {{yes}}
| {{yes}}
| {{yes}}
| <code><nowiki>urn:btih:</nowiki></code> <br/> <code><nowiki>urn:sha1:</nowiki></code>
| {{yes}}
| {{yes}}<code><nowiki>5.7.5.0</nowiki></code>
| {{yes}}<code><nowiki>5.7.5.0</nowiki></code>
| {{no}}
| {{no}}
| {{yes}}
| {{yes}}
|}
|}

=== Notes ===
{{reflist|group=Note}}

=== Shareaza ===
This client is able to intercept links from within the web browser and can also handle Magnet links pasted into the search area or the "Download File or Torrent" dialogue.

=== aMule 2.2 ===
Unable to intercept Magnet links from within a web browser, this client supports Magnets by offering a text box at the bottom of the client into which they can be copied and pasted. However, the client is able only to recognize eD2k hash, file size and name in a specific order and therefore, many valid links may not be suitable for downloading.


== See also ==
== See also ==
* [[BitTorrent]]
* [[Burnbit]]
* [[ed2k URI scheme]]
* [[ed2k URI scheme]]
* [[InterPlanetary File System]]
* [[Metalink]]
* [[Metalink]]
* [[Named data networking]]
* [[Named data networking]]
* [[Peer-to-peer]]

== Explanatory notes ==
{{Reflist|group=Note}}


== References ==
== References ==
{{reflist}}
{{Reflist|30em}}


== External links ==
== External links ==
* [http://magnet-uri.sourceforge.net/ Magnet-URI Project website]
* {{sourceforge|magnet-uri|Magnet-URI Project}}, an early definition of the format (last update 2002)
* [http://bitzi.com/ Bitzi] a Magnet search engine / directory.
* [http://compressme.net/ CHK] Freeware checksum utility with SHA1-Base32 and ED2K support
* {{sourceforge|rhash|RHash}}, an [[Open-source license|open source]] command-line tool, which can calculate magnet links
* [http://www.freebase.be/ Freebase] a website that uses magnet links to index [[freeware]].
* [http://rhash.sourceforge.net/ RHash] an [[open source]] command-line tool, which can calculate Magnet links.
* [http://mgnet.me/ Mgnet.me] Torrent Magnet URI shortening tool
* [http://www.bt2magnet.com/ Bt2magnet] Convert Torrent File To Magnet URI
* [http://www.magnet2torrent.me/ magnet2torrent.me] Magnet Link to Torrent File Converter


{{URI scheme}}
{{URI scheme}}

Latest revision as of 11:27, 7 March 2024

Rounded magnet icon used on The Pirate Bay

Magnet is a URI scheme that defines the format of magnet links, a de facto standard for identifying files (URN) by their content, via cryptographic hash value rather than by their location.

Although magnet links can be used in a number of contexts, they are particularly useful in peer-to-peer file sharing networks because they allow resources to be referred to without the need for a continuously available host, and can be generated by anyone who already has the file, without the need for a central authority to issue them. This makes them popular for use as "guaranteed" search terms within the file sharing community where anyone can distribute a magnet link to ensure that the resource retrieved by that link is the one intended, regardless of how it is retrieved.

History[edit]

The standard for Magnet URIs was developed by Bitzi in 2002, partly as a "vendor- and project-neutral generalization" of the ed2k: and freenet: URI schemes used by eDonkey2000 and Freenet, respectively, and attempts to follow official IETF URI standards as closely as possible. BitTorrent introduced the btmh: protocol in 2020 as part of its BitTorrent v2 changes.[1]

Format [edit]

Magnet URIs consist of a series of one or more parameters, the order of which is not significant, formatted in the same way as query strings that ordinarily terminate HTTP URLs.

The following parameters are supported:[2][3]

Parameter Name Description
xt Exact Topic URN containing file hash. This is the most crucial part of the magnet link, and is used to find and verify the specified file. The URN is specific to the protocol, so a file hash URN under btih (BitTorrent) would be completely different from the file hash URN for ed2k
xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a
dn Display Name A filename to display to the user, for convenience.
xl eXact Length The file size, in bytes
tr Address TRacker Tracker URL; used to obtain resources for BitTorrent downloads without a need for DHT support.[3] The value must be URL encoded.
tr=http%3A%2F%2Fexample.org%2Fannounce
ws Web Seed The payload data served over HTTP(S)
as[citation needed] Acceptable Source Refers to a direct download from a web server. Regarded as only a fall-back source in case a client is unable to locate and/or download the linked-to file in its supported P2P network(s)
as=[web link to file(URL encoded)]
xs[citation needed] eXact Source Either an HTTP (or HTTPS, FTP, FTPS, etc.) download source for the file pointed to by the Magnet link, the address of a P2P source for the file or the address of a hub (in the case of DC++), by which a client tries to connect directly, asking for the file and/or its sources. This field is commonly used by P2P clients to store the source, and may include the file hash.
xs=http://[Client Address]:[Port of client]/uri-res/N2R?[ URN containing a file hash ]
xs=http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF
kt[citation needed] Keyword Topic Specifies a string of search keywords to search for in P2P networks, rather than a particular file
kt=martin+luther+king+mp3
mt[citation needed] Manifest Topic Link to the metafile that contains a list of magneto (MAGMA – MAGnet MAnifest); i.e. a link to a list of links
mt=http://example.org/all-my-favorites.rss
mt=urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ
so[4] Select Only Lists specific files torrent clients should download,[5] indicated as individual or ranges (inclusive) of file indexes.
so=0,2,4,6-8
x.pe PEer Specifies fixed peer addresses to connect to. Used to bootstrap discovery of peers in the absence of (e.g.) trackers or DHT.[3]
x.pe=hostname:port
x.pe=ipv4-literal:port
x.pe=[ipv6-literal]:port

The standard also allows for application-specific experimental parameters, which must begin with "x".[citation needed]

Exact Topic (xt)[edit]

The xt parameter specifies the URN for a given p2p protocol. Its purpose is to provide a search parameter for finding the metadata to the torrent. This effectively acts as a replacement to a .torrent file, which itself contains the torrent metadata, by instead searching the p2p network (using the URN) for that metadata. Each protocol handles a URN uniquely; for example, xt=urn:btih:FFC7E738EAA4CD4ECF51EC6FD669C6CDE2C281A8 uses the btih (BitTorrent v1 protocol), so a BitTorrent client can take the hash and lookup the torrent's metadata in the BitTorrent DHT.[6] In the case of DHT the client searches through a set of pre-known nodes and requests the metadata for an infohash; those nodes will make the same request to other known nodes until eventually a swarm is found and returned.

xt also allows for a group setting. Multiple files can be included by adding a count number preceded by a dot (".") to each link parameter.[citation needed]

magnet:?xt.1=[ URN of the first file]&xt.2=[ URN of the second file]
Tiger Tree Hash (TTH)
These hashes are used on Direct Connect and G2 (Gnutella2), among others.
xt=urn:tree:tiger:[ TTH Hash (Base32) ]
Secure Hash Algorithm 1 (SHA-1)
These hash sums are used on gnutella and G2 (Gnutella2).
xt=urn:sha1:[ SHA-1 Hash (Base32) ]
BitPrint
Such hash sums consist of an SHA-1 Hash, followed by a TTH Hash, delimited by a point; they are used on gnutella and G2 (Gnutella2).
xt=urn:bitprint:[ SHA-1 Hash (Base32) ].[ TTH Hash (Base32) ]
ED2K (eDonkey2000) hash
These hash sums are used on eDonkey2000.
xt=urn:ed2k:[ ED2K Hash (Hex) ]
Advanced Intelligent Corruption Handler (AICH)
Not formal URNs for Magnet links, such hash sums are used by eDonkey2000 to restore and control the integrity of downloading and already downloaded files.
xt=urn:aich:[ aich Hash (Base32) ]
Kazaa hash
Used on FastTrack, these hash sums are vulnerable to hash collision attacks.
xt=urn:kzhash:[ Kazaa Hash (Hex) ]
BitTorrent info hash (BTIH)
These are hex-encoded SHA-1 hash sums of the "info" sections of BitTorrent metafiles as used by BitTorrent to identify downloadable files or sets of files. For backwards compatibility with existing links, clients should also support the Base32 encoded version of the hash.[3]
xt=urn:btih:[ BitTorrent Info Hash (Hex) ]
Some clients require Base32 of info_hash (e.g., Vuze).
BitTorrent info hash v2 (BTMH)
BitTorrent v2 replaces the obsolete SHA-1 hash with a SHA-256 info hash. The v2 info-hash is given a new prefix (btmh) to allow for torrents that can participate in both v1 and v2 swarms[7]
xt=urn:btmh:[1220: (v2 prefix) BitTorrent Info Hash (Hex) ]
Message Digest 5 (MD5)
Supported by G2 (Gnutella2), such hashes are vulnerable to hash collision attacks.
xt=urn:md5:[ MD5 Hash (Hex) ]

Web links to the file[edit]

There are two types of download links that a Magnet link can include as a direct or backup source.

"as" ("acceptable source")
Most clients treat "as" as equal to the "xs" token when it comes to priority, and ignore the timeout before contacting "as" sources denoted by the specs.
Content-Addressable Web URL
This type of RFC 2168-based link is used by gnutella as well as G2 applications.[8]
xs=http://[Client Address]:[Port of client]/uri-res/N2R?[ URN containing a file hash ]
xs=http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF
Link to a DirectConnect hub to find sources for a file
This type of link connects a DirectConnect client immediately to the hub in question.
xs=dchub://[hub address]:[hub port]
Reference to a web-based source cache for a file on Gnutella2
In this case, the included link points, not to a client IP or direct source, but to a source cache which stores the IPs of other clients contacting it to download the same file. Once a client connects to the cache, it is served IPs for alternate sources, while its own IP is stored within the cache and forwarded to the next one connecting to the cache. This system operates similar to a BitTorrent tracker.
xs=http://cache.freebase.be/[ SHA-1 hash ]
Reference to an eD2k source
xs=ed2kftp://[client address]:[client port]/[ed2k hash]/[file size]/

Supplement format (x.)[edit]

For experimental and self-complementing informal options, the prefix x. followed by a chosen suffix letter can be used. These names are guaranteed to never be standardized.

x.[name of the new parameter]=[data of the new parameter (URL encoded)][citation needed]

Clients[edit]

Client dn xl xt tr xs as kt mt ws
AMule Yes Yes urn:ed2k: No Un­known Un­known Un­known Un­known Un­known
ApexDC++ Yes Yes urn:bitprint:
urn:tree:tiger:
No dchub:[Note 1] dchub:[Note 1] No No Un­known
BitComet Yes Yes urn:btih: Yes Yes1.76 No No No Yes1.74[9]
Bitflu Yes No urn:btih: Yes No No No No Un­known
Deluge Yes No urn:btih: Yes No No No No Un­known
EiskaltDC++ Yes Yes urn:tree:tiger:
urn:bitprint:
urn:btih:[Note 2]
urn:btmh:[Note 2]
No dchub:[Note 1]
adc:[Note 3]
adcs:[Note 4]
dchub:[Note 1] Yes No Un­known
FlylinkDC++ Yes Yes urn:tree:tiger:
urn:bitprint:
urn:btih:
No dchub:[Note 1]
adc:[Note 3]
adcs:[Note 4]
dchub:[Note 1] Yes No Un­known
gtk-gnutella Yes Yes urn:sha1: No http:
push:
Yes Yes No Un­known
KTorrent Yes No urn:btih: Yes No No No No Un­known
LimeWire Yes Yes urn:sha1: No http:
urn:guid:
Un­known No No Un­known
MonoTorrent Yes Yes urn:btih: Yes No Yes No No Un­known
μTorrent Yes No urn:btih: Yes No No No No Yes
qBittorrent Yes No urn:btih:
urn:btmh:
Yes Un­known Un­known No No Un­known
Shareaza Yes Yes urn:bitprint:
urn:btih:
urn:ed2k:
urn:md5:
urn:sha1:
urn:tree:tiger:
Yes[Note 5] http:
ftp:
http:
ftp:
(Same priority as xs)
Yes No Un­known
Tixati Yes Yes urn:btih: Yes Yes Yes Un­known Un­known Yes
Transmission[2][10] Yes No urn:btih: Yes No No No No Yes[11]
Vuze Yes Yes urn:btih:
urn:sha1:
Yes Yes5.7.5.0 Yes5.7.5.0 No No Yes

See also[edit]

Explanatory notes[edit]

  1. ^ a b c d e f dchub://[hubaddress]:[hubport]
  2. ^ a b Passes link to external software
  3. ^ a b adc://[hubaddress]:[hubport]
  4. ^ a b adcs://[hubaddress]:[hubport]
  5. ^ Since v2.5.1.0

References[edit]

  1. ^ "BitTorrent v2". BitTorrent. Archived from the original on 30 October 2020. Retrieved 7 September 2020.
  2. ^ a b "magnet-test.c in trunk/libtransmission; Revision 9531". Transmission. Archived from the original on 2012-02-17. Retrieved 2012-02-04.
  3. ^ a b c d "BitTorrent Enhancement Proposal 9: Extension for Peers to Send Metadata Files". bittorrent.org (published 2008-01-31). 2017-03-26. Archived from the original on 2022-10-10. Retrieved 2022-11-04.
  4. ^ "libtorrent/magnet_uri.cpp at 64817e0e8793d0875fc10245de52ffb2540a223d · arvidn/libtorrent". libtorrent. Archived from the original on 2022-11-04. Retrieved 2022-11-04 – via GitHub.
  5. ^ "BitTorrent Enhancement Proposal 53: Magnet URI extension - Select specific file indices for download". BitTorrent.org. 2017-06-06. Archived from the original on 2022-10-10. Retrieved 2022-11-04.
  6. ^ "bep_0005.rst_post". bittorrent.org. Retrieved 2022-05-12.
  7. ^ "BitTorrent v2". libbittorrent.org. libbittorrent. 2020-09-07. Archived from the original on 2022-10-22. Retrieved 2022-11-05.
  8. ^ Chapweske, Justin (November 29, 2001). "HTTP Extensions for a Content-Addressable Web". www-talk. W3C. Archived from the original on July 28, 2011. Retrieved November 7, 2010.
  9. ^ "v1.74 Core Improve: support ws parameter in Magnet URI, to add web seed". bitcomet. Archived from the original on 2021-04-10. Retrieved 2021-04-07.
  10. ^ "magnet.c in trunk/libtransmission; Revision 9979". Transmission. Archived from the original on 2012-02-17. Retrieved 2012-02-04.
  11. ^ "magnet.c in libtransmission: Commit 5c3fd1b5ccc3a8c4ab68e2c56861df31dd1c720a". Transmission. Archived from the original on 2021-09-04. Retrieved 2021-09-04.

External links[edit]