Shell und Netz: Datenübertragung

Aus LinuxUser 01/2018

Shell und Netz: Datenübertragung

© Artem Egorov, 123RF

Datenschieber

Mit Wget sichern und spiegeln Sie Webseiten; mit Netrw und Cryptcat übertragen Sie Daten ohne Server, etwa bei Backups im Notfall.

Es gibt viele Situationen, in denen es gilt, eine Webseite oder andere Daten ohne gewohnte Werkzeuge zu übertragen – etwa während Entwicklungsphasen oder nach einem Crash. Der Klassiker unter den Anwendungen zur Datenübertragung – auf Client- wie auf Server-Seite – ist FTP. Von Haus aus unverschlüsselt und zudem zwei Ports belegend, gilt FTP heute als überholt, und andere Mechanismen wie SFTP oder diverse Cloud-Ansätze ersetzen es mehr und mehr. In jedem Fall brauchen Sie jedoch einen Server als Dienst auf dem ausliefernden Rechner.

Wget

Auf Client-Seite bietet sich Wget [1] an, mit der Einschränkung, dass es nur Daten von FTP- und HTTP-Servern lädt. Als Daten kommen hierbei einzelne Dateien oder ganze Verzeichnisbäume infrage. Das Programm integriert sich gut in Shell-Skripte und vermag abgebrochene Transfers fortzusetzen. Zahlreiche Optionen erlauben einen vielfältigen Einsatz für Downloads oder Auswertungen (siehe Tabelle “Wget-Optionen”).

Syntax

Aufgabe

-P Ziel

Zielverzeichnis für den Download

--https-only

HTTPS verwenden

--http-user=User

Benutzername angeben

--http-password=Passwort

Passwort angeben

--no-check-certificate

kein Abgleich des Zertifikats

-nd

Verzeichnisstruktur beim Download auflösen

-x

Verzeichnisstruktur übernehmen

-r

mit Verzeichnisstruktur herunterladen

-l Anzahl

Anzahl verwendeter Ebenen

-k

externe Links zu lokalen konvertieren

-E

Dateinamenserweiterung anpassen

-e Anweisung

Zusatzanweisung aus .wgetrc angeben

-e robots=off

robots.txt ignorieren

-A Endung

angegebene Dateitypen herunterladen

-R Endung

angegebene Dateitypen nicht herunterladen

-D Domain

Links zu Domains folgen

--exclude-domains Domain

Links zu Domains nicht folgen

-i Datei

URLs aus HTML/Text-Datei ausgeben

-t Anzahl

Anzahl Download-Versuche

-c

abgebrochenen Download fortsetzen

--user-agent="Browser"

Browser-Typ angeben

--referer=URL

Referer (vorhergehende Seite) angeben

-N

nur neuere Dateien herunterladen

-O Datei

Ausgabe in Datei schreiben

-q

keine Ausgabe im Terminal

Webseiten spiegeln

Damit die heruntergeladene Seite lokal funktioniert, wandeln Sie mit der Option -k die Links in lokale Referenzen um. Des Weiteren benutzen Sie -r für das Absteigen in den Verzeichnisbaum. Die maximale Tiefe dafür geben Sie bei Bedarf mit -l Tiefe an.

Durch -E wandeln Sie eventuell unpassende Erweiterungen von Dateinamen ab. Damit die Software die robots.txt hier nicht auswertet, setzen Sie eine zusätzliche Anweisung. Die erste Zeile von Listing 1 zeigt die vollständige Syntax dafür.

Abbildung 1 und**2 zeigen den Abruf und das Auflisten des Verzeichnisinhalts. Dabei sehen Sie, dass Wget dafür ein eigenes Unterverzeichnis anlegt. Mit einem beliebigen Webbrowser betrachten Sie die lokale Kopie. Im Beispiel auf dem hier verwendeten Testsystem funktionierte dies mit dem Kommando aus der zweiten Zeile von Listing 1.

Listing 1

wget -e robots=off -r -k -E -l 3 http://www.example.com
firefox wget/192.168.0.83/index.html
wget http://example.com/Ordner/Datei
wget -e robots=off -r -nd -A Endung,Endung http://www.example.com
wget -np -p --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" http://192.168.0.83

Abbildung 1: Bei Bedarf spiegeln Sie mit Wget eine Webseite mit allen Unterseiten in ein lokales Verzeichnis auf Ihrem Rechner, um sie offline anzusehen.

Abbildung 1: Bei Bedarf spiegeln Sie mit Wget eine Webseite mit allen Unterseiten in ein lokales Verzeichnis auf Ihrem Rechner, um sie offline anzusehen.


Abbildung 2: Wget übernimmt beim Download die Struktur der heruntergeladenen Seite.

Abbildung 2: Wget übernimmt beim Download die Struktur der heruntergeladenen Seite.

