Magnet-ссылка

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Стандарт был создан в 2002 году, отчасти как обобщение, независимое от конкретных производителей программного обеспечения и проектов, URI-схемed2k:иfreenet:,использующихся сетямиeDonkey2000иFreenetсоответственно. Создание стандарта сопровождалось попыткой следовать стандартамURIотIETFнастолько, насколько это было возможно.

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

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

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

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

[править|править код]

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

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

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

Техническое описание

[править|править код]

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

Пример
magnet:?xl=Размер_в_байтах&dn=Имя_файла&xt=urn:tree:tiger:TTH-хеш_файла
Параметры
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)

[править|править код]

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

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

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

SHA-1(Secure Hash Algorithm 1)

[править|править код]

Хеш используется в сетяхGnutella,Gnutella2а также для созданиямикро-торрентаиз магнет-ссылки.

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

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

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

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

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

AICH[3](Advanced Intelligent Corruption Handler)

[править|править код]

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

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

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

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

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

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

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

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

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

CRC-32(Cyclic Redundancy Check)

[править|править код]

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

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

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

[править|править код]

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

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

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

BitTorrent Web Seed (ws)

[править|править код]

Это прямая ссылка на файл или каталог для загрузки.GetRightподдерживает загрузку по протоколам HTTP, HTTPS, FTP и FTPS. Возможно использование и других протоколов, например,RTSPилиMMS,если их поддержка реализована в клиенте.

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

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

Содержимо-адресующаяся веб ссылка
[править|править код]

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

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

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

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

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

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

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

xs=http://cache.freebase.be/Архивная копияот 3 октября 2009 наWayback Machine[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.Позволяет обойтись безторрент файла(он скачивается у полученных источников)[4].

tr=http://example /announce

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

br=192000

Расчёт:

br=[размер файла в байтах]*8 / [продолжительность аудио или видео в секундах]

Алгоритм использования в p2p клиенте:

1 Если (скорость загрузки файла меньше заданного битрейта)
то файл загружается случайным порядком;
2 Иначе
Если (скорость загрузки непрерывного участка от начала файла меньше или равна битрейту)
то файл загружается последовательно;
Иначе
файл загружается случайно;

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

[править|править код]

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

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

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

[править|править код]

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

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

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

URI-кодирование

[править|править код]

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

URLтрекера

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

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

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

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

" #[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-код в ссылке необходимо заменить все знаки «&» на «&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 (&<> ")

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

[править|править код]

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

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,добавив его адрес в начало.

Пример:

https://ivan386.github.io/#magnet:?xl=10826029&dn=mediawiki-1.15.1.tar.gz&xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJYАрхивная копияот 15 января 2015 наWayback Machine

Кликнув по такой ссылке, пользователь попадёт на страницу, которая перенаправит его на исходную magnet-ссылку. Сама magnet-ссылка при этом не отправляется в GET-запросе серверу, что делает её невидимой для провайдера и сервера. Но в социальных сетях при публикации такая ссылка может обрезаться из-за символов «#» и «:» до символа «?». В таком случае, удалив их, можно обойти это ограничение, но при этом данные magnet-ссылки уже будут передаваться в GET-запросе серверу.

Пример:

https://ivan386.github.io/magnet?xl=10826029&dn=mediawiki-1.15.1.tar.gz&xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY

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

[править|править код]

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
&tr=wss%3A%2F%2Ftracker.webtorrent.io
&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Архивная копияот 28 декабря 2021 наWayback Machine[12]
QR-кодс данной «универсальной» magnet-ссылкой

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

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

tinyurl /lr85y2g

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

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

Большинство программ-клиентов не могут корректно обработать (разобрать) универсальную ссылку и/или не поддерживают некоторые протоколы и не умеют игнорировать неподдерживаемые параметры, либо чувствительны к взаимному расположению параметров в magnet-ссылках. В таких случаях ссылку необходимо предварительно подготовить: расположить параметры в ссылке в нужном порядке и/или удалить неподдерживаемые параметры.

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

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

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

