Magnet-ссылка

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Magnet icon

URI-схема magnet: — открытый, находящийся в стадии рабочего черновика стандарт, определяющий URI-схему т. н. magnet-ссылок, предназначенных преимущественно для указания на ресурсы, доступные к загрузке через пиринговые сети. Такие ссылки в основном идентифицируют файлы не по их расположению или имени, а по содержанию — вернее, по его хеш-коду.

Поскольку такие ссылки позволяют найти файл на основе его содержания и метаинформации, а не его фактического расположения, их можно считать разновидностью URN, а не более общего URI. Хотя magnet-ссылки могут использоваться в других сферах, они наиболее востребованы в пиринговых сетях, поскольку в таких сетях ссылка на некий ресурс не означает, что он должен быть постоянно доступен.

Стандарт был создан в 2002 году, отчасти как обобщение, независимое от конкретных производителей программного обеспечения и проектов, URI-схем ed2k: и freenet:, использующихся сетями eDonkey2000 и Freenet соответственно. Создание стандарта сопровождалось попыткой следовать стандартам URI от IETF настолько, насколько это было возможно. Magnet-ссылки поддерживаются, в частности, такими приложениями, как Shareaza, aMule, DC++, Azureus, BitSpirit, Flush, BearShare, Deluge, gtk-gnutella, Kazaa, LimeWire, Morpheus, Transmission, TrustyFiles, BitTorrent, KTorrent, μTorrent, QBittorrent, rTorrent и MLdonkey[1].

Применение[править | править вики-текст]

  1. Используются в DC++ Каталогах, где они публикуются вместе с подробным описанием файла.
  2. В BitTorrent каталогах, где публикуются как альтернативный способ загрузки вместе с подробным описанием раздачи.
  3. Для загрузки файла с сохранением его под именем, отличным от указанного в url.[2]

Поскольку не все парсеры воспринимают magnet-ссылку так же, как и любую другую URL ссылку, такие ссылки могут встречаться в текстовом виде (разбитыми на несколько строк) — в таком случае они должны быть предварительно «собраны» путём удаления переводов строки. Существуют специальные плагины для браузеров, которые позволяют воспринимать magnet-ссылку так же, как и любую другую.

Также magnet-ссылки могут распространяться в виде файлов с расширением *.magnet.

Использование хеш-кодов[править | править вики-текст]

Наиболее распространенное использование magnet-ссылок — указание на конкретный файл при помощи его уникального идентификатора, подобного ISBN, но основанного на хеш-коде содержимого файла. В отличие от других видов идентификаторов, magnet-ссылку может сгенерировать любой обладатель файла по стандартному алгоритму, благодаря чему наличие централизованной организации, отвечающей за их присвоение, не требуется.

Поскольку любое хеширование является сужающим преобразованием, теоретически возможны ситуации, в которых два разных файла будут обладать одинаковыми хеш-кодами, однако на практике они возникают исключительно редко.

Одним из преимуществ magnet-ссылок является их открытость и независимость от платформы: они могут быть использованы для загрузки файла при помощи разнообразных приложений на практически всех операционных системах. Благодаря тому, что magnet-ссылка представляет собой короткую строку текста, она может быть легко скопирована через буфер обмена, отправлена по электронной почте, при помощи программы мгновенного обмена сообщениями, SMS или службы микроблоггинга. Также существуют интернет-службы для генерации коротких ссылок из magnet-ссылок любой длины.

Техническое описание[править | править вики-текст]

Magnet-ссылка может содержать один или несколько параметров, разделенных между собой знаком '&'. Порядок следования параметров не документирован. Для некоторых значений важно положение параметра для правильного синтаксического анализа клиентом магнет-ссылки.

 magnet:?xl=[Размер в байтах]&dn=[Имя файла (URL encoded)]&xt=urn:tree:tiger:[ TTH хеш  файла (Base32) ]

Параметры[править | править вики-текст]

dn (Display Name) — Имя файла
xl (eXact Length) — Размер файла в байтах
dl (Display Length) — Отображаемый размер в байтах
xt (eXact Topic) — URN, содержащий хеш файла
as (Acceptable Source) — Веб-ссылка на файл в Интернете
xs (eXact Source) — P2P ссылка
kt (Keyword Topic) — Ключевые слова для поиска
mt (Manifest Topic) — Ссылка на метафайл, который содержит список магнетов (MAGMA)
tr (TRacker) — Адрес трекера для BitTorrent клиентов.

URN, содержащий хеш (xt)[править | править вики-текст]

