Torrent, cos'è e come creare un client BitTorrent

Breve guida al formato di file Torrent: cos'è, a cosa serve e com'è possibile sviluppare un'applicazione che rivesta il ruolo di client BitTorrent.
Torrent, cos'è e come creare un client BitTorrent

Quando si parla di Torrent, la mente corre subito alla diffusione non autorizzata di materiale soggetto a copyright. In realtà i file Torrent e il protocollo BitTorrent nascono per utilizzi assolutamente legittimi e rispettosi dell’altrui proprietà intellettuale.

Come abbiamo visto nell’articolo citato, BitTorrent è un protocollo di condivisione di file peer-to-peer (P2P) che consente agli utenti di scaricare e condividere file in modo efficiente. Il protocollo BitTorrent si basa su una rete decentralizzata i cui nodi, chiamati peer, corrispondono ai dispositivi dei singoli utenti. Questi condividono reciprocamente parti dei file pubblicati sulla rete.

Cosa sono i file Torrent

Per condividere un file utilizzando BitTorrent, un utente deve creare un file meta-info chiamato Torrent. Si tratta di un file di metadati che contiene informazioni sul contenuto da condividere, come l’elenco dei file inclusi, le loro dimensioni e gli hash di ciascun elemento. Gli utenti interessati a file ben precisi vanno alla ricerca di file Torrent attraverso motori o siti specializzati.

Quando un utente decide di scaricare un file, il suo client BitTorrent avvia il download del file. Il client inizia a connettersi ai peer che stanno già condividendo il file o parti di esso; durante questa fase iniziale, il client scarica pezzi del file da uno o più peer.

Dopo aver scaricato una parte del file, il client BitTorrent inizia a condividere quella parte con altri peer che stanno cercando di scaricare lo stesso file. Questo processo è noto come “seeding” mentre la fase di download delle varie porzioni di un file è chiamata “leeching“. Una tecnica chiamata “optimistic unchoking” fa sì che BitTorrente scelga periodicamente selezionano un peer casuale consentendogli di scaricare a una velocità superiore rispetto agli altri peer. Si tratta di un meccanismo previsto per massimizzare la condivisione reciproca e la diversificazione dei contenuti diffusi online.

Che cosa contengono i file Torrent

Il file Torrent ha piccole dimensioni, può essere aperto con un normale editor di testo e contiene le informazioni necessarie per scaricare un contenuto. Le informazioni includono l’elenco dei file inclusi nel torrent, i loro nomi, le dimensioni, gli hash dei pezzi e un elenco di tracker. Il file torrent ha solitamente l’estensione .torrent. I tracker sono server centralizzati che tengono traccia delle fonti che condividono il Torrent: aiutano a trovare altri peer che condividono lo stesso contenuto e coordinano il processo di download.

Il formato Torrent è largamente utilizzato nel mondo open source per condividere file, distribuzioni Linux, materiale pubblico e altro ancora. L’idea è quella di velocizzare i download rispetto all’approccio tradizionale (evitando eventuali limitazioni di banda con le connessioni stabilite verso un unico server remoto) e di promuovere la diffusione della conoscenza. Una volta pubblicato un file sulla rete BitTorrent, esso tende a diffondersi a macchia d’olio rendendone di fatto impossibile la rimozione e quindi attività di censura.

In generale, il termine Torrent può comunque riferirsi sia al file di metadati in sé che al processo di condivisione dei dati utilizzando il protocollo BitTorrent. Nell’articolo presentato in apertura, abbiamo parlato anche del futuro di Torrent e BitTorrent evidenziando che progetti come IPFS (InterPlanetary File System), quest’ultimo incentrato sulla costruzione di una soluzione di storage distribuita e decentralizzata, tendono a sostenerne l’utilizzo anche per nuovi campi applicativi e soluzioni di comunicazione innovative.

Perché creare un’applicazione basata su BitTorrent

L’architettura aperta della rete BitTorrent permette a chiunque di sviluppare applicazioni in grado di leggere il contenuto di un file Torrent e scaricare un file da un peer. Sviluppando un’applicazione BitTorrent in proprio, è possibile avere un controllo completo sulle sue funzionalità e personalizzazioni.

Creare un’applicazione capace di gestire i file Torrent può consentire le funzionalità di condivisione file all’interno di un servizio o di una piattaforma esistente. Ad esempio, una realtà che offre servizi di streaming video potrebbe integrare la condivisione attraverso la rete BitTorrent per distribuire i propri contenuti in modo più efficiente. Se si prevede la distribuzione di contenuti su larga scala o si hanno esigenze di alta capacità, con un’app BitTorrent personalizzata si può ottenere una maggiore scalabilità.