[править|править код]
Универсальные
Клиент dn xl xt as xs ws 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]
adc://[hubaddress]: [hubport]
adcs://[hubaddress]: [hubport]
dchub://[hubaddress]: [hubport]
adc://[hubaddress]: [hubport]
adcs://[hubaddress]: [hubport]
? Да Нет Нет Да Да
EiskaltDC++2.2.6 Да Да urn: tree: tiger:
urn: bitprint:
Только передача торрент клиенту:
urn: btih:
urn: btmh:
dchub://[hubaddress]: [hubport]
adc://[hubaddress]: [hubport]
adcs://[hubaddress]: [hubport]
dchub://[hubaddress]: [hubport]
adc://[hubaddress]: [hubport]
adcs://[hubaddress]: [hubport]
? Да Нет Нет Да Да
GreyLink0.39 Да Да urn: tree: tiger:
urn: bitprint:
? ? ? ? ? Нет Да Да
BitTorrent
Vuze(старое название:Azureus) 3.0 ? ? urn: btih: ? ? ? ? ? ? ? ?
LeechCraft0.5 Да Да urn: btih: ? ? ? Да ? Да Да Да
μTorrent3.4 Да Да urn: btih: ? ? http:
https:
? ? http:
udp:
Да Да
BitComet Да Да urn: btih: Нет Нет ? Нет Нет Да Да Да
Transmission(as of v2.84)[15][16] Да Нет urn: btih: Нет Нет Да Нет Нет Да Да Да
Gnutella
LimeWire Да Да urn: sha1: http:
urn: guid:
? ? Нет Нет Нет Да Да
EDonkey2000
aMule2.2.1 Да Да urn: ed2k: ? ? ? ? ? ? Возможен при помощиMLDonkeyProtocol Handler дляFireFox Да
WebTorrent (BitTorrentoverWebRTC)
instant.io Да ? urn: btih: http:
https:
? http:
https:
? ? wss:
ws:
Да Да
βTorrent (btorrent.xyz) Да ? urn: btih: http:
https:
? http:
https:
? ? wss:
ws:
Нет Да
Клиент dn xl xt as xs ws kt mt tr Перехват Вставка

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

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

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

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

  1. VKontakte Audio Download, Playlist, Artist -Title filter for Greasemonkey
  2. What is a Bitzi Bitprint?Архивная копияот 13 сентября 2009 наWayback Machine(англ.)
  3. AICHАрхивировано6 ноября 2009 года.(англ.)
  4. magnet URI formatАрхивная копияот 22 октября 2008 наWayback Machine(англ.)
  5. Битрейт * (Время прошедшее от начала загрузки)
  6. В настоящее время данный параметр распознаётся только модификациейP2P-клиентаShareazaот ivan386.
  7. ,то есть, некоторые символы должны быть заменены на %XX (%XX%XX), где XX — это код символа в кодировкеUTF-8
  8. 123456Символ допустим, но при указании прямым текстом несёт специальное синтаксическое значение
  9. MediaWikiизбегает кодирования пробела как %20, вместо этого он везде заменяется символом подчёркивания «_». Многиепоисковикизаменяют пробел на символ «+».
  10. например, когда ссылка будет отображаться пользователю простым текстом
  11. Конвертер магнита (magnet converter).Дата обращения: 15 января 2015.Архивировано15 января 2015 года.
  12. Если ссылку нахабURI кодировать, то она не будет корректно распознаватьсяDirect Connectклиентом. Поэтому она вставляется в исходном виде и только в конце magnet-ссылки
  13. Shareazaнапример
  14. Ссылка находится в предпоследнем поле xs магнет-ссылки и URI кодирована, поэтому не похожа на исходный вариант.
  15. magnet-test.c in trunk/libtransmission — Transmission.Дата обращения: 16 февраля 2010.Архивировано17 июля 2011 года.
  16. magnet.c in trunk/libtransmission — Transmission.Дата обращения: 16 февраля 2010.Архивировано17 июля 2011 года.