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)
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).
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.
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.
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
- 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.
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.
Folgendes Beispielskript akzeptiert auf stdin zeilenweise Dateien und Ordner und erzeugt dann im aktuellen Verzeichnis die zugehörigen Torrentfiles:
Aufruf beispielsweise mit
Erklärung der Parameter:
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!
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!