Selbst ohne die aufwendige Infrastruktur schieben Sie Daten schnell und einfach übers Netzwerk. Dabei helfen die Werkzeuge aus dem Netrw-Paket.
Sie möchten schnell und unkompliziert Daten zwischen zwei Rechnern transportieren, es fehlt aber mangels Software der Zugriff auf etablierte Techniken wie SFTP oder SCP? Oder Sie verfügen auf der Zielmaschine über kein Benutzerkonto? Dann helfen die Programme aus dem Paket netrw [1] weiter.
Hat auf dem Zielsystem jemand das Programm Netread gestartet, steht dem Übertragen der Daten nichts mehr im Weg. Damit lauscht der Rechner am angegebenen Port auf die gesendeten Daten. Ein Ausnahme bildet der Firewall-Modus – dazu später mehr.
Der Vorteil der Ad-hoc-Lösung gegenüber einer, bei der ein Daemon ständig lauscht, liegt in der normalerweise nur kurzen Existenz des offenen Kanals. Das reduziert die Wahrscheinlichkeit, dass ein Angreifer zufällig über den offenen Port stolpert. Oft sitzt zusätzlich eine Person vor dem Bildschirm jedes beteiligten Rechners und verfolgt den Ablauf der Transfers.
Zum Senden benutzen Sie das Kommando Netwrite. Für sich gesehen besteht damit die Möglichkeit, alle möglichen Daten in die weite Welt zu übertragen. Wenn der Rechner nicht in einem geschützten Netz steht, empfiehlt es sich also, entsprechende Vorkehrungen zu treffen. Um die Daten als solches vor dem Mitlesen zu schützen, verschlüsseln Sie die Nutzlast am besten.
Grundfunktionen
Im einfachsten Fall beginnen Sie, indem Sie den Empfang von Daten mit Netread initialisieren. Dabei geben Sie lediglich die Portnummer an und leiten die Standardausgabe in eine Datei um (Listing 1, Zeile 1). Die Übertragung selbst starten Sie nach dem gleichen Muster (Listing 1, Zeile 2).
Listing 1
$ netread Port > Ausgabedatei $ netwrite IP-Adresse Port < Datei
Abbildung 1 zeigt den Ablauf des Transfers. Die beiden Programme weisen gemeinsame Optionen auf, deren wichtigste Sie in der Tabelle “Optionen” finden.

Abbildung 1: Mit nur wenigen Parametern übertragen Sie Daten mithilfe der Tools Netread und Netwrite.
Optionen
| Parameter | Erläuterung |
|---|---|
udp |
UDP statt TCP verwenden |
-f Host |
lesende Seite beginnt mit dem Aufbau der Verbindung |
-C Algorithmus |
verwende angegebenen Algorithmus (sha1, md5, rmd160, none) |
-o Datei |
Angabe der Datei |
-h Wert |
Fortschritt alle Wert KByte ausgeben |
-H Wert |
Fortschritt alle Wert MByte ausgeben |
-b |
Geschwindigkeit in Bits/Sekunde (anstelle Byte/Sekunde) angeben |
-q |
Ausgaben am Bildschirm unterdrücken |
-v |
ausführliche Meldungen ausgeben |
-vv |
sehr ausführliche Meldungen ausgeben |
Die Nutzlast beziehen Sie entweder direkt aus einer Datei oder verwenden die Option -i Datei bei Netwrite. Am Zielsystem verwenden Sie umgekehrt die Ausgabeumlenkung (>) oder die Option -o Datei zum Speichern der Daten.
Fortschritt
Die Anzeige des Fortschritts beim Übertragen der Daten erweist sich vor allem beim Senden größerer Datenmengen als hilfreich, um festzustellen, ob die Bytes tatsächlich noch durch das Netzwerk fließen. Sie dürfen zwischen einer Anzeige in KByte (-h) oder MByte (-H) wählen. Die Option verlangt die Angabe, für welche Datenmenge eine ausgegebene Raute steht. Das führt mitunter dazu, dass die Anzeige entweder seitenfüllend oder zu kurz ausfällt (Abbildung 2).

