GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Netcat (nc) Befehl mit Beispielen

Netcat (oder nc ) ist ein Befehlszeilendienstprogramm, das Daten über Netzwerkverbindungen unter Verwendung des TCP- oder UDP-Protokolls liest und schreibt. Es ist eines der leistungsstärksten Tools im Arsenal von Netzwerk- und Systemadministratoren und gilt als Schweizer Taschenmesser unter den Netzwerk-Tools.

Netcat ist plattformübergreifend und für Linux, macOS, Windows und BSD verfügbar. Sie können Netcat verwenden, um Netzwerkverbindungen zu debuggen und zu überwachen, nach offenen Ports zu suchen, Daten zu übertragen, als Proxy zu fungieren und vieles mehr.

Das Netcat-Paket ist auf macOS und gängigen Linux-Distributionen wie Ubuntu, Debian oder CentOS vorinstalliert.

Netcat-Syntax #

Die grundlegendste Syntax des Netcat-Dienstprogramms hat die folgende Form:

nc [options] host port

Unter Ubuntu können Sie entweder netcat verwenden oder nc . Beide sind symbolische Links zur openBSD-Version von Netcat.

Standardmäßig versucht Netcat, eine TCP-Verbindung zum angegebenen Host und Port aufzubauen. Wenn Sie eine UDP-Verbindung aufbauen möchten, verwenden Sie den -u Möglichkeit:

nc -u host port

Port-Scannen #

Das Scannen von Ports ist eine der häufigsten Anwendungen für Netcat. Sie können einen einzelnen Port oder einen Portbereich scannen.

Um beispielsweise nach offenen Ports im Bereich 20-80 zu suchen, würden Sie den folgenden Befehl verwenden:

nc -z -v 10.10.8.8 20-80

Das -z Option teilt nc mit um nur nach offenen Ports zu scannen, ohne Daten an sie zu senden und das -v Option, um ausführlichere Informationen bereitzustellen.

Die Ausgabe sieht in etwa so aus:

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused
...
nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Wenn Sie nur die Zeilen mit den offenen Ports drucken möchten, können Sie die Ergebnisse mit grep filtern Befehl.

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Sie können auch Netcat verwenden, um die Serversoftware und ihre Version zu finden. Wenn Sie beispielsweise einen „EXIT“-Befehl an den Server auf dem Standard-SSH-Port 22 senden:

echo "EXIT" | nc 10.10.8.8 22

Die Ausgabe sieht in etwa so aus:

SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.

Um nach UDP-Ports zu scannen, fügen Sie einfach den -u hinzu Option für den Befehl wie unten gezeigt:

nc -z -v -u 10.10.8.8 20-80

Typischerweise ist Nmap ein besseres Tool als Netcat für komplexe Port-Scans.

Senden von Dateien über Netcat #

Netcat kann verwendet werden, um Daten von einem Host zu einem anderen zu übertragen, indem ein grundlegendes Client/Server-Modell erstellt wird.

Dies funktioniert, indem Netcat so eingestellt wird, dass es auf einem bestimmten Port lauscht (mit dem Befehl -l Option) auf dem empfangenden Host und dann Aufbau einer regulären TCP-Verbindung vom anderen Host und Senden der Datei darüber.

Führen Sie beim Empfangen den folgenden Befehl aus, der den Port 5555 für eingehende Verbindungen öffnet und die Ausgabe in die Datei umleitet:

nc -l 5555 > file_name

Verbinden Sie sich vom sendenden Host mit dem empfangenden Host und senden Sie die Datei:

nc receiving.host.com 5555 < file_name

Um ein Verzeichnis zu übertragen, können Sie tar verwenden um das Verzeichnis auf dem Quellhost zu archivieren und das Archiv auf dem Zielhost zu extrahieren.

Stellen Sie auf dem empfangenden Host das Netcat-Tool so ein, dass es auf eine eingehende Verbindung auf Port 5555 wartet. Die eingehenden Daten werden an tar geleitet Befehl, der das Archiv entpacken wird:

nc -l 5555 | tar xzvf -

Packen Sie auf dem sendenden Host das Verzeichnis und senden Sie die Daten, indem Sie sich mit dem lauschenden nc verbinden Prozess auf dem empfangenden Host:

tar czvf - /path/to/dir | nc receiving.host.com 5555

Sie können den Übertragungsfortschritt an beiden Enden verfolgen. Wenn Sie fertig sind, geben Sie CTRL+C ein um die Verbindung zu schließen.

Erstellen eines einfachen Chat-Servers #

Das Verfahren zum Erstellen eines Online-Chats zwischen zwei oder mehr Hosts ist das gleiche wie beim Übertragen von Dateien.

Starten Sie auf dem ersten Host einen Netcat-Prozess, um auf Port 5555 zu lauschen:

nc -l 5555

Führen Sie auf dem zweiten Host den folgenden Befehl aus, um eine Verbindung zum Überwachungsport herzustellen:

nc first.host.com 5555

Wenn Sie nun eine Nachricht eingeben und ENTER drücken es wird auf beiden Hosts angezeigt.

Um die Verbindung zu schließen, geben Sie CTRL+C ein .

Ausführen einer HTTP-Anfrage #

Obwohl es für HTTP-Anfragen viel bessere Tools wie curl gibt , können Sie Netcat auch verwenden, um verschiedene Anfragen an entfernte Server zu senden.

Um beispielsweise die Netcat-Manpage von der OpenBSD-Website abzurufen, würden Sie Folgendes eingeben:

printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80

Die vollständige Antwort, einschließlich der HTTP-Header und des HTML-Codes, wird im Terminal ausgegeben.

Schlussfolgerung #

In diesem Lernprogramm haben Sie gelernt, wie Sie mit dem Netcat-Dienstprogramm TCP- und UDP-Verbindungen herstellen und testen.

Besuchen Sie für weitere Informationen die Netcat-Manpage und lesen Sie mehr über alle anderen leistungsstarken Optionen des Netcat-Befehls.

Wenn Sie Fragen oder Anmerkungen haben, hinterlassen Sie bitte unten einen Kommentar.


Linux
  1. wc Linux-Befehl mit Beispielen

  2. Linux Tee-Befehl mit Beispielen

  3. Linux-Kopfbefehl mit Beispielen

  4. Nohup-Befehl mit Beispielen

  5. JQ-Befehl in Linux mit Beispielen

15 Linux-PS-Befehl mit Beispielen

Linux-CD-Befehl mit Beispielen

Linux-Uhrbefehl mit Beispielen

Wartebefehl in Linux mit Beispielen

Linux-IP-Befehl mit Beispielen

Verlaufsbefehl mit Beispielen