Dateien herunterladen

Wenig spektakulär verläuft das Herunterladen von Dateien. Hierzu genügen die Angabe des Dateinamens und der genaue Pfad (Listing 1, Zeile 3). Abbildung 3 zeigt ein Beispiel für das Vorgehen. Es funktionieren hier keine der bekannten Wildcards. Sie müssen also zwingend den Dateinamen vollständig eingeben, sonst erhalten Sie nur eine 404-Meldung.

Abbildung 3: Wenn Sie versuchen, eine Datei mit Wget herunterzuladen, müssen Sie den Namen der Datei komplett und ohne Wildcards angeben.

Abbildung 3: Wenn Sie versuchen, eine Datei mit Wget herunterzuladen, müssen Sie den Namen der Datei komplett und ohne Wildcards angeben.

Zum Herunterladen mehrerer Dateien mit derselben Dateiendung verwenden Sie die Option -A Endung; mehrere Angaben zur Endung trennen Sie mit Kommas. Umgekehrt verhindern Sie das Herunterladen von Dateien mit einer bestimmten Endung durch -R Endung. Auch hier dürfen Sie wieder mehrere Endungen angeben, jeweils durch Kommas getrennt.

Dabei haben Sie die Wahl, die Verzeichnisstruktur zu erhalten oder alle Dateien ins aktuelle Arbeitsverzeichnis zu schreiben (Option -nd). Ohne also sich über den oder die Dateinamen zu informieren, geben Sie den Aufruf aus der vierten Zeile von Listing 1 ein.

Abbildung 4 zeigt den Ablauf. Hier lässt sich die Arbeitsweise von Wget erkennen: Das Programm lädt zunächst alle Dateien herunter und entfernt anschließend die nicht erwünschten. Nur die Files mit der angegebenen Endung verbleiben im aktuellen Arbeitsverzeichnis.

Abbildung 4: Weisen Sie Wget an, nur Dateien mit einer bestimmten Endung herunterzuladen, zieht das Programm trotzdem zuerst alle Files, die es findet, und löscht anschließend die unerwünschten.

Abbildung 4: Weisen Sie Wget an, nur Dateien mit einer bestimmten Endung herunterzuladen, zieht das Programm trotzdem zuerst alle Files, die es findet, und löscht anschließend die unerwünschten.

Wget mit Tarnkappe

Manche Webserver erwarten einen bestimmten Browser und weisen Abfragen anderer Clients ab. Damit Sie mit Wget trotzdem ans Ziel kommen, übermitteln Sie die passende Kennung in der Form -np -p --user-agent "Browser". Das sieht dann so aus wie in Zeile 5 von Listing 1.

Diese Zeichenkette findet sich auch in der Log-Datei des Webservers wieder, bei einer Apache-Standardinstallation auf Debian 9 beispielsweise unter /var/log/apache2/access.log (Listing 2). In Zeile 2 tritt Wget ganz offen auf, in Zeile 3 tarnt es sich dagegen als Firefox (--user-agent="Mozilla/5.0 ...").

Listing 2

[...]
192.168.0.82 - - [05/Oct/2017:19:52:41 +0200] "GET / HTTP/1.1" 200 1609 "-" "Wget/1.18 (linux-gnu)"
192.168.0.82 - - [05/Oct/2017:19:53:13 +0200] "GET / HTTP/1.1" 200 1609 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
[...]

Netrw

Ganz ohne Server kommen Netread und Netwrite beim Transfer von Daten aus. Damit bietet das Duo eine Möglichkeit, um selbst auf IoT-Geräten mit Linux Daten aller Art zu übertragen. Die beiden Programme [2] stecken häufig im Paket netrw und verfügen über keinerlei besondere Abhängigkeiten – zur Not nehmen Sie sie auf einem USB-Stick oder einer SD-Karte mit.

Einen kleinen Haken aber hat der Einsatz der beiden Helfer doch: Vor jedem der beteiligten Rechner muss entweder ein Mensch sitzen, der die Kommandos ausführt, oder ein Skript übernimmt diese Aufgabe. Durch den persönlichen Einsatz stellen Sie aber sicher, dass Sie alles, was geschieht, direkt mitbekommen.

Vor dem Übertragen mehrerer Dateien fassen Sie diese möglichst in einem Archiv zusammen und komprimieren es. Das spart Zeit und Arbeit. Beachten Sie, dass der Transfer selbst nicht verschlüsselt erfolgt. Stattdessen müssen Sie gegebenenfalls die Nutzlast vor dem Versenden entsprechend vorbereiten. Zudem können Sie jeweils nur eine Übertragung vornehmen, nach deren Abschluss sich Netread automatisch beendet.