Данная часть магнет-ссылки является самой главной. Именно по указанному в ней хешу производится поиск источников и проверка файла.

TTH (Tiger Tree Hash)[править | править вики-текст]

Хеш используется в сетях Direct Connect и Gnutella

 xt=urn:tree:tiger:[ TTH хеш  файла (Base32) ]

SHA-1 (Secure Hash Algorithm 1)[править | править вики-текст]

Хеш используется в сетях Gnutella, Gnutella2

 xt=urn:sha1:[ sha1 хеш  файла (Base32) ]

BitPrint[3][править | править вики-текст]

Это последовательная запись хеша SHA-1 и TTH, разделённых точкой. Хеш используется в Gnutella2. Direct Connect использует только TTH часть BitPrint

 xt=urn:bitprint:[ sha1 хеш  файла (Base32) ].[ TTH хеш  файла (Base32) ]

ED2K (EDonkey2000) Hash[править | править вики-текст]

Хеш ED2K (для файлов с размером не более 9 728 000 байт соответствует MD4) используется в EDonkey2000

 xt=urn:ed2k:[ ed2k хеш  файла (Hex) ]

AICH[4] (Advanced Intelligent Corruption Handler)[править | править вики-текст]

Неофициальный URN для магнет. eDonkey2000 клиентами пока не читается. Хеш используется в eDonkey2000 для восстановления целостности файла.

  xt=urn:aich:[ aich хеш  файла (Base32) ]

Магнет-ссылки с AICH создаёт, к примеру, Rhash (rhash --aich --magnet filename).

Kazaa Hash[править | править вики-текст]

Хеш используется в FastTrack

 xt=urn:kzhash:[ Kazaa хеш  (Hex) ]

BTIH (BitTorrent Info Hash)[править | править вики-текст]

Хеш используется в сетях BitTorrent (Azureus, µTorrent)

 xt=urn:btih:[ BTIH  (Hex) ]

MD5 (Message Digest 5)[править | править вики-текст]

Хеш используется в Gnutella2

 xt=urn:md5:[ MD5 хеш  (Hex) ]

CRC-32 (Cyclic Redundancy Check)[править | править вики-текст]

Неофициальный URN для магнет. В P2P сетях не используется.

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

Веб-ссылки на файл[править | править вики-текст]

Существует 3 вида ссылок, которые можно вставить в Magnet-ссылку.

Обычная (as)[править | править вики-текст]

Эта ссылка указывает адрес файла на обычном веб-сервере. Клиент обращается по ней не сразу, а только по прошествии некоторого времени; таким образом, эта ссылка используется только в том случае, если файл не удалось обнаружить в P2P сетях, что позволяет избежать излишней нагрузки на сервер.

 as=[веб-ссылка на файл (URL encoded)]

BitTorrent Web Seed (ws)[править | править вики-текст]

Это прямая ссылка файл или каталог для загрузки по протоколу HTTP. В данный момент загрузка по протоколу HTTPS не поддерживается ни одним известным клиентом.

 ws=[веб-ссылка на файл/каталог (URL encoded)]

P2P (xs)[править | править вики-текст]

Эта ссылка — обычно адрес файла не на сервере, а на P2P клиенте или адрес хаба (в случае DC++). По этой ссылке клиент пытается сразу соединиться и запросить файл или его источники. Данное поле обычно используется p2p клиентами для хранения источника. Ссылка может содержать хеш файла.

Content-Addressable Web URL[править | править вики-текст]

[5] Данный вид ссылки в основном используется только клиентом Shareaza.

 xs=http://[Адрес клиента]:[Порт клиента]/uri-res/N2R?[ URN содержащий хеш файла ]
Ссылка на DirectConnect хаб с источниками файла[править | править вики-текст]

По этой ссылке клиент DirectConnect сразу же соединяется с указанным хабом. Правильно работает только в raw виде в конце магнет-ссылки. Позволяет собраться качающим один тот же файл по этой магнет-ссылке на одном хабе.

 xs=dchub://[Адрес хаба]:[Порт хаба]

Для вставки в магнет-ссылку желательно использовать адрес крупного публично доступного Direct Connect хаба на котором нет ограничений по размеру шары (доступных для скачивания с клиента файлов).

Ссылка на кеш источников файла для Gnutella2[править | править вики-текст]

В данном случае ссылка указывает не на клиент, а на кеш источников. Кеш не имеет у себя файла, но записывает и выдаёт адреса тех, у кого открыт порт на раздачу и он обратился по этому адресу. Тем самым, те, кто обращался за этим файлом по этому адресу, возможно, уже получили файл и теперь могут передать его следующему запросившему. Эта система работает аналогично BitTorrent трекеру.

 xs=http://cache.freebase.be/[ sha1 хеш файла ]