Abbildung 2: Da die Forschrittsanzeige flexibel auf einen Parameter reagiert, gilt es hier, einen für die Datenmenge sinnvollen Wert zu wählen.
In einem Shell-Skript (Listing 2) ließe sich mit Stat [2] feststellen, wie groß die Datei ausfällt, und anschließend ein brauchbarer ganzzahliger Wert für den Fortschrittsbalken übergeben. Beachten Sie, dass eine Zeile 50 Rauten fasst. Daher kommt bei sehr kleinen Datenmengen eventuell keine Anzeige zustande.
Listing 2
#! /bin/sh if [ -z $1 ]; then echo "Dateiname fehlt - ABBRUCH!" exit elif [ -z $2 ]; then echo "Zielrechner/Zielport fehlt - ABBRUCH!" exit elif [ -z $3 ]; then echo "Zielrechner/Zielport fehlt - ABBRUCH!" exit fi menge=$(stat -c %s $1) rauten=$(echo $menge/1014/50 | bc) netwrite -h $rauten $2 $3 < $1
Die empfangende Seite kennt die Dateigröße im Voraus nicht. Entweder erfragen Sie den Wert vor dem Start des Transfers oder Sie verwenden den Wert 1000, der erfahrungsgemäß bei -h vernünftige Ausgaben produziert.
Abbildung 3 zeigt den Ablauf des Skripts. Der Übersichtlichkeit halber kommen Positionsparameter anstelle von Eingabemasken zum Einsatz. Mit den Möglichkeiten von Zenity [3] oder Cdialog [4] ließe sich dieses Skript entsprechend erweitern.
Firewall-Modus
Der Firewall-Modus erlaubt den Aufbau einer Verbindung in umgekehrter Richtung. Der Option -f übergeben Sie entweder die IP-Adresse oder den Namen eines Rechners. Beim Einsatz zeigte sich folgender Ablauf als praktikabel: Sie rufen zuerst netwrite mit der Option -f auf und starten anschließend netread ebenso mit -f. Dadurch nutzen Sie auf beiden Systemen den Firewall-Modus, die Reihenfolge beim Start ist aber umgekehrt.
In Abbildung 4 sehen Sie die notwendigen Schritte für den Sender (heller Hintergrund im Terminal) und den Empfänger (dunkler Hintergrund). Die Angabe zum Rechner erfolgt über deren Namen (ze5 und ZE6). Nach dem Aufruf von netwrite erscheint zunächst die Meldung, dass das Programm auf dem angegebenen Port lauscht. Die weiteren Meldungen kommen nach dem Aufruf von netread am Zielsystem zustande.

Abbildung 4: Ablauf einer Datenübertragung im Firewall-Modus. Dabei baut die lesende Seite die Verbindung auf, nachdem auf der sendenden Seite das Programm gestartet ist.
In Shell-Skripts
Die beiden Tools arbeiten in klassischer Linux-Tradition, lesen also von der Standardeingabe und schreiben auf die Standardausgabe. Das ermöglicht es, die Ausgabe eines Programms direkt an Netwrite zu schicken. Durch Weglassen der Option -o oder durch Umlenken der Ausgabe erscheinen die Daten am Bildschirm des empfangenden Rechners (Abbildung 5).
Mini-Chat
Wenn Sie weder eine Ein- noch eine Ausgabedatei bestimmen, liest Netwrite von der Standardeingabe, Netread liefert auf die Standardausgabe aus. Damit bauen Sie einen provisorischen Chat auf (Abbildung 6).
Verwenden Sie diesen jedoch über eine Strecke außerhalb des privaten Netzwerks, empfiehlt es sich, die Kommunikation mittels Secure Shell (SSH) abzusichern. Sie benötigen je ein Terminal zum Senden und Empfangen. Darüber hinaus müssen Sie für jede Richtung einen eigenen Port verwenden.
Fazit
Die Netrw-Tools ermöglichen es, unkompliziert Daten zwischen zwei Rechnern zu übertragen. Dabei kommen sie ohne zwischengeschaltete Infrastruktur aus und arbeiten praktisch auf Zuruf. Verschlüsseln Sie die Nutzlast, bleiben sie beim Übertragen der Daten stets auf der sicheren Seite.
Infos
[1] Netrw: http://mamuti.net/netrw/index.en.html
[2] Stat (Coreutils): http://www.gnu.org/software/coreutils/
[3] Zenity: https://wiki.gnome.org/action/show/Projects/Zenity?action=show&redirect=Zenity
[4] Cdialog: http://invisible-island.net/dialog/