Die Tabelle “Netread/Netwrite: Optionen” zeigt Ihnen die wichtigsten Optionen für die Arbeit mit den beiden Programmen. Die Exit-Codes für den Einsatz im Shell-Skript lauten 0 für eine Übertragung ohne Fehler, 1 für allgemeine und 2 für Prüfsummenfehler.

Syntax

Aufgabe

-f Ziel

Ziel angeben, wenn Verbindung durch Firewall führt

-o Datei

Daten in angegebene Datei schreiben (Netread)

-i Datei

Daten von angegebener Datei lesen (Netwrite)

-C sha1|md5|rmd160|none

Algorithmus für Prüfsumme angeben

udp

UDP statt TCP benutzen

-h n

Fortschrittsanzeige (n kByte/s)

-H n

Fortschrittsanzeige, (n MByte/s)

-v

wichtige Zusatzinformationen ausgeben

-vv

alle Zusatzinformationen ausgeben

Zuerst startet die empfangende Seite Netread, wobei Sie mindestens die Portnummer und den Dateinamen für die Ausgabe (Standardausgabe oder Option -o Datei) angeben. Bei Problemen hilft der Einsatz des Parameters -vv weiter. Durch die Firewall klappt eine Verbindung mittels der Angabe des sendenden Rechners (-f Ziel).

Zum Senden geben Sie mindestens die Quelldatei und den Zielrechner an. Nach dem Übertragen der Datei beendet sich Netread. Abbildung 5 zeigt (beidseitig) das Übertragen der Daten.

Abbildung 5: Datenübertragung mit Netwrite und Netread.

Abbildung 5: Datenübertragung mit Netwrite und Netread.

Falls Sie mehrere Dateien übertragen möchten, helfen Tar und die Pipe dabei weiter: Anstelle der Angabe von Quelle oder Ziel steht Tar vor Netwrite oder nach Netread in der Pipe. Abbildung 6 und Abbildung 7 zeigen zudem noch den Einsatz der Fortschrittsanzeige.

Beachten Sie, dass auf der Sendeseite mit Tar die Option v (Anzeige der Dateien) nicht möglich ist: In diesem Fall würde die Ausgabe des Terminals übertragen, nicht die Nutzlast.

Abbildung 6: Senden mehrerer Dateien mit Netwrite.

Abbildung 6: Senden mehrerer Dateien mit Netwrite.


Abbildung 7: Empfangen mehrerer Dateien mit Netread.

Abbildung 7: Empfangen mehrerer Dateien mit Netread.

Cryptcat

Als Alternative zu Netrw bietet sich Cryptcat an, ein etwas entschärfter und verschlüsselnder Klon von Netcat, der sich ebenfalls dazu eignet, um Daten zu übertragen [3]. Dies geschieht ähnlich wie beim Einsatz von Netwrite und Netread.

Cryptcat verschlüsselt die Verbindung. Falls Sie dazu kein eigenes Kennwort angeben, verwendet die Software das fest verdrahtete Passwort metallica. Die wichtigsten Optionen des Tools fasst die Tabelle “Cryptcat-Optionen” zusammen.

Syntax

Aktion

-k Passwort

Angabe des Passworts zum Aufbau der Verbindung

-u

UDP statt TCP verwenden

-p Portnummer

Port-Angabe

-l

Empfangsmodus

-z

Portscan-Modus

-v

Ausgabe wichtiger Meldungen

-vv

Ausgabe ausführlicher Meldungen

-n

Host/DNS-Abfragen unterbinden

-w Sekunden

Timeout für Verbindungen setzen

Mit Cryptcat übertragen Sie Daten per Pipe; im Normalfall senden Sie einen Verzeichnisbaum per Tar über das Programm. Abbildung 8 zeigt einen typischen Transfer. Bei Bedarf transportieren Sie auf diese Weise auch die Ausgabe von Programmen; sogar ein Mini-Chat mit je zwei Terminals ist möglich.

Abbildung 8: Senden mehrerer Dateien mit Cryptcat.

Abbildung 8: Senden mehrerer Dateien mit Cryptcat.

Fazit

Der Transfer von Daten gelingt selbst ohne Server-Dienste mit Linux-Bordmitteln auf vergleichsweise einfache Weise. Mit Wget sichern Sie komplette Webseiten samt Unterverzeichnissen. Das Duo Netread/Netwrite hilft bei einfachen Dateitransfers in beide Richtungen. Cryptcat bietet eine ähnliche Funktion, sichert den Kanal aber mit einem Passwort ab. 

Der Autor

Harald Zisler beschäftigt sich seit vielen Jahren mit FreeBSD und Linux. Zu Technik- und EDV-Themen verfasst er Bücher und Beiträge für Zeitschriften. Aktuell ist beim Rheinwerk Verlag die vierte Auflage von “Computer-Netzwerke” erschienen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 01/2018 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben