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 ссылку, они могут встречаться как обычный текст (может быть разбита на несколько строк). Встретив такую ссылку, её необходимо предварительно «собрать» (удалить символы перевода строки).
[править] Использование хеш-кодов
Наиболее распространенное использование magnet-ссылок — указание на конкретный файл при помощи его уникального идентификатора, подобного ISBN, но основанного на хеш-коде содержимого файла. В отличие от других видов идентификаторов, magnet-ссылку может сгенерировать любой обладатель файла по стандартному алгоритму, потому не нужна централизованная организация, отвечающая за их присвоение.
Впрочем, технически возможна ситуация, когда два разных файла будут обладать одинаковым хеш-кодом, но статистически она крайне маловероятна.
Одно из преимуществ 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
Хеш используется в 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 (Base32) ]
[править] 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.3 | Да | Да | 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)[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»).
[править] 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 (рус.)
|
|
|
|---|---|
| Официальные | 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: |

