Wie man Netcat zum Erstellen und Testen von TCP- und UDP-Verbindungen verwendet

0 Aktien
0
0
0
0

Einführung

Linux ist bekannt für seine große Auswahl an ausgereiften und nützlichen Kommandozeilen-Tools, die in den meisten Distributionen verfügbar sind. Systemadministratoren können viele ihrer Aufgaben oft mit den integrierten Tools erledigen, ohne zusätzliche Software installieren zu müssen. In dieser Anleitung erklären wir die Verwendung des Tools netcat. Mit diesem vielseitigen Befehl können Sie Netzwerkverbindungen überwachen, testen und Daten darüber senden. Netcat ist in nahezu jeder modernen Linux-Distribution enthalten. Ubuntu wird mit der BSD-Variante von netcat ausgeliefert, die wir in dieser Anleitung verwenden werden. Andere Versionen funktionieren möglicherweise anders oder bieten andere Optionen.

Allgemeine Anweisungen

Standardmäßig funktioniert netcat, indem es eine TCP-Verbindung zu einem Remote-Host herstellt.

Der grundlegendste Befehl lautet:

netcat [options] host port

Hiermit wird versucht, eine TCP-Verbindung zum angegebenen Host auf der angegebenen Portnummer herzustellen. Dies ist vergleichbar mit dem alten Linux-Befehl „telnet“. Beachten Sie, dass Ihre Verbindung nicht vollständig verschlüsselt ist.

Wenn Sie ein UDP-Paket senden möchten, anstatt eine TCP-Verbindung herzustellen, können Sie die Option -u verwenden:

netcat -u host port

Sie können einen Portbereich angeben, indem Sie zwischen dem ersten und dem letzten Port einen Bindestrich setzen:

netcat host startport-endport

Dies wird üblicherweise mit einigen zusätzlichen Flags verwendet.

Auf den meisten Systemen können wir netcat und nc synonym verwenden. Es handelt sich um Aliase für denselben Befehl.

Befehl zur Verwendung von Netcat für Port-Scanning

Netcat wird häufig als Portscanner eingesetzt. Obwohl Netcat dafür wahrscheinlich nicht das ausgefeilteste Tool ist (Nmap ist in den meisten Fällen die bessere Wahl), kann es einfache Portscans durchführen, um offene Ports schnell zu identifizieren. Dazu geben wir, wie oben beschrieben, einen Portbereich zum Scannen an und verwenden die Option `-z`, um den Scan durchzuführen, anstatt eine Verbindung herzustellen.

Beispielsweise können wir alle Ports bis 1000 scannen, indem wir folgenden Befehl ausführen:

netcat -z -v domain.com 1-1000

Zusammen mit der Option -z haben wir auch die Option -v angegeben, um netcat anzuweisen, detailliertere Informationen bereitzustellen.

Die Ausgabe wird wie folgt aussehen:

Output
nc: connect to domain.com port 1 (tcp) failed: Connection refused
nc: connect to domain.com port 2 (tcp) failed: Connection refused
nc: connect to domain.com port 3 (tcp) failed: Connection refused
nc: connect to domain.com port 4 (tcp) failed: Connection refused
nc: connect to domain.com port 5 (tcp) failed: Connection refused
nc: connect to domain.com port 6 (tcp) failed: Connection refused
nc: connect to domain.com port 7 (tcp) failed: Connection refused
. . .
Connection to domain.com 22 port [tcp/ssh] succeeded!
. . .

Wie Sie sehen, liefert dies viele Informationen und zeigt für jeden Port an, ob der Scan erfolgreich war oder nicht. Wenn Sie tatsächlich einen Domainnamen verwenden, sollten Sie dieses Format nutzen.

Wenn Sie jedoch die benötigte IP-Adresse kennen, wird Ihr Scan deutlich schneller. Sie können dann den Parameter -n verwenden, um anzugeben, dass die IP-Adresse nicht per DNS aufgelöst werden muss:

netcat -z -n -v 198.51.100.0 1-1000

Die Rückgabemeldungen werden standardmäßig an die Fehlerbehandlungs-App gesendet (weitere Informationen finden Sie in unserem Artikel zur E/A-Umleitung). Wir können diese Standardfehlermeldungen auch an die Standardausgabe weiterleiten, wodurch wir die Ergebnisse leichter filtern können.

