Einfacher Dateitransfer mit netcat

Da sitze ich also im lokalen Netzwerk und möchte eigentlich nur die ein oder andere Datei zwischen den vorhandenen Gerätschaften austauschen. Kein Problem, wie man meinen sollte, aber zu meiner Linken steht ein Linux-Client, auf der Rechten ein Mac OS X-Client und mittendrin werkelt eine kleine SoHo Netzwerk-Festplatte von Phillips namens SPD8020. Die SPD8020 basiert auf einem abgespeckten Linux und einer Sammlung PHP-Skripte. Die Installation von FTP-, SMB- oder NFS-Servern erscheint mir zu aufwendig für den Transfer von ein paar Dateien.

Während der Linux- und Mac OS X-Client über ein vollwertiges Kommando-Arsenal verfügen steht auf der Netzwerk-Festplatte nur ein sehr eingeschränkter Befehlssatz zur Verfügung.

Die Lösung heisst wieder mal "netcat" und ermöglicht die Kommunikation zwischen zwei Geräten auf Basis des TCP- bzw. UDP-Protokolls.

Push

In dem als "Push" bezeichneten Verfahren baut der Sender eine Verbindung zum Empfänger auf. D.h. netcat wartet am Port 7800 auf eingehende Verbindungen und schreibt die empfangenen Daten in die Datei filename.out.

1
2
3
4
5
# Empfänger
$ nc -l 7800 > filename.out

# Sender
$ nc hostname 7800 < filename.in

Pull

In diesem Szenario baut der Empfänger eine Verbindung zum Sender auf. D.h. netcat bietet auf dem Port 7800 die Datei filename.out zum Transfer an und wartet auf eine Anfrage vom Empfänger.

1
2
3
4
5
# Sender
$ nc -l -p 7800 < filename.out

# Empfänger
$ nc -w 10 hostname 7800 > filename.in

Push vs. Pull

Was macht das nun für einen Unterschied, ob Push oder Pull?! Im lokalen Netzwerk unter den oben genannten Umständen wahrscheinlich keinen, aber in der freien Wildbahn im Schatten von Firwalls und Paketfiltern macht das durchaus einen Sinn.

Ein Szenario: Man sitzt im Büro und möchte gerne eine Datei von einem Rechner im Internet herunterladen. Leider lässt die Firewall des Büros keine eingehenden Verbindungen zu und sperrt diese. Ein "Push" ist demnach nicht möglich, da in diesem Falle der Rechner im Internet versuchen würde eine Verbindung zu dem Rechner im Büro aufzubauen. Es bleibt also nur noch die Möglichkeit des "Pull", bei welchem der Rechner im Büro eine Verbindung zu dem im Internet aufbaut und sich die Datei "zieht".