Einführung
Einer der größten Vorteile der Verwendung von Linux ist die Fülle an hilfreichen Dienstprogrammen, die es bietet. Die programminternen Funktionen sind für die meisten Programmierer in der Regel ausreichend, um ihre Arbeit zu erledigen. Das bedeutet, dass Sie die meiste Zeit keine externen Programme und Software herunterladen müssen. Die integrierten Tools bieten Ihnen genügend Nutzen. Zu diesen hilfreichen Funktionen gehört das netcat-Dienstprogramm.
Wenn es um die Welt der Netzwerk-Tools geht, ist netcat so etwas wie eine übermächtige Waffe. Es ist ein unglaublich vielseitiger Befehl, den Sie für mehrere Zwecke verwenden können. Sie können beispielsweise dieses eine Tool verwenden, um alle Arten von Dateien und Daten über die Verbindungen Ihres Systems zu überwachen, zu testen und zu übertragen. In dieser Anleitung werden wir untersuchen, wie Sie all diese Aktionen auf einem VPS unter Verwendung von netcat durchführen.
Netcat finden
Netcat ist normalerweise auf allen modernen Linux-Distributionen verfügbar. Das bedeutet, dass Sie es höchstwahrscheinlich bereits haben und es nicht extra installieren müssen. In unserem Tutorial verwenden wir den Ubuntu 12.04 VPS. Sie können Ihren eigenen Ubuntu-Server installieren, indem Sie unserem Tutorial folgen. Ubuntu wird normalerweise mit der BSD-Variante des netcat-Dienstprogramms ausgeliefert. Denken Sie daran, dass eine andere Version möglicherweise etwas anders funktioniert.
Die grundlegende Syntax durchgehen
Wir beginnen damit, die allgemeine Syntax kennenzulernen, die im netcat-Dienstprogramm funktioniert. Sie können netcat bedienen, indem Sie eine TCP-Verbindung starten. Die Verbindung muss zu einem Remote-Host initiiert werden. Hier ist die grundlegende Syntax für netcat:
|
1 |
netcat [Optionen] Host Port |
Dieser Befehl versucht, eine TCP-Verbindung zu einem Remote-Host aufzubauen. Mit welchem Host er sich verbindet, hängt von der Portnummer ab, die Sie im Befehl angeben. Die Verbindung wird unverschlüsselt sein. Wie Sie sehen können, funktioniert dieser Befehl ähnlich wie der telnet-Befehl.
Andererseits können Sie auch eine UDP-Verbindung initiieren. Um ein UDP-Paket anstelle von TCP zu senden, müssen Sie die Option -u verwenden. Das würde so aussehen:
|
1 |
netcat -u Host Port |
Wenn Sie möchten, können Sie auch einen Portbereich angeben. Dazu müssen Sie einen Bindestrich zwischen den ersten und den letzten Port setzen. Hier ist ein Beispiel:
|
1 |
netcat Host Startport-Endport |
Sie können dem auch weitere Flags hinzufügen. Ein weiterer wichtiger Punkt ist, dass Sie netcat und nc austauschbar verwenden können. Sie führen zum selben Befehl, was bedeutet, dass sie Aliase voneinander sind.
Verwendung von Netcat für Port-Scanning
Lassen Sie uns zunächst eine der häufigsten Anwendungen von netcat untersuchen. Wir werden herausfinden, wie man es als Port-Scanner verwendet. In den meisten Situationen sind Sie mit einem Tool wie nmap besser bedient. Wenn Sie jedoch nur einfache Port-Scans durchführen müssen, ist netcat nützlich. Es kann Ihnen helfen, offene Ports mit Leichtigkeit zu identifizieren.
Um netcat als Port-Scanner zu verwenden, müssen Sie den Portbereich angeben. Dies tun Sie mit der Option -z. Dadurch scannt das System den Portbereich, anstatt eine Verbindung zu versuchen. Nehmen wir an, wir wollen Port 1 bis Port 1000 scannen:
|
1 |
netcat -z -v domain.com 1-1000 |
Zusätzlich zum Befehl -z haben wir auch die Option -v verwendet. Letztere ermöglicht es uns, dem Befehl mehr Informationen zu übergeben. Sie erlaubt es uns, „ausführlicher“ (verbose) zu sein.
Als Antwort erhalten Sie eine Ausgabe wie diese:

