# Magnet

Los enlaces magnéticos (del inglés magnet links), también llamados enlaces magnet, enlaces magneto o simplemente magnet, son un tipo de enlace utilizado normalmente para identificar un contenido sin tener que especificar su nombre o su ubicación sino sólo uno o más valores hash obtenidos a partir de funciones hash criptográficas. De una forma más técnica podemos decir que un enlace magnético es un esquema URI para definir hipervínculos que normalmente usa una URN para enlazar (ya que hace referencia a un archivo basado en su contenido o metadato, y no en su ubicación como hacen las URL).
Aunque puede ser utilizado para otras aplicaciones, es particularmente útil en el contexto del peer-to-peer, porque permite que los recursos sean enlazados sin tener un servidor disponible de forma permanente. El hipervínculo describe un fichero específico de una red peer-to-peer, el cual puede ser descargado con un programa peer-to-peer compatible.
Es un estándar abierto publicado bajo la GPL. Según sus creadores, los enlaces magnet proporcionan una mayor integración en las páginas web que los programas peer-to-peer que los implementan.
Para representar este tipo de enlaces se usa el icono .

## Motivación

Uno de los sistemas más usados para la descarga de contenidos es el BitTorrent. En este sistema el fichero que permite descargar el contenido (fichero .torrent) es un archivo que contiene una serie de campos entre los que se encuentra: el nombre del archivo, la información que describe los distintos fragmentos (pieces) que hay que descargar, la URL del tracker a usar (pueden ser varios), un valor hash que permite identificar el fichero y verificar su estado de corrupción.
El valor hash se calcula a partir de un código de detección de manipulaciones e identifica un fichero ya que el valor hash es generado a partir de su contenido y además es difícil generar ficheros que tengan el mismo valor hash (colisiones). Además, ese valor hash puede ser usado para verificar que el fichero descargado no ha sido corrompido durante la transferencia, de forma que el usuario puede estar seguro de que el fichero es exactamente el mismo que él quería descargarse.
La propuesta de los enlaces magnéticos es usar solo el valor hash, que nos permite identificar y verificar el fichero, para buscar los contenidos. De esta forma es un programa especial (buscador de los valores hash) el que permite acceder al contenido.
Debido a que este tipo de enlaces son solo enlaces y no tienen ningún tipo de archivo ni buscador o tracker asociado a ellos, en algunas webs dedicadas a favorecer la descarga de ficheros se ha decidido potenciar el uso de enlaces magnéticos para de esta forma dificultar cualquier intento de cierre del sitio por vía legal. El caso más destacado es el caso The Pirate Bay que desde el 29 de febrero de 2012 ha dado de baja su tracker y ahora acepta únicamente enlaces magnéticos en lugar de .torrents. De esta forma la web solo publicará los enlaces, dejando el trabajo de descarga a las aplicaciones pertinentes.
Pero no solo da más seguridad jurídica al que proporciona los enlaces sino también a los usuarios. Con los enlaces magnéticos no es necesario que el usuario se baje ningún archivo, lo cual puede ser argumento probatorio de que se han descargado ciertos contenidos, solo han de hacer click en un enlace o copiarlo de la web y pegarlo en el cliente que se encargue de la descarga.
Los enlaces magnéticos son mucho más pequeños que los enlaces .torrent. Esto es muy útil ya que por ejemplo se requiere mucho menos ancho de banda para levantar un sitio proxy que pueda saltar bloqueos de ISPs. La no necesidad del tracker y el menor tamaño de los enlaces convierten a los sitios que los proporcionan en plataformas mucho más portátiles y fáciles de rearmar en caso de emergencia.
Por otro lado los enlaces magnéticos proporcionan un formato uniforme para enlazar a ficheros accesibles de muy distintas formas. Por ejemplo a través de la World Wide Web o en alguna red peer-to-peer.

## Formato

El formato de los enlaces magnéticos comienzan con:
A continuación vienen una serie de uno o más parámetros, cuyo orden es irrelevante, formateado de la misma forma que el query string de la misma forma que los parámetros de las URL http (comienzan por ?, usan el = para separar el parámetro de su valor y utilizan & para separar unos parámetros de otros).
* El parámetro más común es 'xt' (exact topic) cuyo valor normalmente es una URN en la que se especifica el código de detección de modificaciones utilizado y el valor hash obtenido para el fichero. En las URN utilizadas en los enlaces magnéticos se pueden utilizar distintos tipos de funciones hash:

#### SHA-1.

   * El valor está en Base32. Es usado por ejemplo por Gnutella y Gnutella2, también por Ares Galaxy. Ejemplo:

#### TTH

   * El valor está en Base32. Es usado por ejemplo por Gnutella2 y Direct Connect. Ejemplo:

#### BitPrint

   * Consiste en SHA-1 seguido por TTH separados por un punto. El valor está en Base32. Es usado por ejemplo por Gnutella2 y por Shareaza). Ejemplo:

#### eD2k

   * El valor está en hexadecimal. Es usado por los clientes de la red eDonkey como eDonkey2000 y eMule. Ejemplo:

#### AICH (Advanced Intelligent Corruption Handler)

   * El valor está en Base32. Usado por eDonkey2000. Ejemplo:

#### FastTrack

   * El valor está en hexadecimal. Esta función hash es vulnerable a colisiones. Fue usado en Kazaa pero solo tuvo capacidad para exportar el magnet en sus últimas versiones. Ejemplo:

#### BTIH (BitTorrent Info Hash)

   * El valor está en Base32. Es la codificación en Base32 de la aplicación de SHA-1 sobre la sección "info" de un metafile BitTorrent. Usado por BitTorrent para identificar ficheros o conjuntos de ficheros descargables. Ejemplo:

#### MD5

   * Es vulnerable a colisiones. Es usado por Gnutella2. Ejemplo:
* El parámetro dn (display name) permite indicar el nombre del fichero. No se pueden meter espacios en blanco. Si los tiene se sustituyen por '%20'.
* El parámetro xl (eXact Length) permite indicar el tamaño en bytes.
* El parámetro as (Acceptable Source) permite indicar enlace web alternativo al fichero.
* El parámetro xs (eXact Source) permite indicar exactamente de donde y con qué protocolos se puede descargar el fichero. Puede ser de cualquier tipo y puede contener el valor hash del fichero. Ejemplos:
* El parámetro kt (Keyword Topic) permite indicar palabras clave para las búsquedas. Ejemplo:
* El parámetro mt (Manifest Topic) permite indicar enlace (URL o URN) a fichero metafile que contienen una lista de enlaces magnéticos. Ejemplos:
    El formato MAGnet MAnifest (.magma) permite definir listas de enlaces magnéticos. Ejemplo:
* El parámetro tr (address TRacker) permite indicar un rastreador para descargas BitTorrent. Ejemplo:
* El prefijo x (eXpermiental) seguido de una otra letra se usa para poder definir parámetros experimentales y opciones complementarias.
Se pueden especificar varios valores de un parámetro añadiendo un contador precedido de un punto. Ejemplo:

## Soporte

Algunos programas peer-to-peer que soportan enlaces magnet son: Ares, aMule, BitComet, BitSpirit, BitTorrent, DC++, Deluge, FrostWire, gtk-gnutella, KTorrent, LimeWire, FrostWire, MLDonkey, Morpheus, qBittorrent, Shareaza, Transmission, µTorrent y Vuze.
Algunos gestores de descargas, como jDownloader o FlashGet, permiten descargar ficheros a partir de enlaces magnéticos.