zbigz utorrent track stable magnet link linea gamestorrents downloads descargar como bittorrent magnet-uri

bittorrent - track - utorrent web



¿Cómo funcionan los enlaces de imán de BitTorrent? (6)

Cuando comencé a responder tu pregunta, no me di cuenta de que estabas preguntando cómo funciona el esquema de imán. Solo pensé que quería saber cómo se generaron las partes relevantes para el protocolo bittorrent.

El hash enumerado en el imán uri es el hash de información del torrente codificado en base32. El hash de información es el hash sha1 del bloque de información bencode del torrent.

Este código python demuestra cómo se puede calcular.

Escribí una implementación (muy ingenua) de C # para probar esto, ya que no tenía un bencoder a la mano y coincide con lo que se espera del cliente.

static string CalculateInfoHash(string path) { // assumes info block is last entry in dictionary var infokey = "e4:info"; var offset = File.ReadAllText(path).IndexOf(infokey) + infokey.Length; byte[] fileHash = File.ReadAllBytes(path).Skip(offset).ToArray(); byte[] bytes; using (SHA1 sha1 = SHA1.Create()) bytes = sha1.ComputeHash(fileHash, 0, fileHash.Length - 1); // need to remove last ''e'' to compensate for bencoding return String.Join("", bytes.Select(b => b.ToString("X2"))); }

Según tengo entendido, este hash no incluye ninguna información sobre cómo localizar el rastreador, el cliente necesita encontrarlo a través de otros medios (se proporciona la URL anunciada). Esto es lo que distingue un torrente de otro en el rastreador.

Todo lo relacionado con el protocolo bittorrent todavía gira en torno al rastreador. Todavía es el principal medio de comunicación entre el enjambre. El esquema de imán uri no fue diseñado específicamente para el uso de bittorrent. Es utilizado por cualquier protocolo P2P como una forma alternativa de comunicación. Clientes de Bittorrent adaptados para aceptar enlaces magnet como otra forma de identificar torrents de esa manera ya no es necesario descargar archivos .torrent. El imán uri aún necesita especificar el controlador para localizarlo, de modo que el cliente pueda participar. Puede contener información sobre otros protocolos pero es irrelevante para el protocolo bittorrent. El protocolo bittorrent finalmente no funcionará sin los rastreadores.

Por primera vez utilicé un enlace de imán . Curioso acerca de cómo funciona, busqué las especificaciones y no encontré ninguna respuesta. El wiki dice que xt significa "tema exacto" y es seguido por el formato ( btih en este caso) con un hash SHA1. Vi que se mencionaba a base32, sabiendo que son 5 bits por personaje y 32 caracteres, encontré que tiene exactamente 160 bits, que es exactamente del tamaño de SHA1.

No hay espacio para una dirección IP ni nada, solo es un SHA1. Entonces, ¿cómo el cliente de BitTorrent encuentra el archivo real? Activé URL Snooper para ver si visita una página (usando TCP) o realiza una búsqueda o algo similar, pero no pasó nada. No tengo idea de cómo el cliente encuentra compañeros. ¿Como funciona esto?

Además, ¿qué es el hash de? ¿Es un hash de una matriz de todos los hash de archivos juntos? Tal vez es necesario un hash del archivo torrent real (quitando cierta información)?

En una máquina virtual, probé un enlace de imán con uTorrent (que estaba recién instalado) y logré encontrar compañeros. ¿De dónde vino el primer par? Era fresco y no había otros torrentes.


El descubrimiento de pares y el descubrimiento de recursos (archivos en su caso) son dos cosas diferentes.

Estoy más familiarizado con JXTA, pero todas las redes de igual a igual trabajan con los mismos principios básicos.

Lo primero que debe suceder es el descubrimiento entre pares.

Peer Discovery

La mayoría de las redes p2p son redes "sembradas": cuando se inicia por primera vez, un interlocutor se conectará a una dirección conocida (codificada) para recuperar una lista de compañeros en ejecución. Puede ser siembra directa, como conectarse a dht.transmissionbt.com como se menciona en otra publicación o siembra indirecta, como suele hacerse con JXTA, donde el par se conecta a una dirección que solo entrega una lista de texto simple de las direcciones de red de otros pares.

Una vez que se establece la conexión con los primeros (pocos) pares, el par de conexión realiza un descubrimiento de otros pares (mediante el envío de solicitudes) y mantiene una tabla de ellos. Dado que el número de otros pares puede ser enorme, el par de conexión solo mantiene parte de una Tabla Hash Distribuida (DHT) de los pares. El algoritmo para determinar qué parte de la tabla debe mantener el par de conexión varía según la red. BitTorrent usa Kademlia con identificadores / claves de 160 bits.

Descubrimiento de recursos

Una vez que algunos pares han sido descubiertos por el par que los conecta, este último envía algunas solicitudes para descubrirles los recursos. Los enlaces Magnet identifican esos recursos y están construidos de tal manera que son una "firma" para un recurso y garantizan que identifiquen de manera única el contenido solicitado entre todos los pares. El par de conexión enviará una solicitud de descubrimiento para el enlace / recurso de imán a los pares a su alrededor. El DHT está construido de tal forma que ayuda a determinar qué compañeros se deben preguntar primero por el recurso (lea en Kademlia en Wikipedia para obtener más información). Si el par solicitado no retiene el recurso solicitado, por lo general "transferirá" la consulta a otros pares extraídos de su propia DHT.

El número de "saltos" por los que se puede pasar la consulta suele ser limitado; 4 es un número habitual con redes de tipo JXTA.

Cuando un par posee el recurso, responde con todos sus detalles. El par de conexión se puede conectar al par que contiene el recurso (directamente o a través de un relé, no entraré en detalles aquí) y comenzar a buscarlo.

Los recursos / servicios en las redes P2P no están conectados directamente a las direcciones de red: se distribuyen y esa es la belleza de estas redes altamente escalables.


Tenía curiosidad por la misma pregunta yo mismo. Leyendo el código para la transmisión, encontré lo siguiente en libtrnasmission/tr-dht.c :

3248: bootstrap_from_name( "dht.transmissionbt.com", 6881, bootstrap_af(session) );

Lo intenta 6 veces, esperando 40 (!) Segundos entre intentos. Supongo que puede probarlo eliminando los archivos de configuración ( ~/.config/transmission en Unix) y bloqueando todas las comunicaciones a dht.transmissionbt.com , y vea qué sucede (espere al menos 240 segundos).

Entonces parece que el cliente tiene un nodo de arranque incorporado para comenzar. Por supuesto, una vez que ha entrado en la red, ya no necesita ese nodo de arranque.


Un enlace de imán de BitTorrent identifica un torrente utilizando 1 un SHA-1 o valor de hash SHA-256 truncado conocido como "infohash". Este es el mismo valor que utilizan los compañeros (clientes) para identificar los torrentes cuando se comunican con los rastreadores u otros pares. Un archivo .torrent tradicional contiene una estructura de datos con dos claves de nivel superior: announce , identificar el (los) rastreador (es) a usar para la descarga e info contiene los nombres de archivo y los hashes para el torrente. El "infohash" es el hash de los datos de info codificada.

Algunos enlaces magnet incluyen rastreadores o semillas web, pero a menudo no lo hacen. Su cliente puede no saber nada sobre el torrente a excepción de su infohash. Lo primero que necesita es encontrar otros pares que descarguen el torrente. Hace esto usando una red 2 de igual a igual que opera una "tabla hash distribuida" (DHT). Un DHT es un gran índice distribuido que asigna torrentes (identificados por infohashes) a listas de pares (identificadas por dirección IP y puertos) que participan en un enjambre para ese torrente (cargando / descargando datos o metadatos).

La primera vez que un cliente se une a la red DHT, genera una identificación aleatoria de 160 bits del mismo espacio que las infohashes. A continuación, inicia su conexión a la red DHT utilizando direcciones codificadas de clientes controlados por el desarrollador del cliente o clientes compatibles con DHT que se encontraron anteriormente en un enjambre de torrents. Cuando quiere participar en un enjambre para un torrente dado, busca en la red DHT a otros clientes cuyos ID son lo más cercanos posible al infohash. Notifica a estos clientes que les gustaría participar en el enjambre y les pide la información de conexión de todos los compañeros que ya conocen y que participan en el enjambre.

Cuando los compañeros están cargando / descargando un torrente en particular, intentan hablar entre ellos sobre todos los otros compañeros que conocen que están participando en el mismo enjambre de torrente. Esto permite que los compañeros se conozcan entre sí rápidamente, sin someter a un rastreador o DHT a solicitudes constantes. Una vez que haya aprendido de algunos pares del DHT, su cliente podrá pedirles a esos pares la información de conexión de aún más compañeros en el enjambre de torrents, hasta que tenga todos los compañeros que necesita.

Finalmente, podemos pedirles a estos colegas los metadatos de info del torrente, que contienen los nombres de los archivos y la lista de hash. Una vez que hemos descargado esta información y verificado que es correcta usando el infohash conocido, estamos prácticamente en la misma posición que un cliente que comenzó con un archivo .torrent regular y obtuvo una lista de pares del rastreador incluido.

La descarga puede comenzar.

1 El infohash suele estar codificado de forma hexadecimal, pero algunos clientes anteriores usaron la base 32 en su lugar. v1 ( urn:btih: usa el resumen SHA-1 directamente, mientras que v2 ( urn:bimh: agrega un prefijo multihash para identificar el algoritmo hash y la duración del resumen.
2 Hay dos redes principales de DHT: la DHT "principal" más simple y un protocolo más complicado utilizado por Azureus.
3 La distancia se mide con XOR.

Otras lecturas


la lista de pares probablemente esté poblada del torrente que actualiza el cliente (por ejemplo, hay un torrent para utorrent que lo actualiza). siempre y cuando todos estén utilizando el mismo cliente, debería ser bueno porque no tiene más remedio que compartir la actualización.


Finalmente encontré la especificación. Por primera vez, Google no me ayudó . (wiki vinculado a bittorrent.com que es el sitio principal.) Hice clic en el enlace de desarrolladores, observe la pestaña bittorrent.org a la derecha, luego fue fácil desde allí. Es difícil encontrar enlaces cuando no tiene idea de lo que están etiquetados y muchos clics de distancia).

Parece que todos los torrents tienen una red de pares. Encuentra pares de rastreadores y los mantiene entre las sesiones. La red te permite encontrar compañeros y otras cosas. No he leído cómo se usa con enlaces de imán, pero parece que no está definido cómo un cliente nuevo encuentra compañeros. Tal vez algunos están integrados, o usan su servidor doméstico o rastreadores conocidos insertados en el cliente para obtener el primer par en la red.