Ссылка на ED2K источник[править | править вики-текст]
 xs=ed2kftp://[Адрес клиента]:[Порт клиента]/[ed2k hash]/[file size]/

Отображаемый размер (dl)[править | править вики-текст]

Магнитные ссылки ссылаются только на один файл. В некоторых DC++ клиентах есть работающая реализация ссылок на папки. Такие ссылки инвариантны относительно переименования файлов в папке, но неинвариантны относительно удаления, изменения или добавления таких файлов, как Thumbs.db, program.ini и тому подобных, поэтому более надёжный способ сослаться на папку — создать метафайл. Метафайл является файлом, его можно послать в приложении или сохранить на web-сайте, но также на него можно сослаться магнитной ссылкой, например, в чате. Однако, xl параметр такой ссылки характеризует размер метафайла, но не размер директории, что неудобно. Параметр dl характеризует именно размер директории, описываемой метафайлом. ПО, распознающее и отображающее магнитные ссылки в читабельном виде, должно отдавать предпочтение параметру dl при отображении размера. dl не является техническим параметром, влияющим на скачивание или поиск, поэтому этот параметр применим в других вариантах использования, например, в магнитных ссылках на составные раздачи BitTorrent.

Манифест (mt)[править | править вики-текст]

Это ссылка на список ссылок (файл лист). Может быть как веб-ссылкой,

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

так и URN

 mt=urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ

Совместно с остальными может использоваться для получения дополнительной информации по файлу.

Пример:

magnet:?xl=10826029&dn=mediawiki-1.15.1.tar.gz
&xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY
&mt=urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q

Данный магнет содержит данные одного файла, а часть mt содержит BTIH .torrent файла который содержит дополнительную информацию по файлу.

Ключевые слова (kt)[править | править вики-текст]

Это поле задаёт строку для поиска в P2P сетях.

 kt=martin+luther+king+mp3

Адрес трекера (tr)[править | править вики-текст]

URL трекера. Используется для получения BitTorrent источников без использования сети DHT. Позволяет обойтись без торрент файла (он скачивается у полученных источников).[6]

 tr=http://example.com/announce

Битрейт (br)[править | править вики-текст]

Скорость загрузки(битрейт) при которой части файла можно запрашивать последовательно. Загрузка последовательно происходит только в части файла от начала и до точки воспроизведения[7]. Если пир не имеет доступных частей для последовательной загрузки запрашивается случайная из другой части файла.[8]

 br=192000

Дополнение формата (x.)[править | править вики-текст]

Для самостоятельного дополнения формата неофициальными параметрами для них предусмотрен префикс 'x.'

 x.[название нового параметра]=[данные нового параметра (URL encoded)]

Группы параметров[править | править вики-текст]

Названиям параметров одной группы добавляется суффикс '.' (точка) и индекс группы.

 magnet:?xt.1=[ URN первого файла ]&xt.2=[ URN второго файла ]

Замечание[править | править вики-текст]

Некоторые программы, создающие магнет-ссылку, не кодируют специальные и национальные символы в URI представление (%20) и тем самым эти ссылки на веб-странице могут вызвать ошибки. Особенно это важно, когда ссылка, вставляемая в магнет, содержит знаки «&»; они должны быть заменены «%26».

URI Кодирование[править | править вики-текст]

Вставляемые ссылки в предназначенные для этого поля (as, xs, tr) перед этим должны быть URI-кодированы[9]

URL трекера

http://tracker.example.org/announce.php?uk=1111111111&

в магнет-ссылке должен выглядеть так

magnet:?tr=http%3A%2F%2Ftracker.example.org%2Fannounce.php%3Fuk%3D1111111111%26

Это можно сделать, воспользовавшись программой Notepad++ v5.4.5+, при помощи пункта меню TextFX -> TextFX Convert -> Encode URI Component

Кодирование URL

" #[10]  % &[10] ' * ,[10]  :[10]  ;[10] < >  ?[10] [ ^ ` { | } <пробел>
 %22  %23  %25  %26  %27  %2a  %2c  %3a  %3b  %3c  %3e  %3f  %5b  %5e  %60  %7b  %7c  %7d  %20[11]

Вставка в HTML[править | править вики-текст]

Перед вставкой в HTML-код в ссылке необходимо заменить все знаки «&» на «&amp;».

Исходный магнет

magnet:?dn=file.ext&tr=http%3A%2F%2Ftracker.example.org%2Fannounce.php%3Fuk%3D1111111111%26

