Magnet-ссылка

Материал из MyDC's Wiki

Перейти к: навигация, поиск

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

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

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

Содержание

Применение

На данный момент чаще всего используются на DC++ порталах, где они публикуются вместе с подробным описанием файла.

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

Использование хеш-кодов

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

Стоит отметить, что технически возможна ситуация, когда два файла будут обладать одинаковым хеш-кодом, но статистически она крайне маловероятна, см. статью «Коллизия хэш-функции».

Одно из преимуществ 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[2]

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

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

ED2K (EDonkey2000) Hash

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

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

AICH[3] (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  (Base32) ]

MD5 (Message Digest 5)

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

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

CRC-32 (Cyclic Redundancy Check)

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

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

Веб-ссылки на файл

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

Обычная (as)

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

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

P2P (xs)

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

Content-Addressable Web URL

[4] Данный вид ссылки в основном используется только клиентом 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. Позволяет обойтись без торрент файла (он скачивается у полученных источников).[5]

 tr=http://example.com/announce

Дополнение формата (x.)

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

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

Группы параметров

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

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

Замечание

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

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

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

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

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

Вставка в 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 (&<>»)

Разбиение на строки

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

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

Публикация

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

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

Пример:

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

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

Пример

Магнет-ссылка на файл 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
&xs=http%3A%2F%2Fcache.example.org%2FXRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5
&xs=dchub://example.org[11]

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

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

Особенности поддержки в клиентах

Универсальные
Клиент 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++ r398 release Да Да 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.3 Да Да urn:btih:  ?  ? Да  ? Да Да Да
μTorrent 2.0 Да Да urn:btih:  ?  ?  ?  ? Да Да Да
BitComet Да Да urn: btih: Нет Нет Нет Нет Да Да Да
Transmission (as of v1.80) [14][15] Да Нет 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 позволяет вводить магнитные ссылки в клиенте («Файл → Ввести магнитную ссылку…», либо «Ctrl+M»).

aMule 2.2

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

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

См. также

Примечания

  1. DirectConnect - MLDonkey
  2. What is a Bitzi Bitprint? (англ.)
  3. AICH (англ.)
  4. сохранённая копия: http://open-content.net/specs/draft-jchapweske-caw-03.html
  5. magnet URI format (англ.)
  6. , то есть, некоторые символы должны быть заменены на %XX (%XX%XX), где XX — это код символа в кодировке UTF-8
  7. 7,0 7,1 7,2 7,3 7,4 7,5 Символ допустим, но при указании прямым текстом несёт специальное синтаксическое значение
  8. Следует отметить, что MediaWiki избегает кодирования пробела как %20, вместо этого он везде заменяется символом подчёркивания „_“. Многие поисковики заменяют пробел на символ „+“.
  9. например, когда ссылка будет отображаться пользователю простым текстом
  10. Sure-Raza • Home
  11. Если ссылку на хаб URI кодировать то она не будет корректно распознаваться Direct Connect клиентом поэтому она вставляется в исходном виде и только в конце магнет-ссылки
  12. Shareaza например
  13. Ссылка находится в предпоследнем поле xs магнет-ссылки и URI кодирована, поэтому не похожа на исходный вариант.
  14. magnet-test.c in trunk/libtransmission — Transmission
  15. magnet.c in trunk/libtransmission — Transmission

Ссылки

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
RusHub
Инструменты
Портал