Revision as of 23:33, 10 April 2021 edit134.122.189.107 (talk) →ClientsTag: nowiki added← Previous edit | Latest revision as of 19:58, 24 December 2024 edit undoJust Stupid Enough (talk | contribs)3 editsmNo edit summaryTag: Visual edit | ||
(36 intermediate revisions by 29 users not shown) | |||
Line 1: | Line 1: | ||
{{Short description|Scheme that defines the format of magnet links}} | |||
{{Multiple issues| | {{Multiple issues| | ||
{{more citations needed|date=January 2015}} | {{more citations needed|date=January 2015}} | ||
{{Cleanup|reason = The lists of examples should be better organized; the layout is too haphazard|date=May 2012}} | |||
{{Technical|date=December 2014}} | {{Technical|date=December 2014}} | ||
}} | }} | ||
]]] | ]]] | ||
'''Magnet''' is a ] that defines the format of '''magnet links''', a ] for identifying files (]) by their content, via ] rather than by their location. | '''Magnet''' is a ] that defines the format of '''magnet links''', a ] for identifying files (]) by their content, via ] rather than by their location. | ||
# | |||
Although magnet links can be used in a number of contexts, they are particularly useful in ] 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 ] 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. | Although magnet links can be used in a number of contexts, they are particularly useful in ] 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 ] 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 ]s was developed by ] in 2002, partly as a "vendor- and project-neutral generalization" of the <code>ed2k:</code> and <code>freenet:</code> URI schemes used by ] and ] (now Hyphanet), respectively, and attempts to follow official ] ] standards as closely as possible. ] 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> | ||
⚫ | The standard for Magnet ]s was developed by ] in 2002, partly as a "vendor- and project-neutral generalization" of the <code>ed2k:</code> and <code>freenet:</code> URI schemes used by ] and ], respectively, and attempts to follow official ] ] 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}}</ref> | ||
== Format {{anchor|Parameters}}== | == Format {{anchor|Parameters}}== | ||
Magnet URIs consist of a series of one or more parameters, the order of which is not significant, formatted in the same way as ]s that ordinarily terminate ] URLs. |
Magnet URIs consist of a series of one or more parameters, the order of which is not significant, formatted in the same way as ]s that ordinarily terminate ] URLs. | ||
⚫ | The following parameters are supported:<ref name=":0" /><ref name="BEP-9" /> | ||
⚫ | <code> |
||
This refers to the ]-encoded ] ] (btih, "BitTorrent info-hash") of the torrent file info section in question. Note that, although a particular file is indicated, an availability search for it must still be carried out by the client application. | |||
=== Parameters === | |||
⚫ | The following parameters are supported: | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 29: | Line 22: | ||
!Name | !Name | ||
!Description | !Description | ||
|- | |||
|'''xt''' | |||
|'''Exact Topic''' | |||
⚫ | |] containing file ]. 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> | ||
|- | |- | ||
Line 34: | Line 33: | ||
|'''Display Name''' | |'''Display Name''' | ||
|A filename to display to the user, for convenience. | |A filename to display to the user, for convenience. | ||
|- | |- | ||
|'''xl''' | |'''xl''' | ||
|'''eXact Length''' | |'''eXact Length''' | ||
| |
|The file size, in bytes | ||
|- | |- | ||
|''' |
|'''tr''' | ||
|''' |
|'''address TRacker''' | ||
⚫ | |Tracker ]; used to obtain resources for ] downloads without a need for ] support.<ref name="BEP-9"/> The value must be URL encoded. | ||
⚫ | |] containing file ]. 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 |
||
: |
:<code>tr=http%3A%2F%2Fexample.org%2Fannounce</code> | ||
|- | |- | ||
Line 52: | Line 49: | ||
|- | |- | ||
|'''as''' | |'''as'''{{Citation needed|date=May 2022}} | ||
|'''Acceptable Source''' | |'''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) | |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) | ||
Line 58: | Line 55: | ||
|- | |- | ||
|'''xs''' | |'''xs'''{{Citation needed|date=May 2022}} | ||
|'''eXact Source''' | |'''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 ]), 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. | |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 ]), 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. | ||
: <code>xs=http://:/uri-res/N2R?] containing a file ] ]</code> | : <code>xs=http://:/uri-res/N2R?] containing a file ] ]</code> | ||
: <code>xs=http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF</code> | : <code>xs=<nowiki>http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF</nowiki></code> | ||
|- | |- | ||
|'''kt''' | |'''kt'''{{Citation needed|date=May 2022}} | ||
|'''Keyword Topic''' | |'''Keyword Topic''' | ||
|Specifies a string of search keywords to search for in P2P networks, rather than a particular file | |Specifies a string of search keywords to search for in P2P networks, rather than a particular file | ||
Line 71: | Line 68: | ||
|- | |- | ||
|'''mt''' | |'''mt'''{{Citation needed|date=May 2022}} | ||
|'''Manifest Topic''' | |'''Manifest Topic''' | ||
|Link to the metafile that contains a list of magneto (MAGMA{{spaced ndash}} ); i.e. a link to a list of links | |Link to the metafile that contains a list of magneto (MAGMA{{spaced ndash}} ); i.e. a link to a list of links | ||
:<code>mt=http://example.org/all-my-favorites.rss</code> | :<code>mt=<nowiki>http://example.org/all-my-favorites.rss</nowiki></code> | ||
:<code>mt=urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ</code> | :<code>mt=<nowiki>urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ</nowiki></code> | ||
|- | |||
|'''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=] |via=]}}</ref> | |||
|'''Select Only''' | |||
|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. | |||
:<code>so=0,2,4,6-8</code> | |||
|- | |- | ||
|''' |
|'''x.pe''' | ||
|''' |
|'''PEer''' | ||
|Specifies fixed peer addresses to connect to. Used to bootstrap discovery of peers in the absence of (e.g.) trackers or ].<ref name="BEP-9" /> | |||
⚫ | |Tracker ]; used to obtain resources for ] downloads without a need for ] support.<ref name="BEP-9"/> The value must be URL encoded. | ||
:<code> |
:<code>x.pe=hostname:port</code> | ||
:<code>x.pe=ipv4-literal:port</code> | |||
:<code>x.pe=:port</code> | |||
|} | |} | ||
The standard also allows for application-specific experimental parameters, which must begin with "x |
The standard also allows for application-specific experimental parameters, which must begin with "x".{{Citation needed|date=May 2022}} | ||
=== |
=== Exact Topic (xt) === | ||
⚫ | 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. | ||
⚫ | 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}} | ||
⚫ | 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. 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. | ||
⚫ | :<code><nowiki>magnet:?xt.1=</nowiki>] of the first file]&xt.2=</code> | ||
⚫ | 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. | ||
⚫ | :<code>magnet:?xt.1=] of the first file]&xt.2=</code> | ||
; ] (TTH): These hashes are used on ] and ] (Gnutella2), among others. | ; ] (TTH): These hashes are used on ] and ] (Gnutella2), among others. | ||
:<code>xt=urn:tree:tiger:] ] (]) ]</code> | :<code>xt=<nowiki>urn:tree:tiger</nowiki>:] ] (]) ]</code> | ||
; ] (SHA-1): These hash sums are used on ] and ] (Gnutella2). | ; ] (SHA-1): These hash sums are used on ] and ] (Gnutella2). | ||
:<code>xt=urn:sha1:] ] (]) ]</code> | :<code>xt=<nowiki>urn:sha1</nowiki>:] ] (]) ]</code> | ||
; ]: Such hash sums consist of an SHA-1 Hash, followed by a TTH Hash, delimited by a point; they are used on ] and ] (Gnutella2). | ; ]: Such hash sums consist of an SHA-1 Hash, followed by a TTH Hash, delimited by a point; they are used on ] and ] (Gnutella2). | ||
:<code>xt=urn:bitprint:] ] (]) ].] ] (]) ]</code> | :<code>xt=<nowiki>urn:bitprint</nowiki>:] ] (]) ].] ] (]) ]</code> | ||
; ] (eDonkey2000) hash: These hash sums are used on ]. | ; ] (eDonkey2000) hash: These hash sums are used on ]. | ||
:<code>xt=urn:ed2k:] ] (]) ]</code> | :<code>xt=<nowiki>urn:ed2k</nowiki>:] ] (]) ]</code> | ||
; ] (AICH): Not formal URNs for Magnet links, such hash sums are used by ] to restore and control the integrity of downloading and already downloaded files. | ; ] (AICH): Not formal URNs for Magnet links, such hash sums are used by ] to restore and control the integrity of downloading and already downloaded files. | ||
:<code>xt=urn:aich:] ] (]) ]</code> | :<code>xt=<nowiki>urn:aich</nowiki>:] ] (]) ]</code> | ||
; ] hash: Used on ], these hash sums are vulnerable to ]. | ; ] hash: Used on ], these hash sums are vulnerable to ]. | ||
:<code>xt=urn:kzhash:] ] (]) ]</code> | :<code>xt=<nowiki>urn:kzhash</nowiki>:] ] (]) ]</code> | ||
; BitTorrent info hash (BTIH): These are hex-encoded ] hash sums of the "info" sections of ]s as used by ] to identify downloadable files or sets of files. For backwards compatibility with existing links, clients should also support the ] encoded version of the hash.<ref name="BEP-9"> |
; BitTorrent info hash (BTIH): These are hex-encoded ] hash sums of the "info" sections of ]s as used by ] to identify downloadable files or sets of files. For backwards compatibility with existing links, clients should also support the ] 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=urn:btih:] Info ] (]) ]</code> | :<code>xt=<nowiki>urn:btih</nowiki>:] Info ] (]) ]</code> | ||
Some clients require ] of info_hash (e.g., ]). | : Some clients require ] of info_hash (e.g., ]). | ||
; BitTorrent info hash v2 (BTMH): ] replaces the ] with a ] 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>:] Info ] (]) ]</code> | |||
; ] (MD5): Supported by ] (Gnutella2), such hashes are vulnerable to ]. | ; ] (MD5): Supported by ] (Gnutella2), such hashes are vulnerable to ]. | ||
:<code>xt=urn:md5:] ] (]) ]</code> | :<code>xt=<nowiki>urn:md5</nowiki>:] ] (]) ]</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. | ; "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 {{IETF RFC|2168}}-based link is used by ] as well as ] 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}}</ref> | ; Content-Addressable Web URL: This type of {{IETF RFC|2168}}-based link is used by ] as well as ] 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> | ||
:<code>xs=http://:/uri-res/N2R?] containing a file ] ]</code> | :<code>xs=http://:/uri-res/N2R?] containing a file ] ]</code> | ||
:<code>xs=http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF</code> | :<code>xs=<nowiki>http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF</nowiki></code> | ||
;Link to a ] hub to find sources for a file: This type of link connects a DirectConnect client immediately to the hub in question. | ;Link to a ] hub to find sources for a file: This type of link connects a DirectConnect client immediately to the hub in question. | ||
:<code>xs=dchub://:</code> | :<code>xs=dchub://:</code> | ||
Line 128: | Line 130: | ||
=== Supplement format (x.) === | === Supplement format (x.) === | ||
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. | 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. | ||
:<code>x.=] encoded)]</code> | :<code>x.=] encoded)]</code>{{Citation needed|date=May 2022}} | ||
== Clients == | == Clients == | ||
⚫ | {| class="wikitable sortable" | ||
⚫ | {| |
||
|- | |- | ||
! Client | ! Client | ||
Line 178: | Line 178: | ||
| {{no}} | | {{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 | |
| {{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> | ||
|- | |- | ||
| ] | | ] | ||
Line 202: | Line 202: | ||
| {{unk}} | | {{unk}} | ||
|- | |- | ||
| |
| EiskaltDC++ | ||
| {{yes}} | | {{yes}} | ||
| {{yes}} | | {{yes}} | ||
Line 277: | Line 277: | ||
| {{no}} | | {{no}} | ||
| {{no}} | | {{no}} | ||
| {{ |
| {{yes}} | ||
|- | |- | ||
| ] | | ] | ||
| {{yes}} | | {{yes}} | ||
| {{no}} | | {{no}} | ||
| <code><nowiki>urn:btih:</nowiki></code> | | <code><nowiki>urn:btih:</nowiki></code> <br/> <code><nowiki>urn:btmh:</nowiki></code> | ||
| {{yes}} | | {{yes}} | ||
| {{unk}} | | {{unk}} | ||
Line 305: | Line 305: | ||
| {{yes}} | | {{yes}} | ||
| <code><nowiki>urn:btih:</nowiki></code> | | <code><nowiki>urn:btih:</nowiki></code> | ||
⚫ | | {{yes}} | ||
⚫ | | {{yes}} | ||
| {{yes}} | | {{yes}} | ||
| {{unk}} | | {{unk}} | ||
| {{unk}} | | {{unk}} | ||
| {{ |
| {{yes}} | ||
⚫ | | {{ |
||
⚫ | | {{ |
||
|- | |- | ||
| ]<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> | | ]<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}} | ||
Line 321: | Line 321: | ||
| {{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> | |||
| {{unk}} | |||
|- | |- | ||
| ] | | ] | ||
Line 328: | Line 328: | ||
| <code><nowiki>urn:btih:</nowiki></code> <br/> <code><nowiki>urn:sha1:</nowiki></code> | | <code><nowiki>urn:btih:</nowiki></code> <br/> <code><nowiki>urn:sha1:</nowiki></code> | ||
| {{yes}} | | {{yes}} | ||
| {{yes}}<nowiki>5.7.5.0</nowiki></code> | | {{yes}}<code><nowiki>5.7.5.0</nowiki></code> | ||
| {{yes}}<nowiki>5.7.5.0</nowiki></code> | | {{yes}}<code><nowiki>5.7.5.0</nowiki></code> | ||
| {{no}} | | {{no}} | ||
| {{no}} | | {{no}} | ||
Line 336: | Line 336: | ||
== See also == | == See also == | ||
* ] | * ] | ||
⚫ | * ] | ||
* ] | * ] | ||
* ] | * ] | ||
⚫ | * ] | ||
* ] | * ] | ||
* ] | * ] | ||
⚫ | * ] | ||
⚫ | * ] | ||
== |
== Explanatory notes == | ||
{{Reflist|group=Note}} | {{Reflist|group=Note}} | ||
Line 353: | Line 352: | ||
== External links == | == External links == | ||
* {{sourceforge|magnet-uri|Magnet-URI Project}}, an early definition of the format (last update 2002) | * {{sourceforge|magnet-uri|Magnet-URI Project}}, an early definition of the format (last update 2002) | ||
* Freeware |
* Freeware checksum utility with SHA1-Base32 and ED2K support | ||
* {{sourceforge|rhash|RHash}}, an ] command-line tool, which can calculate |
* {{sourceforge|rhash|RHash}}, an ] command-line tool, which can calculate magnet links | ||
{{URI scheme}} | {{URI scheme}} |
Latest revision as of 19:58, 24 December 2024
Scheme that defines the format of magnet linksThis article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
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
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 (now Hyphanet), 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.
Format
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:
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
|
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. The value must be URL encoded.
|
ws | Web Seed | The payload data served over HTTP(S) |
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)
|
xs | 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.
|
kt | Keyword Topic | Specifies a string of search keywords to search for in P2P networks, rather than a particular file
|
mt | Manifest Topic | Link to the metafile that contains a list of magneto (MAGMA – MAGnet MAnifest); i.e. a link to a list of links
|
so | Select Only | Lists specific files torrent clients should download, indicated as individual or ranges (inclusive) of file indexes.
|
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.
|
The standard also allows for application-specific experimental parameters, which must begin with "x".
Exact Topic (xt)
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. 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.
magnet:?xt.1=&xt.2=
- Tiger Tree Hash (TTH)
- These hashes are used on Direct Connect and G2 (Gnutella2), among others.
xt=urn:tree:tiger:
- Secure Hash Algorithm 1 (SHA-1)
- These hash sums are used on gnutella and G2 (Gnutella2).
xt=urn:sha1:
- 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:.
- ED2K (eDonkey2000) hash
- These hash sums are used on eDonkey2000.
xt=urn:ed2k:
- 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:
- Kazaa hash
- Used on FastTrack, these hash sums are vulnerable to hash collision attacks.
xt=urn:kzhash:
- 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.
xt=urn:btih:
- 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 xt=urn:btmh:
- Message Digest 5 (MD5)
- Supported by G2 (Gnutella2), such hashes are vulnerable to hash collision attacks.
xt=urn:md5:
Web links to the file
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.
xs=http://:/uri-res/N2R?
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://:
- 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/
- Reference to an eD2k source
xs=ed2kftp://:///
Supplement format (x.)
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.=
Clients
Client | dn | xl | xt | tr | xs | as | kt | mt | ws |
---|---|---|---|---|---|---|---|---|---|
AMule | Yes | Yes | urn:ed2k:
|
No | Unknown | Unknown | Unknown | Unknown | Unknown |
ApexDC++ | Yes | Yes | urn:bitprint: urn:tree:tiger:
|
No | dchub: | dchub: | No | No | Unknown |
BitComet | Yes | Yes | urn:btih:
|
Yes | Yes1.76
|
No | No | No | Yes1.74
|
Bitflu | Yes | No | urn:btih:
|
Yes | No | No | No | No | Unknown |
Deluge | Yes | No | urn:btih:
|
Yes | No | No | No | No | Unknown |
EiskaltDC++ | Yes | Yes | urn:tree:tiger: urn:bitprint: urn:btih: urn:btmh:
|
No | dchub: adc: adcs: |
dchub: | Yes | No | Unknown |
FlylinkDC++ | Yes | Yes | urn:tree:tiger: urn:bitprint: urn:btih:
|
No | dchub: adc: adcs: |
dchub: | Yes | No | Unknown |
gtk-gnutella | Yes | Yes | urn:sha1:
|
No | http: push: |
Yes | Yes | No | Unknown |
KTorrent | Yes | No | urn:btih:
|
Yes | No | No | No | No | Unknown |
LimeWire | Yes | Yes | urn:sha1:
|
No | http: urn:guid: |
Unknown | No | No | Unknown |
MonoTorrent | Yes | Yes | urn:btih:
|
Yes | No | Yes | No | No | Unknown |
μTorrent | Yes | No | urn:btih:
|
Yes | No | No | No | No | Yes |
qBittorrent | Yes | No | urn:btih: urn:btmh:
|
Yes | Unknown | Unknown | No | No | Unknown |
Shareaza | Yes | Yes | urn:bitprint: urn:btih: urn:ed2k: urn:md5: urn:sha1: urn:tree:tiger:
|
Yes | http: ftp: |
http: ftp: (Same priority as xs) |
Yes | No | Unknown |
Tixati | Yes | Yes | urn:btih:
|
Yes | Yes | Yes | Unknown | Unknown | Yes |
Transmission | Yes | No | urn:btih:
|
Yes | No | No | No | No | Yes |
Vuze | Yes | Yes | urn:btih: urn:sha1:
|
Yes | Yes5.7.5.0
|
Yes5.7.5.0
|
No | No | Yes |
See also
- BitTorrent
- Burnbit
- ed2k URI scheme
- InterPlanetary File System
- Metalink
- Named data networking
- Peer-to-peer
Explanatory notes
References
- "BitTorrent v2". BitTorrent. Archived from the original on 30 October 2020. Retrieved 7 September 2020.
- ^ "magnet-test.c in trunk/libtransmission; Revision 9531". Transmission. Archived from the original on 2012-02-17. Retrieved 2012-02-04.
- ^ "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.
- "libtorrent/magnet_uri.cpp at 64817e0e8793d0875fc10245de52ffb2540a223d · arvidn/libtorrent". libtorrent. Archived from the original on 2022-11-04. Retrieved 2022-11-04 – via GitHub.
- "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.
- "bep_0005.rst_post". bittorrent.org. Retrieved 2022-05-12.
- "BitTorrent v2". libbittorrent.org. libbittorrent. 2020-09-07. Archived from the original on 2022-10-22. Retrieved 2022-11-05.
- 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.
- "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.
- "magnet.c in trunk/libtransmission; Revision 9979". Transmission. Archived from the original on 2012-02-17. Retrieved 2012-02-04.
- "magnet.c in libtransmission: Commit 5c3fd1b5ccc3a8c4ab68e2c56861df31dd1c720a". Transmission. Archived from the original on 2021-09-04. Retrieved 2021-09-04.
External links
- Magnet-URI Project on SourceForge, an early definition of the format (last update 2002)
- CHK Freeware checksum utility with SHA1-Base32 and ED2K support
- RHash on SourceForge, an open source command-line tool, which can calculate magnet links
Uniform Resource Identifier (URI) schemes | |
---|---|
Official | |
Unofficial | |
Protocol list |
Peer-to-peer file sharing | |||||||
---|---|---|---|---|---|---|---|
Networks, protocols |
| ||||||
Comparisons of clients | |||||||
Hyperlinks | |||||||
Uses | |||||||
Concepts |
| ||||||
Internal technologies |