при вставке в HTML-код должен выглядеть так

<a href="magnet:?dn=file.ext&amp;tr=http%3A%2F%2Ftracker.example.org%2Fannounce.php%3Fuk%3D1111111111%26">file.ext</a>

Это можно сделать, воспользовавшись программой Notepad++ v5.4.5+, при помощи пункта меню TextFX -> TextFX Convert -> Encode HTML (&<>")

Разбиение на строки[править | править вики-текст]

При необходимости разбить ссылку на строки[12], переход на новую строку лучше ставить перед знаком «&» (Амперсанд). В таком случае, встретив его в начале строки, можно легко понять, что это продолжение магнет-ссылки.

magnet:?xl=10826029&dn=mediawiki-1.15.1.tar.gz
&xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY
&xt=urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q

Публикация[править | править вики-текст]

В некоторых форумах делают специальный BBCode тег [magnet], но, если его нет, можно попробовать воспользоваться тегом [url].

При вставке магнета в тег [url] парсер форума может сделать его непригодным для использования. Чтобы обойти это ограничение, можно воспользоваться сайтом[13], который позволит сделать из магнет-ссылки url, добавив его адрес в начало.

Пример:

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

Кликнув по такой ссылке, пользователь попадёт на страницу, которая перенаправит на исходную магнет-ссылку.

Пример «универсальной» magnet-ссылки[править | править вики-текст]

Магнет-ссылка на файл 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:sha1:XRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5
&xt=urn:aich:7ZDRR3ZQW4JMHUQZUMJGQN2VNGLV3CVN
&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
&ws=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[14]
QR-код с данной «универсальной» magnet-ссылкой

Данная ссылка может быть закодирована в виде QR-кода.

Также данная ссылка может быть сокращена с помощью некоторых служб сокращения ссылок, поддерживающих URI-схему magnet:, например, TinyURL или mgnet.me (схема (протокол) http: опущен):

tinyurl.com/lr85y2g

Это может быть полезно в ряде случаев, например, при публикации magnet-ссылки в Twitter, размер сообщения в котором ограничен 140 символами, или при кодировании magnet-ссылки в виде QR-кода с целью уменьшения размера последнего.

Данная ссылка содержит необходимую информацию для возможности скачивания по ней в пяти p2p-сетях: eDonkey2000, Direct Connect, BitTorrent, Gnutella, Gnutella2. Это позволяет программам-клиентам, поддерживающим несколько p2p-сетей, осуществлять межсетевую загрузку и раздачу файлов.

Большинство программ-клиентов не могут корректно обработать (разобрать) универсальную ссылку и/или не поддерживают некоторые протоколы и не умеют игнорировать неподдерживаемые параметры, либо чувствительны к взаимному расположению параметров в magnet-ссылках. В таких случаях ссылку необходимо предварительно подготовить: расположить параметры в ссылке в нужном порядке и/или удалить неподдерживаемые параметры. Для этого, например, можно воспользоваться онлайн-конвертером magnet-ссылок, «который» позволяет разложить «универсальную» magnet-ссылку на несколько magnet-ссылок, содержащих только те параметры, которые необходимы для возможности скачивания в определённой p2p-сети.[15]

Также в ней реализована схожая с торрент-трекером система для сетей Gnutella2 и Direct Connect.

  • Клиент сети Gnutella2[16] может получить источники файла по ссылке на кеш источников http://cache.example.org/FXRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5.[17]
  • Клиент сети Direct Connect может соединиться с хабом «dchub://example.org», где может быстро найти источники файла. Но данная возможность не приветствуется пользователями и администраторами хабов, поскольку при клике на ссылку клиент автоматически соединяется с хабом, не спросив пользователя.

Особенности поддержки в клиентах[править | править вики-текст]

Универсальные
Клиент dn xl xt as xs kt mt tr Перехват Вставка
Shareaza Да Да urn:sha1:
urn:tree:tiger:
urn:bitprint:
urn:ed2k:
urn:md5:
urn:btih:
http:
ftp:
http:
ftp:
Да Нет Да Да Да
Mldonkey  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?
Direct Connect
ApexDC++ 1.0.1 Да Да urn:tree:tiger:
urn:bitprint:
dchub://[hubaddress]:[hubport] dchub://[hubaddress]:[hubport] Нет  ? Нет Да Нет
FlylinkDC++ r500 release Да Да urn:tree:tiger:
urn:bitprint:
urn:btih: (только передача торрент клиенту)
dchub://[hubaddress]:[hubport] dchub://[hubaddress]:[hubport] Да Нет Нет Да Да
EiskaltDC++ 2.2.6 Да Да urn:tree:tiger:
urn:bitprint:
dchub://[hubaddress]:[hubport] dchub://[hubaddress]:[hubport] Да  ? Нет Да Да
GreyLink 0.39 Да Да urn:tree:tiger:
urn:bitprint:
 ?  ?  ?  ? Нет Да Да
BitTorrent
Vuze (старое название: Azureus) 3.0  ?  ? urn:btih:  ?  ?  ?  ?  ?  ?  ?
LeechCraft 0.5 Да Да urn:btih:  ?  ? Да  ? Да Да Да
μTorrent 2.0 Да Да urn:btih:  ?  ?  ?  ? Да Да Да
BitComet Да Да urn: btih: Нет Нет Нет Нет Да Да Да
Transmission (as of v1.80)[18][19] Да Нет urn: btih: Нет Нет Нет Нет Да Да Да
Gnutella
LimeWire Да Да urn: sha1: http:
urn: guid:
 ? Нет Нет Нет Да Да
EDonkey2000
aMule 2.2.1 Да Да urn:ed2k:  ?  ?  ?  ?  ? Возможен при помощи MLDonkey Protocol Handler для FireFox Да
Клиент dn xl xt as xs kt mt tr Перехват Вставка

«Да» — поддерживается; «Нет» — не поддерживается; «?» — поддержка неизвестна.

DC-клиенты[править | править вики-текст]

Большинство «перехватывают» магнет-ссылку только из браузера. Поэтому текстовый магнет надо вставить в адресную строку браузера и нажать кнопку «Переход» (В браузере рядом с адресной строкой) или Enter (на клавиатуре). Для другого типа достаточно просто кликнуть мышью по ссылке. GreyLink и FlylinkDC++ позволяют вводить магнитные ссылки в клиенте («Файл → Ввести магнитную ссылку…», либо «Ctrl+M»). EiskaltDC++ позволяет передавать magnet-ссылку в качестве аргумента при запуске программы, открывать ссылку из буфера обмена («Файл → Открыть магнет-ссылку», либо «Ctrl+I») или можно просто скопировать ссылку в панель быстрого поиска и нажать Enter (на клавиатуре).

aMule 2.2[править | править вики-текст]

«воспринимает» магнет, только если его вставить в строку eD2k Link внизу клиента. Поэтому магнет-ссылку необходимо предварительно «собрать», скопировать, вставить в это поле и нажать кнопку добавить.

ED2K Хеш, размер, имя файла должны быть первыми и в этом порядке. Клиент делит ссылку. Данные о размере файла и его хеш могут быть в разных частях. Из-за этого ссылка может стать непригодной для скачивания.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. DirectConnect — MLDonkey
  2. VKontakte Audio Download, Playlist, Artist -Title filter for Greasemonkey
  3. What is a Bitzi Bitprint?  (англ.)
  4. AICH  (англ.)
  5. сохранённая копия: http://open-content.net/specs/draft-jchapweske-caw-03.html
  6. magnet URI format  (англ.)
  7. Битрейт * (Время прошедшее от начала загрузки)
  8. В настоящее время данный параметр распознаётся только модификацией P2P-клиента Shareaza от ivan386.
  9. , то есть, некоторые символы должны быть заменены на %XX (%XX%XX), где XX — это код символа в кодировке UTF-8
  10. 1 2 3 4 5 6 Символ допустим, но при указании прямым текстом несёт специальное синтаксическое значение
  11. Следует отметить, что MediaWiki избегает кодирования пробела как %20, вместо этого он везде заменяется символом подчёркивания «_». Многие поисковики заменяют пробел на символ «+».
  12. например, когда ссылка будет отображаться пользователю простым текстом
  13. Sure-Raza • Home
  14. Если ссылку на хаб URI кодировать, то она не будет корректно распознаваться Direct Connect клиентом. Поэтому она вставляется в исходном виде и только в конце магнет-ссылки
  15. http://ivan386.narod.ru/magnet-maker-online.htm#convert:magnet:?xt=urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1&xl=10826029&dn=mediawiki-1.15.1.tar.gz&xt=urn:aich:7ZD...
  16. Shareaza например
  17. Ссылка находится в предпоследнем поле xs магнет-ссылки и URI кодирована, поэтому не похожа на исходный вариант.
  18. magnet-test.c in trunk/libtransmission — Transmission
  19. magnet.c in trunk/libtransmission — Transmission

Внешние ссылки[править | править вики-текст]