Die Ausgabe zeigt viele Informationen für jeden einzelnen Port. Sie kennen den Verbindungsstatus jedes Ports. Andererseits können Sie anstelle des Domainnamens die IP-Adresse verwenden, wenn Sie diese kennen. Dies macht den Prozess viel schneller. Hier ist ein Beispiel:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 |
Wir haben das Flag -n verwendet, um anzugeben, dass das System DNS zur Auflösung der IP-Adresse verwenden muss.
Normalerweise werden die Rückmeldungen an die Standardfehlerausgabe (standard error) gesendet. Um die Ergebnisse schneller herauszufiltern, können Sie sie auf die Standardausgabe (standard out) umleiten. Wir werden dazu die Bash-Syntax 2>&1 verwenden. Anschließend filtern wir die Ergebnisse mit grep. Wenden wir dies auf unser Beispiel an:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep erfolgreich |
Die Ausgabe wird ähnlich wie folgt aussehen:
![]()
Die Ausgabe zeigt, dass im angegebenen Bereich nur Port 22 für Verbindungen geöffnet ist. Port 22 ist zufällig der traditionelle SSH-Port.
Kommunikation über Netcat: Wie funktioniert es?
Als Nächstes werden wir sehen, wie Sie Netcat verwenden können, um TCP- und UDP-Pakete zu senden. Darüber hinaus kann es auch Pakete auf verschiedenen Ports empfangen. Dank dieser Fähigkeit können Sie zwei Netcat-Instanzen verwenden, um eine Client-Server-Beziehung aufzubauen. Zu Beginn bestimmen Sie den Client und den Server. Nach der Erstkonfiguration können beide Clients Pakete in beide Richtungen senden und empfangen.
Natürlich müssen Sie Netcat auf einem System so konfigurieren, dass es auf einem Port auf Verbindungen lauscht. Dazu müssen Sie den Parameter -l verwenden. Damit können Sie den Port Ihrer Wahl wie folgt auswählen:
|
1 |
netcat -l 4444 |
Nun lauscht TCP auf diesem Rechner auf Verbindungen auf Port 4444. Bitte beachten Sie, dass Sie als Nicht-Root- oder normaler Benutzer keinen Zugriff auf Ports unter 1000 haben.
Als Nächstes müssen Sie eine zweite Maschine konfigurieren, um eine Verbindung herzustellen. Sie verwenden dieselbe Portnummer und geben einen bestimmten Domainnamen wie folgt an:
|
1 |
netcat domain.com 4444 |
Das Ausführen dieses Befehls liefert keine Ausgabe. Es wird jedoch die Verbindung hergestellt. Das bedeutet, dass Sie anfangen können, Nachrichten von einem der Server an den anderen zu senden. Dazu müssen Sie lediglich die Nachricht eingeben und anschließend die EINGABETASTE drücken. Die Nachricht wird auf beiden Bildschirmen angezeigt.
Sobald Sie fertig sind, können Sie die TCP-Verbindung durch Drücken von STRG+D schließen.
Kann man mit Netcat Dateien senden?
Als Nächstes zeigen wir Ihnen, wie Sie Dateien über Netcat senden können. Mit einer TCP-Verbindung können Sie sowohl Nachrichten als auch andere Arten von Daten senden. Zu Beginn müssen Sie eine Maschine auswählen, die auf Verbindungen lauscht. Anstatt die Informationen jedoch direkt in den Befehl einzutippen, legen wir sie in einer Datei wie dieser ab:
|
1 |
netcat -l 4444 > received_file |
Auf dem anderen Rechner müssen Sie eine neue Textdatei erstellen. Hier ist der zu verwendende Befehl:
|
1 |
echo "Hallo, dies ist eine Datei" > original_file |
Um die Datei zu übertragen, verwenden Sie sie als Eingabe für die Verbindung auf dem Computer, der lauscht:
|
1 |
netcat domain.com 4444 < original_file |
Der andere Computer zeigt eine neue Datei namens „received_file“ an. Sie enthält alle Informationen, die wir eingegeben haben:
|
1 |
cat received_file |
Sie können dieses Dienstprogramm verwenden und es in ein Dateiübertragungsprogramm verwandeln. Nehmen wir an, Sie möchten den Inhalt eines Verzeichnisses übertragen. Wir tun dies, indem wir ein unbenanntes Tarball-Archiv erstellen, das wir auf das System übertragen und im Remote-Verzeichnis entpacken. Auf dem anderen Rechner müssen wir uns auf den Empfang der Datei vorbereiten. Wir wissen, dass wir sie entpacken und extrahieren müssen. Führen Sie dazu diesen Befehl aus:
|
1 |
netcat -l 4444 | tar xzvf - |
Der Bindestrich zeigt an, dass tar auf der Standardeingabe arbeitet. Diese kommt von Netcat auf dem ursprünglichen Server, als wir die erste Verbindung hergestellt haben.
Schließlich können wir den Inhalt des gesamten Verzeichnisses in ein Tarball-Archiv packen und wie folgt über Netcat senden:
|
1 |
tar -czf - * | netcat domain.com 4444 |
Der Bindestrich im tar-Befehl zeigt, dass wir das System anweisen, den Verzeichnisinhalt zu archivieren und zu komprimieren. Er weist es außerdem an, das Ergebnis in die Standardausgabe zu schreiben. Die Datei wird über die TCP-Verbindung an das andere Ende übertragen. Der empfangende Server entpackt sie und speichert sie im aktuellen Remote-Verzeichnis.
Genauso können Sie auch andere Arten von Daten über Netcat übertragen. Viele Menschen verwenden den dd-Befehl, um Festplatten-Images zu erstellen und zu übertragen. Für eine andere Möglichkeit, Daten und Dateien zu übertragen, werfen Sie einen Blick auf unser Tutorial, das zeigt, wie Sie die Sicherheit bei der Übertragung von Dateien mit SFTP gewährleisten.
Netcat als Webserver verwenden
Eine weitere nützliche Funktion von netcat ist, dass Sie es zum Testen Ihrer Seiten verwenden können. Nehmen wir an, wir verwenden einen Server, um eine HTML-Datei wie diese zu erstellen:
|
1 |
nano index.html |
Dies ist der HTML-Code, den die Datei enthält:
|
1 2 3 4 5 6 7 8 9 10 |
<html> <head> <title>Testseite</title> </head> <body> <h1>Überschrift Ebene 1</h1> <h2>Unterüberschrift</h2> <p>Normaler Text hier</p> </body> </html> |
Geben Sie dies in die Datei ein, speichern und schließen Sie sie. Typischerweise ist Port 80 der Standard-Webport. Als normaler Benutzer ohne Root-Rechte wählen wir Port 8888. Angenommen, Sie möchten die Seite einmalig bereitstellen und überprüfen, sollten Sie diesen Befehl verwenden:
|
1 |
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888 |
Um den Inhalt der Datei zu visualisieren, öffnen Sie Ihren Browser. Rufen Sie Folgendes auf:
|
1 |
http://server_IP:8888 |
Sie können die Seite sehen, die Sie mit der HTML-Datei codiert haben:

Sobald Sie die Seite aufrufen, wird die netcat-Verbindung geschlossen. Das bedeutet, dass das Aktualisieren der Seite eine Fehlermeldung anstelle des Inhalts liefert. Dies liegt daran, dass wir sie so konfiguriert haben, dass sie die Seite nur einmal bereitstellt. Wenn Sie weiterhin Verbindungen empfangen möchten, um die Seite unbegrenzt zu sehen, verwenden Sie einen anderen Code:
|
1 |
while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done |
Hier haben wir den letzten Befehl in eine Endlosschleife gepackt. Wenn Sie die Schleife stoppen möchten, müssen Sie nur STRG-C drücken. Jetzt können Sie Ihre Seite und deren Darstellung auch nach dem Schließen der ersten Verbindung weiter betrachten. Dies ist jedoch die maximale Funktionalität, die Sie aus der Verwendung des netcat-Dienstprogramms als Webserver herausholen können. Versuchen Sie nicht, es zur Bereitstellung echter Websites zu verwenden, da es keinerlei Sicherheit bietet. Stattdessen können Sie einen Blick auf unsere Tutorials werfen, wie man Webserver-Software wie Nginx installiert oder Apache.
Fazit
In diesem Tutorial haben wir das netcat-Dienstprogramm behandelt und seine Vielseitigkeit als Werkzeug auf Ubuntu untersucht. Wie in den obigen Abschnitten beschrieben, können Sie es für Kommunikations-, Datenübertragungs- und Seitenbereitstellungszwecke verwenden. Es eignet sich perfekt für schnelle Interaktionen zwischen Servern über TCP/UDP-Verbindungen. Es ist eine sehr hilfreiche Funktion für viele grundlegende Funktionen und Diagnosen.
Viel Spaß beim Computing!
Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.