La piattaforma CodeCrafters ospita una guida ragionata per creare un sistema di trasferimento file basato su BitTorrent. La pagina Build your own BitTorrent offre tutti gli strumenti destinati agli sviluppatori per gestire i vari aspetti del protocollo BitTorrent: dai dettagli tecnici dei file Torrent alla comunicazione con i tracker, ai protocolli di comunicazione tra peer.

Cos’è bencode

Bencode è un formato di serializzazione binaria utilizzato all’interno del protocollo BitTorrent per rappresentare dati strutturati. Sviluppato da Bram Cohen, il creatore di BitTorrent, Bencode è progettato per essere semplice, compatto ed efficiente nella trasmissione dei dati su reti peer-to-peer.

I dati bencoded sono organizzati in diverse strutture, tra cui stringhe, interi, liste e dizionari. Le stringhe bencoded sono sequenze di caratteri ASCII: sono precedute dalla lunghezza della stringa seguita dal carattere “:”. Ad esempio 4:ciao rappresenta una stringa di 5 caratteri contenente “ciao”.

Gli interi bencoded sono rappresentati come sequenze di cifre ASCII, con un prefisso “i” e un suffisso “e”. Ad esempio, i42e rappresenta l’intero 42.

Le liste bencoded sono racchiuse tra parentesi quadre e contengono una serie di elementi, che possono essere di diversi tipi (stringhe, interi, liste o dizionari). I dizionari bencoded, infine, sono racchiusi tra parentesi graffe e contengono coppie chiave-valore, dove le chiavi sono stringhe.

Bencode è utilizzato per strutturare le informazioni nei file Torrent, compresi i dettagli del file, gli hash e le informazioni su tracker e peer. Quando un client BitTorrent scarica un file Torrent, provvede ad analizzarne il contenuto utilizzando la codifica Bencode al fine di ottenere tutte le informazioni necessarie per avviare il download del file desiderato.

Cosa c’è da sapere per sviluppare un client BitTorrent

La guida per il programmatore di CodeCrafters inizia con la presentazione delle attività di decodifica degli elementi bencoded quindi affronta il tema dell’estrazione dei dati dal file Torrent, la gestione dell’hash univoco utilizzato nelle comunicazioni con tracker e peer, l’individuazione di peer con la mediazione del tracker, ovvero del server che matinene traccia dei peer coinvolti nella condivisione. Per scoprire i peer da cui scaricare un file, è sufficiente impostare e avanzare una semplice richiesta GET via HTTP.

Le fasi successive hanno a che fare con la procedura di handshake con i peer, il download dei singoli pezzi di file e dell’intero file. Queste ultime due operazioni prevedono una verifica finale mediante l’utilizzo dell’algoritmo di hashing SHA-1 al fine di controllare che le porzioni di file scaricate siano integre.

Attenzione ai file che si condividono e che si scaricano

L’utilizzo di BitTorrent per la condivisione di materiale soggetto a copyright non è ammesso. Poiché “tutti i bit sono creati uguali” e la rete BitTorrent è semplicemente un mezzo di comunicazione, è bene diffidare da tutti quei provider che, in spregio del principio della neutralità della rete, limitano la velocità della rete con alcuni protocolli specifici.

Il tema della sicurezza dei file condivisi tramite Torrent, tuttavia, è assolutamente cruciale. La condivisione senza limiti e senza verifiche di qualunque genere di contenuto, obbliga gli utenti a elevare il livello di attenzione. Scegliere sempre fonti affidabili e con una buona reputazione per i download, leggere i commenti, effettuare una scansione approfondita dei file scaricati sono passaggi essenziali per evitare di incappare, ad esempio, in oggetti che integrano malware, spyware e ransomware.

I file eseguibili sono ovviamente quelli che devono destare maggiore attenzione ma anche file ISO non ufficiali scaricate tramite BitTorrent possono contenere elementi dannosi. Allo stesso modo, file non eseguibili prelevati da Torrent potrebbero comunque contenere codice malevolo sviluppato per far leva sulle vulnerabilità irrisolte (ad esempio perché l’utente non ha installato le patch correttive) delle quali soffrono le applicazioni usate per gestire gli stessi file.

In ogni caso, quando si utilizza un client BitTorrent è essenziale assicurarsi di scaricare e condividere solo materiale che non è soggetto a diritti altrui. Anche perché le sanzioni per chi condivide materiale coperto dal diritto d’autore senza averne alcun titolo sono state recentemente inasprite, con un ruolo diretto di AGCOM (Autorità per le Garanzie nelle Comunicazioni) sia per chi scarica che per chi, a sua volta, condivide.

Ti consigliamo anche

Link copiato negli appunti