Wir leiten die Standardfehlerausgabe mithilfe der Bash-Syntax 2>&1 in die Standardausgabe um. Anschließend filtern wir die Ergebnisse mit grep :

netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep succeeded
Output
Connection to 198.51.100.0 22 port [tcp/*] succeeded!

Hier sehen wir, dass der einzige offene Port im Bereich von 1 bis 1000 auf dem Remote-Computer Port 22 ist, der traditionelle SSH-Port.

Wie man über NetCat kommuniziert

Netcat ist nicht auf das Senden von TCP- und UDP-Paketen beschränkt. Es kann auch an einem Port auf Verbindungen und Pakete warten. Dadurch können wir zwei Netcat-Instanzen in einer Client-Server-Beziehung verbinden.

Welcher Computer als Server und welcher als Client fungiert, ist nur bei der Erstkonfiguration relevant. Sobald die Verbindung hergestellt ist, verläuft die Kommunikation in beide Richtungen exakt gleich.

Auf einem Rechner kann man netcat anweisen, auf Verbindungen an einem bestimmten Port zu lauschen. Dies geschieht durch Angabe des Parameters -l und Auswahl eines Ports:

netcat -l 4444

Dies weist Netcat an, auf Port 4444 auf TCP-Verbindungen zu lauschen. Als normaler Benutzer (nicht als Root) können Sie aus Sicherheitsgründen keine Ports unter 1000 öffnen.

Auf dem zweiten Server können wir uns über die von uns gewählte Portnummer mit dem ersten Rechner verbinden. Wir gehen dabei genauso vor wie zuvor:

netcat domain.com 4444

Es wird so aussehen, als wäre nichts geschehen. Sie können nun jedoch auf beiden Seiten der Verbindung Nachrichten senden, die auf beiden Seiten sichtbar sind.

Geben Sie eine Nachricht ein und drücken Sie die Eingabetaste. Sie wird sowohl auf dem lokalen als auch auf dem entfernten Bildschirm angezeigt. Dies funktioniert auch umgekehrt.

Wenn Sie mit dem Senden der Nachricht fertig sind, können Sie die TCP-Verbindung durch Drücken von STRG-D schließen.

Wie man Dateien über Netcat sendet

Anhand des vorherigen Beispiels lassen sich weitere nützliche Dinge anstellen. Da wir eine reguläre TCP-Verbindung herstellen, können wir nahezu alle Datentypen über diese Verbindung übertragen. Dies beschränkt sich nicht auf vom Benutzer eingegebene Chatnachrichten. Wir können dieses Wissen nutzen, um netcat in ein Dateiübertragungsprogramm umzuwandeln.

Wir müssen erneut einen Verbindungsendpunkt auswählen, an dem auf Verbindungen gewartet werden soll. Anstatt die Informationen jedoch wie im vorherigen Beispiel auf dem Bildschirm auszugeben, werden wir alle Informationen direkt in eine Datei schreiben:

netcat -l 4444 > received_file

Dieser Befehl leitet die gesamte netcat-Ausgabe in die angegebene Datei um.

Erstellen Sie auf dem zweiten Computer eine einfache Textdatei, indem Sie Folgendes eingeben:

echo "Hello, this is a file" > original_file

Wir können diese Datei nun als Eingabe für die Netcat-Verbindung verwenden, die wir mit dem empfangenden Computer herstellen. Die Datei wird während der interaktiven Eingabe übertragen:

netcat domain.com 4444 < original_file

Auf dem Computer, der auf die Verbindung wartete, sehen wir, dass nun eine neue Datei namens receive_file existiert, die den Inhalt der Datei enthält, die wir auf dem anderen Computer erstellt haben:

cat received_file
Output
Hello, this is a file

Wie Sie sehen, können wir durch die Verknüpfung von Objekten diese Verbindung problemlos nutzen, um alle möglichen Daten zu übertragen. Beispielsweise können wir den Inhalt eines gesamten Verzeichnisses übertragen, indem wir ein unbenanntes Tar-Archiv erstellen, es auf das Zielsystem übertragen und dort entpacken.

Nach Abschluss des Downloads erhalten Sie eine Datei, die entpackt und durch Eingabe von folgendem Befehl geöffnet werden muss:

netcat -l 4444 | tar xzvf -

Der nachfolgende Bindestrich (-) bedeutet, dass tar mit Standardeingaben arbeitet, die über das Netzwerk weitergeleitet werden, wenn eine Verbindung von netcat hergestellt wird.

Zusammen mit dem Inhalt des Verzeichnisses, den wir übertragen möchten, können wir diesen in ein Tar-Archiv packen und dann über netcat an den Remote-Computer senden:

tar -czf - * | netcat domain.com 4444

Diesmal bedeutet der Bindestrich im Befehl `tar`, dass der Inhalt des aktuellen Verzeichnisses (wie durch das * angezeigt) mit `tar` gepackt und gezippt wird und das Ergebnis auf die Standardausgabe geschrieben wird. Anschließend wird es direkt über die TCP-Verbindung übertragen, am anderen Ende empfangen und im aktuellen Verzeichnis des Remote-Computers entpackt. Dies ist nur ein Beispiel für eine komplexere Datenübertragung zwischen Computern. Eine weitere gängige Methode ist die Verwendung des Befehls `dd`, um ein Festplattenabbild zu erstellen und es auf einen Remote-Computer zu übertragen. Darauf gehen wir hier jedoch nicht näher ein.

Wie man Netcat als einfachen Webserver verwendet

Wir haben netcat so konfiguriert, dass es Verbindungen für die Kommunikation und den Dateiaustausch entgegennimmt. Dasselbe Prinzip lässt sich anwenden, um netcat als einfachen Webserver zu nutzen. Dies kann zum Testen der erstellten Seiten hilfreich sein.

Als Erstes erstellen wir eine einfache HTML-Datei auf einem Server:

nano index.html

Hier ist einfacher HTML-Code, den Sie in Ihrer Datei verwenden können:

<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Level 1 header</h1>
<h2>Subheading</h2>
<p>Normal text here</p>
</body>
</html>

Datei speichern und schließen.

Ohne Root-Rechte kann diese Datei nicht über den Standard-Webport, Port 80, bereitgestellt werden. Als normaler Benutzer können wir Port 8888 wählen.

Wenn Sie diese Seite nur einmalig ausliefern möchten, um zu überprüfen, wie sie dargestellt wird, können Sie folgenden Befehl ausführen:

printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888

Sie können die Inhalte nun in Ihrem Browser aufrufen, indem Sie folgende Seite besuchen:

http://server_IP:8888

Die Seite wird geladen, anschließend wird die Netcat-Verbindung geschlossen. Beim Versuch, die Seite neu zu laden, gehen die Daten verloren.


Wir können netcat dazu bringen, die Seite unbegrenzt zu rendern, indem wir den letzten Befehl in eine Endlosschleife einfügen, etwa so:

while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done

Dadurch kann der Server auch nach dem Schließen der ersten Verbindung weiterhin Verbindungen annehmen. Die Schleife lässt sich durch Drücken von Strg+C auf dem Server beenden. So können Sie sehen, wie eine Seite im Browser dargestellt wird, die Leistung verbessert sich dadurch aber kaum. Verwenden Sie diese Methode niemals zum Rendern echter Webseiten. Es gibt keine Sicherheitsvorkehrungen, und selbst einfache Dinge wie Links funktionieren nicht richtig.

Ergebnis

Sie sollten nun eine gute Vorstellung davon haben, wofür netcat eingesetzt werden kann. Es ist ein vielseitiges Werkzeug, das sich zur Fehlerdiagnose und zur Überprüfung der korrekten Funktion grundlegender TCP/UDP-Verbindungen eignet. Mit netcat lassen sich Verbindungen zwischen verschiedenen Computern einfach herstellen, um schnell miteinander zu kommunizieren. Netcat vereinfacht die Netzwerkkommunikation zwischen Computern, indem es die Komplexität des Verbindungsaufbaus reduziert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte Ihnen auch gefallen

VPN-Auto-Disconnect-Software

Was ist eine VPN-Auto-Disconnect-Software? Eine VPN-Auto-Disconnect-Software ist eine fortschrittliche Sicherheitsmaßnahme, die…