Magnet-ссылка
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 и MLdonkey[1].
Содержание
|
[править] Применение
- используются в DC++ Каталогах, где они публикуются вместе с подробным описанием файла.
- в BitTorrent каталогах, где публикуются как альтернативный способ загрузки вместе с подробным описанием раздачи.
- для загрузки файла с сохранением его под именем, отличным от указанного в url.[2]
Поскольку не все парсеры воспринимают магнет-ссылку так же, как и любую другую URL ссылку, они могут встречаться как обычный текст (может быть разбита на несколько строк). Встретив такую ссылку, её необходимо предварительно «собрать» (удалить символы перевода строки). Однако существуют специальные плагины для браузеров, которые позволяют воспринимать магнет-ссылку так же, как и любую другую URL ссылку.
[править] Использование хеш-кодов
Наиболее распространенное использование magnet-ссылок в указание на конкретный файл при помощи его уникального идентификатора, подобного ISBN, но основанного на хеш-коде содержимого файла. В отличие от других видов идентификаторов, magnet-ссылку может сгенерировать любой обладатель файла по стандартному алгоритму, потому не нужна централизованная организация, отвечающая за их присвоение.
Впрочем, технически возможна ситуация, когда два разных файла будут обладать одинаковым хеш-кодом, но статистически она крайне маловероятна.
Одно из преимуществ magnet-ссылок в их открытость и независимость от платформы: ссылка может быть использована для загрузки файла при помощи разнообразных приложений на практически всех операционных системах. Благодаря тому, что magnet-ссылка представляет собой короткую строку текста, пользователи могут использовать обычные операции копирования-вставки и отправить ее по электронной почте, программе мгновенного обмена сообщениями, а также с помощью SMS или службы микроблоггинга, например, Twitter (в которых действует ограничение до 140 символов на одно сообщение). Также существуют интернет-службы для генерации коротких ссылок из 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
xt=urn:kzhash:[ Kazaa хеш (Hex) ]
[править] BTIH (BitTorrent Info Hash)
Хеш используется в сетях BitTorrent (Azureus, µTorrent)
xt=urn:btih:[ BTIH (HEX) ]
[править] MD5 (Message Digest 5)
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
[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
[править] Дополнение формата (x.)
Для самостоятельного дополнения формата неофициальными параметрами для них предусмотрен префикс 'x.'
x.[название нового параметра]=[данные нового параметра (URL encoded)]
[править] Группы параметров
Названиям параметров одной группы добавляется суффикс '.' (точка) и индекс группы.
magnet:?xt.1=[ URN первого файла ]&xt.2=[ URN второго файла ]
[править] Замечание
Некоторые программы, создающие магнет-ссылку, не кодируют специальные и национальные символы в URI представление (%20) и тем самым эти ссылки на веб-странице могут вызвать ошибки. Особенно это важно, когда ссылка, вставляемая в магнет, содержит знаки «&»; они должны быть заменены «%26».
[править] URI Кодирование
Вставляемые ссылки в предназначенные для этого поля (as, xs, tr) перед этим должны быть URI-кодированы[7]
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
| " | #[8] | % | &[8] | ' | * | ,[8] | :[8] | ;[8] | < | > | ?[8] | [ | ^ | ` | { | | | } | <пробел> |
| %22 | %23 | %25 | %26 | %27 | %2a | %2c | %3a | %3b | %3c | %3e | %3f | %5b | %5e | %60 | %7b | %7c | %7d | %20[9] |
[править] Вставка в HTML
Перед вставкой в HTML код в ссылке необходимо заменить все знаки «&» на «&».
Исходный магнет
magnet:?dn=file.ext&tr=http%3A%2F%2Ftracker.example.org%2Fannounce.php%3Fuk%3D1111111111%26
при вставке в HTML код должен выглядеть так
<a href="magnet:?dn=file.ext&tr=http%3A%2F%2Ftracker.example.org%2Fannounce.php%3Fuk%3D1111111111%26">file.ext</a>
Это можно сделать, воспользовавшись программой Notepad++ v5.4.5+, при помощи пункта меню TextFX -> TextFX Convert -> Encode HTML (&<>")
[править] Разбиение на строки
При необходимости разбить ссылку на строки[10], переход на новую строку лучше ставить перед знаком «&» (Амперсанд). В таком случае, встретив его в начале строки, можно легко понять, что это продолжение магнет-ссылки.
magnet:?xl=10826029&dn=mediawiki-1.15.1.tar.gz &xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY &xt=urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q
[править] Публикация
В некоторых форумах делают специальный BBCode тег [magnet], но, если его нет, можно попробовать воспользоваться тегом [url].
При вставке магнета в тег [url] парсер форума может сделать его непригодным для использования. Чтобы обойти это ограничение, можно воспользоваться сайтом[11], который позволит сделать из магнет-ссылки 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[12]
Данная ссылка содержит необходимую информацию для возможности скачивания по ней в пяти p2p-сетях: eDonkey2000, Direct Connect, BitTorrent, Gnutella, Gnutella2
Также в ней реализована схожая с торрент трекером система для сетей Gnutella2 и Direct Connect.
- Клиент сети Gnutella2[13] может получить источники файла по ссылке на кеш источников http://cache.example.org/FXRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5.[14]
- Клиент сети 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)[15][16] | Да | Нет | 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 Хеш, размер, имя файла должны быть первыми и в этом порядке. Клиент делит ссылку. Данные о размере файла и его хеш могут быть в разных частях. Из-за этого ссылка может стать не пригодной для скачивания.
[править] См. также
- Интернет каталог файлов
- Список файлов (Direct Connect)
- Коллекция (Shareaza)
- Коллекция (eMule)
- Metalink
- MAGMA
- DHT
[править] Примечания
- в‘ DirectConnect в MLDonkey
- в‘ VKontakte Audio Download, Playlist, Artist -Title filter for Greasemonkey
- в‘ What is a Bitzi Bitprint? (англ.)
- в‘ AICH (англ.)
- в‘ сохранённая копия: http://open-content.net/specs/draft-jchapweske-caw-03.html
- в‘ magnet URI format (англ.)
- в‘ , то есть, некоторые символы должны быть заменены на %XX (%XX%XX), где XX в это код символа в кодировке UTF-8
- в‘ 1 2 3 4 5 6 Символ допустим, но при указании прямым текстом несёт специальное синтаксическое значение
- в‘ Следует отметить, что MediaWiki избегает кодирования пробела как %20, вместо этого он везде заменяется символом подчёркивания «_». Многие поискоЭнцикло заменяют пробел на символ «+».
- в‘ например, когда ссылка будет отображаться пользователю простым текстом
- в‘ Sure-Raza Home
- в‘ Если ссылку на хаб URI кодировать то она не будет корректно распознаваться Direct Connect клиентом поэтому она вставляется в исходном виде и только в конце магнет-ссылки
- в‘ Shareaza например
- в‘ Ссылка находится в предпоследнем поле xs магнет-ссылки и URI кодирована, поэтому не похожа на исходный вариант.
- в‘ magnet-test.c in trunk/libtransmission в Transmission
- в‘ magnet.c in trunk/libtransmission в Transmission
[править] Внешние ссылки
- Формат магнет-ссылки для BitTorrent (англ.)
- MAGNET v0.1 спецификация magnet-ссылок (англ.)
- Спецификация по магнет-ссылкам на сайте Depthstrike Entertainment (англ.)
- Сайт проекта MAGNET-URI (англ.)
- Простая инструкция, как скачивать файлы по Magnet-ссылкам популярным клиентом µTorrent (рус.)
- Поддержка Magnet-ссылок в FireFox (рус.)
| Схемы URI | |
|---|---|
| Официальные | aaa: aaas: acap: cap: cid: crid: data: dav: dict: dns: fax: file: ftp: go: gopher: h323: http: https: im: imap: ldap: mailto: mid: news: nfs: nntp: pop: pres: rtsp: sip: sips: snmp: tel: telnet: urn: wais: xmpp: |
| Неофициальные | about: aim: bolo: btc: bzr: callto: chrome: cvs: daap: ed2k: ed2kftp: feed: fish: git: gizmoproject: iax2: irc: ircs: lastfm: ldaps: magnet: mms: msnim: psyc: rsync: secondlife: skype: ssh: svn: sftp: smb: sms: soldat: steam: unreal: ut2004: view-source: vzochat: webcal: xfire: ymsgr: |

