Mit der Bash TOR Seiten suchen und sichern (thedevilseye + wget)

Hintergrundwissen zum TOR-Netzwerk habe ich in diesem Artikel bereits beschrieben, daher werde ich an dieser Stelle keine weiteren Worte dazu verlieren. Die Ideen aus diesem Artikel können natürlich vielfältig genutzt und abgewandelt werden.

Das Github-Projekt thedevilseye ermöglicht es in der Bash Anfragen an die TOR-Suchmaschine Ahmia zu senden. Die Installation ist relativ simpel. Wenn Du das Programm pip bereits installiert hast kannst Du gleich loslegen, ansonsten musst Du es zuerst installieren.

sudo apt install python3-pip 

Danach erfolgt die Installation von thedevilseye

pip install thedevilseye

Der einzig relevante Parameter ist -c, da Du mit ihm die Ergebnismenge beeinflussen kannst. Standardmäßig werden lediglich die ersten 10 Ergebnisse gesucht. Ich such mal nach OSINT und habe die Treffermenge auf 20 erhöht. Auch wenn ich hier nur ein Wort suche, habe ich es in Anführungszeichen gesetzt. Spätestens bei der Übergabe eines zweiten Suchwortes würde das Programm sonst einen Fehler ausgeben.

thedevilseye -c 20 "osint"

Leider hat thedevilseye die hässliche Angewohnheit die Onion-Links mit … zu beenden, wenn es nicht genug Platz für die Darstellung gibt. In diesem Fall musst Du die Schriftgröße durch das Drücken der Tasten strg und Minus verkleinern und nochmal suchen. Hast Du Deine Darstellung in der normalen Schriftgröße, sollte es aber kein Problem geben.

Mit einem einfachen grep kannst Du Dir die Onion-Links herausholen. Ich verwende dazu den regulären Ausdruck [a-z0-9]+\.onion. Dieser Ausdruck bedeutet dass die zulässigen Zeichen Kleinbuchstaben von a-z und die Zahlen von 0-9 sind. Die dürfen durch das Plus mindestens einmal vorkommen. Danach soll ein Punkt kommen. Der Punkt bedeutet aber eigentlich beliebiges Zeichen. Damit der Punkt also als Punkt interpretiert wird, muss ich ihn mit einem Backslash maskieren. Danach soll die Zeichenfolge onion folgen. Mit -o sorge ich dafür, dass nur der gesuchte reguläre Ausdruck ausgeschnitten wird. Ich habe in meinem YT Kanal viele Videos dazu wie das genau funktioniert.

Anschließend überprüfe ich noch mit wc -l wieviele Onion-Adressen es sind. Wc -l zählt einfach die Zeilen. Es sollten 20 sein.

Jetzt kann ich mir die Ergebnisse in eine Liste speichern.

thedevilseye -c 20 "osint" | grep -E "[a-z0-9]+.onion" -o > liste.txt

Um die URLs jetzt aufrufen zu können, muss meine Bash ins TOR-Netzwerk gelangen. Dazu installiere ich mir das Programm tor.

sudo apt install tor

Als nächstes prüfe ich ob ich TOR-Seiten erreichen kann. Dazu verwende ich das Programm torsocks um die TOR-Verbindung aufzubauen. Mit curl kontaktiere ich den Server. Wenn HTML zurück kommt ist alles gut. Mit head kannst Du die Ausgabe auf die ersten 10 Zeilen begrenzen

torsocks curl o2cgnt55iwlishovskr6xovntd4o67loqmwh4g24bdg7qh3gmtydmxyd.onion | head

Erst die zweite Onion-Seite hat funktioniert. Ahmia findet Inhalte im TOR-Netzwerk. Ob die Zielseite zum Zeitpunkt der Anfrage online ist, wird von Ahmia jedoch nicht geprüft. Das machen Google und Co. auch nicht.

Mit curl kannst Du Dir jetzt den HTML-Code holen, aber eingebundene Bilder und Script-Dateien werden nicht mit heruntergeladen. Um eine vollständige Sicherung zu machen, verwende ich das Programm wget. Wenn es nicht vorinstalliert ist, musst Du es natürlich noch installieren.

sudo apt install wget

Wget kann mit -i eine Liste von URLs herunterladen. -p sorgt dafür dass auch die Inhalte der Seite heruntergeladen werden. -x legt dann Verzeichnisse an, die der URL entsprechen. -k sorgt dafür dass die Verlinkungen in der HTML-Datei funktionieren und -o legt eine Logdatei an.

torsocks wget -p -x -k -i liste.txt -o log

Und nun fängt wget an, die in der Liste verzeichneten URLs herunterzuladen. Das würde natürlich auch mit Clearweb URLs funktionieren. Die heruntergeladenen Seiten werden in das Verzeichnis gespeichert, in dem Du Dich gerade befindest. Es ist daher empfehlenswert hierfür einen eigenen Ordner anzulegen und auch wget erst dann auszulösen, wenn man in diesem Ordner ist. Du musst dann halt die liste.txt in den Ordner kopieren/verschieben oder im Befehl eine Pfadangabe zur liste.txt angeben.

Wget konnte so 15 der 20 URLs sichern (ls gibt das Verzeichnis aus. mit grep filtere ich auf onion und mit wc -l werden die Zeilen gezählt)

Und wie man leicht sieht wurde nicht nur die HTML-Datei gesichert

Und so sehen die ersten Zeilen der Log-Datei aus:

Einige weitere Optionen von wget können sehr wichtig sein:

-r -l 3 ← -r gibt an, dass Links gefolgt werden soll. -l 3 gibt die Tiefe an. Hier soll also bis zu einer Tiefe von 3 heruntergeladen werden.
— user-agent ← hier kannst Du einen aktuellen User-Agent mitgeben, damit die Zielseite nicht merkt, dass Du mit wget die Webseite herunterlädst und deswegen blockst. Vielleicht ist es auch schlau den User-Agent-String eines TOR-Browsers zu verwenden.
-E ← sorgt dafür, dass alle HTML-Dateien auch auf .html enden. Das umgeht das Problem, dass z.B. Webseiten die auf .php enden, nicht ohne Umstände aus dem Dateiexplorer im Browser geöffnet werden können.
-e robots=off ← Angaben, die verhindern, dass Automaten wie wget auf die Webseite zugreifen, werden ignoriert
-t ← Mit -t kannst Du die Anzahl der Versuche des Downloads begrenzen z.B. mit -t 1, dann wird nur einmal der Download angestoßen

Willst Du all diese Optionen mitgeben sieht der Befehl dann so aus (Aus Übersichtlichkeitsgründen habe ich die Parameter -p -x -k und -E in einem Minus zusammengefasst – das geht auch)

torsocks wget -pxkE -e robots=off -r -l 3 -t 1 --user-agent "Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0" -i liste.txt -o log

Natürlich kannst Du wie gesagt, jedwede Liste von URLs an wget übergeben. Und Du muss den Download auch nicht über das TOR-Netzwerk leiten. Das ist nur erforderlich, wenn die Webseiten im TOR-Netzwerk liegen. Du kannst für Webseiten im Internet torsocks natürlich auch weglassen.

Solltest Du nun Webseiten heruntergeladen haben, deren Sprache Du nicht verstehst, möchte ich hier auf meinen Artikel zum automatischen Übersetzen hinweisen, in dem ich eine Möglichkeit vorstelle in der BASH zu übersetzen.