Krempel via Torrent

Eine Einleitung

Intro

BitTorrent ist ein Protokoll, welches Dateien direkt zwischen den Teilnehmern austauscht, auch schon während die Dateien nur unvollständig vorhanden sind - wenn eine vollständige Kopie im Netzwerk vorhanden ist, auch nachdem die Quelle aus dem Netzwerk verschwindet. Das macht es besonders geeignet für die schnelle und verlässliche Verteilung von großen (oder auch kleinen) Dateien.

Das Bereitstellen von eigenen Dateien gestaltet sich aufgrund einiger Eigenheiten etwas aufwändiger als bei manchen anderen Protokollen, weshalb dieses Dokument eine kurze Anleitung geben soll.

Begriffe
Client - Software, die BitTorrent spricht
Tracker - Adressvermittlungsserver
Leecher - Client der eine Datei anfordert
Seeder - Client der eine Datei anbietet bzw. vollständig vorliegen hat
Peer - Verbindungspartner (Seeder oder Leecher)

Protokoll

Dieser Abschnitt geht etwas auf technische Details ein, kann aber prinzipiell übersprungen werden

BitTorrent besteht trotz der grundlegenden dezentralen Verteilung aus zwei Komponenten, einem Client (bspw. Halite, rTorrent, Deluge) und einem Server (bspw. opentracker, hefur, traccoon). Der Server dient jedoch nur zum Austauschen der Client-Adressen, die eigentlichen Datenverbindungen bauen die Clients untereinander auf.

Um Dateien zu verteilen, muss auf zuerst offline eine .torrent-Datei, welche Informationen über die zu verbreitenden Daten enthält, erzeugt werden. Enthalten ist, neben einigen Meta-Informationen wie der Dateigröße, einem Kommentar und der Tracker-URL als wichtigstes Element der sogenannte "info-Key", welcher Hashes der in einzelne Blöcke zerlegten Dateien enthält. Der Inhalt einer .torrent-Datei lässt sich beispielsweise mit torrentinfo betrachten.

Eine .torrent-Datei laesst sich (semi-)eindeutig anhand des SHA1-Hashes ihres info-Keys identifizieren. Die meisten Tracker halten daher eine Datenbank der Hashes vor, für welche sie Client-Adressen verteilen, müssen also mindestens diese Information auch erhalten, bevor die Verteilung beginnen kann.

Als letzten Schritt muss nun die .torrent-Datei, welche meist nur wenige Kilobytes groß ist, auf den/die Zielcomputer geschoben werden (bspw. per HTTP).

Umfang eines Torrents

Ein Torrent sollte immer eine logische Einheit bilden - es ist zwar möglich nur bestimmte Dateien eines Torrents herunterzuladen, erzeugt aber Mehraufwand sowohl auf der Seederseite (längeres Hashen) als auch auf der Leecherseite (mehr klicken).

Eine logische Einheit bilden bspw.
  • Ein Linux-CD-Image mit Beschreibung und passender Stickervorlage
  • Das Album deiner Band mitsamt unterschriebener Legalitätserklärung
  • TPB:AFK in 1080P mit Subtitle-Files und allem drum und dran
  • Freie Software mitsamt dem PDF vom Wikibook dazu
Keine logische Einheit bilden aber
  • Deine komplette Festplatte
  • Unsortierte Mediendateien (ausser in bestimmten Faellen)

Sollte dein spezieller Fall in keine der Kategorien passen, denk nach in welchen Granularitäten du deine Sachen am liebsten herunterladen würdest. Anders gesagt: Hirn anschalten. Oder halt jemand anderst fragen.

Torrentfile erzeugen

Jetzt kommt der spannende Teil. Um einen Torrent zu erzeugen, starten wir zunächst den Client unserer Wahl. Dort schauen wir uns in den diversen Menüs nach einer Option um, die in etwa "Neuen Torrent erstellen" heißt, worauf wir vermutlich mit einem den folgenden Dialogen ähnlichen Bild begrüßt werden.
New Torrent Dialog
Torrents können immer jeweils entweder genau eine Datei oder genau einen Ordner (inkl. Unterordner) enthalten. Es empfiehlt sich, die zu verteilenden Dateien in benannte Ordner zu stecken und diese dann Auszuwählen. In das "Trackers"-Feld kommen, wie sicher schon erraten, die Adressen der Tracker, die du bestimmt schon auf irgendwelchen Wegen mitgeteilt bekommen hast. Einen deskriptiven Kommentar einzutragen ist immer gern gesehen. Die Option "Power seeding" bzw. "Super seeding" sollte ausgeschaltet werden, diese bringt nur bei einer asymmetrischen Anbindung an Peers Vorteile.

Der nächste Schritt des Clients wird nun eine, je nach Dateigröße variierend lange, Berechnung sein, in der die Hashes der einzelnen Dateisplitter berechnet werden. Das Ergebnis dieses Prozesses ist dann die ersehnte .torrent-Datei.

Unter Linux lassen sich Torrentfiles recht einfach mit "mktorrent" erzeugen.
mktorrent -v -a <announce> <file or directory>
Folgendes Beispielskript akzeptiert auf stdin zeilenweise Dateien und Ordner und erzeugt dann im aktuellen Verzeichnis die zugehörigen Torrentfiles:
#!/bin/sh
while read line; do
echo "Now hashing: $line"
mktorrent -v -a http://10.42.23.1:6969/announce "$line"
done

Aufruf beispielsweise mit
find ../Legales_Zeug/ -maxdepth 1 -type d | tail -n +2 | ./torrentify
Erklärung der Parameter:
[find] -maxdepth 1 Nicht in Unterordner verzweigen
[find] -type d Nur Ordner anzeigen
[tail] -n +2 Ersten beiden Ergebniszeilen des find-Befehls nicht zeigen (. und ..)

Tracker

Sollte dein Client so schlau gewesen sein und gleich mit dem Seeden angefangen haben, wirst du sehr wahrscheinlich in eine Fehlermeldung laufen - im Falle traccoons so etwas wie "Hash not recognized". Der Tracker kennt den Torrent noch nicht und nimmt daher keine Vermittlung vor. Dem wird mit dem Eintragen des Torrents im Trackerpanel abgeholfen. Viele Tracker bieten auch eine Kategorisierung sowie einen Browser ihrer aktiven Torrents an.

Seeden

Sollte dein Client den erzeugten Torrent nicht automatisch hinzugefügt haben oder aus mysteriösen Gründen nicht seeden, kann es helfen den Torrent hinzuzufügen als wollte man ihn herunterladen, und als Speicherort den Quellordner wählen (quasi die Originaldateien überschreiben). Der Client wird das bemerken, überprüfen ob die Dateien vollständig sind und mit dem seeden beginnen.

Sobald alle Teile deiner Dateien mindestens einmal im Netzwerk vorhanden sind (auch wenn jeder Peer nur einen Teil hat), ist es möglich die vollständige Datei auch ohne dein Zutun wieder zusammenzusetzen, du kannst den Torrent daher theoretisch löschen - es ist allerdings guter Stil seine Torrents möglichst lange zu seeden, zumal das in einem lokalen Netzwerk sowieso problemlos ist.

Gratulation, du hast jetzt das Handwerkszeug zum Internetpirat!

#kitinfo Sharingparty Portal - BitTorrent HowTo