Difference between revisions of "Netcat"

From mxlinuxusers.de
Jump to navigation Jump to search
m
(netcat Optionen ergänzt)
Tag: Made through Tor
Line 13: Line 13:
 
* netcat-openbsd
 
* netcat-openbsd
 
** Dieses Paket enthält die OpenBSD-Implementierung von netcat, inklusive Unterstützung für IPv6, Proxys und Unix-Sockets.
 
** Dieses Paket enthält die OpenBSD-Implementierung von netcat, inklusive Unterstützung für IPv6, Proxys und Unix-Sockets.
 +
== Optionen ==
 +
{| class="wikitable"
 +
|-
 +
! Option !! Beschreibung
 +
|-
 +
| -c SHELL-KOMMANDO || führt nach der Verbindungsaufnahme das SHELL-KOMMANDO aus (gefährlich!)
 +
|-
 +
| -e DATEI || führt nach der Verbindungsaufnahme die in DATEI gespeicherten Kommandos aus (gefährlich!)
 +
|-
 +
| -b || erlaubt Broadcast
 +
|-
 +
|| -h || Hilfe
 +
|-
 +
| -i SEK || Anzahl Sekunden für die Verzögerung beim Senden von Zeilen oder beim Port-Scannen
 +
|-
 +
| -k || wartet nach Verbindungsende auf eine neue Verbindungsaufnahme
 +
|-
 +
| -l || wartet (lauscht) auf eingehende Verbindungen (Serverseite)
 +
|-
 +
| -n || akzeptiert nur numerische IP-Adressen, keine DNS
 +
|-
 +
| -o DATEI || schreibt einen Hexdump des Datenverkehrs nach DATEI. Kann u.a. zur Fehleranalyse benutzt werden
 +
|-
 +
| -p PORT || Nummer des Ports, der benutzt wird
 +
|-
 +
| -r || zufällige Auswahl des lokalen und entfernten Ports
 +
|-
 +
| -q SEKUNDEN || wartet nach Verbindungsende noch die Anzahl SEKUNDEN bis zum Abbruch
 +
|-
 +
| -s ADRESSE || lokale Adresse der Quelle
 +
|-
 +
| -T tos || set Type Of Service
 +
|-
 +
| -t || Telnet-Modus, ermöglicht die Verbindungsaufnahme über Telnet. Steht nicht bei allen netcat-Varianten zur Verfügung
 +
|-
 +
| -u || UDP Modus (schneller als TCP, es findet aber keine Kontrolle statt, ob die übertragenen Daten auch korrekt ankommen)
 +
|-
 +
| -v || ausführliche Meldungen (nützlich zur Fehlersuche)
 +
|-
 +
| -w SEKUNDEN || wartet Anzahl Sekunden bis die Verbindung aufgegeben wird
 +
|-
 +
| -C || benutzt CR/LF zum Zeilenumbruch. Nützlich für Übertrgungen nach Windows, da dort CR/LF der Standard für das Zeilenende ist
 +
|-
 +
| -z || Portscanner-Modus (zero-I/O mode), es wird nur nach lauschenden Diensten gescannt ohne Daten zu schicken
 +
|}
 +
 
== Verwendung ==
 
== Verwendung ==
 
Um beim Befehlsaufruf von netcat unabhängig von der verwendeten Variante (s.o) zu sein und auch um Schreibarbeit zu sparen, kann man netcat auch einfach als
 
Um beim Befehlsaufruf von netcat unabhängig von der verwendeten Variante (s.o) zu sein und auch um Schreibarbeit zu sparen, kann man netcat auch einfach als

Revision as of 19:05, 25 July 2020

Möchte man Dateien mal schnell ohne großen Aufwand übers Netz von einem Rechner zum anderen kopieren muss es nicht immer SAMBA oder NFS sein. Neben scp kann dafür u.a. auch netcat benutzt werden.

netcat ist ein einfaches Unix-Programm, das über Netzwerkverbindungen per TCP oder UDP Daten liest und schreibt. Es wurde als zuverlässiges »Backend«-Programm entwickelt, das entweder direkt oder von anderen Programmen und Skripten aus benutzt werden kann. Gleichzeitig ist es ein funktionsreiches Netzwerk-Debugging- und -Erkundungsprogramm, weil es beinahe jede Art von Verbindung aufbauen kann, die man benötigt, und einige interessante Funktionen eingebaut hat. Nicht umsonst wird es wegen seiner Vielseitigkeit auch als "Schweizer Taschenmesser für TCP/IP" bezeichnet.

Allerdings überträgt netcat die Daten unverschlüsselt, so daß man beim Datentransfer übers Internet lieber cryptcat benutzen sollte, das ähnliche - allerdings abgespeckte - Funktionen wie netcat besitzt, dafür aber die zu übertragenden Daten mit der Methode Twofish verschlüsselt.

Installation

In den Repos liegen drei Varianten von netcat, von denen aber nur die letzten zwei tatsächlich in Betracht kommen.

  • netcat
    • Dies ist nur ein Pseudopaket, das von der voreingestellten Version von netcat abhängt, um das Upgrade zu vereinfachen. Sollte es also installiert sein, kann es entfentwerden.
  • netcat-traditional
    • Das ist ursprüngliche Version, oder anders gesagt, das „klassische“ netcat. Gegenüber dem nachfolgenden netcat-openbsd fehlen ihm einige neue Funktionen. Trotzdem erfüllt es seine Aufgabe völlig und wer sich nicht unbedingt in alle Feinheiten von netcat vertiefen möchte, kann ohne Bedenken auch zu netcat-traditional greifen, zumal viele ältere Anleitungen sich noch dieses klassische netcat beziehen.
  • netcat-openbsd
    • Dieses Paket enthält die OpenBSD-Implementierung von netcat, inklusive Unterstützung für IPv6, Proxys und Unix-Sockets.

Optionen

Option Beschreibung
-c SHELL-KOMMANDO führt nach der Verbindungsaufnahme das SHELL-KOMMANDO aus (gefährlich!)
-e DATEI führt nach der Verbindungsaufnahme die in DATEI gespeicherten Kommandos aus (gefährlich!)
-b erlaubt Broadcast
-h Hilfe
-i SEK Anzahl Sekunden für die Verzögerung beim Senden von Zeilen oder beim Port-Scannen
-k wartet nach Verbindungsende auf eine neue Verbindungsaufnahme
-l wartet (lauscht) auf eingehende Verbindungen (Serverseite)
-n akzeptiert nur numerische IP-Adressen, keine DNS
-o DATEI schreibt einen Hexdump des Datenverkehrs nach DATEI. Kann u.a. zur Fehleranalyse benutzt werden
-p PORT Nummer des Ports, der benutzt wird
-r zufällige Auswahl des lokalen und entfernten Ports
-q SEKUNDEN wartet nach Verbindungsende noch die Anzahl SEKUNDEN bis zum Abbruch
-s ADRESSE lokale Adresse der Quelle
-T tos set Type Of Service
-t Telnet-Modus, ermöglicht die Verbindungsaufnahme über Telnet. Steht nicht bei allen netcat-Varianten zur Verfügung
-u UDP Modus (schneller als TCP, es findet aber keine Kontrolle statt, ob die übertragenen Daten auch korrekt ankommen)
-v ausführliche Meldungen (nützlich zur Fehlersuche)
-w SEKUNDEN wartet Anzahl Sekunden bis die Verbindung aufgegeben wird
-C benutzt CR/LF zum Zeilenumbruch. Nützlich für Übertrgungen nach Windows, da dort CR/LF der Standard für das Zeilenende ist
-z Portscanner-Modus (zero-I/O mode), es wird nur nach lauschenden Diensten gescannt ohne Daten zu schicken

Verwendung

Um beim Befehlsaufruf von netcat unabhängig von der verwendeten Variante (s.o) zu sein und auch um Schreibarbeit zu sparen, kann man netcat auch einfach als

nc

aufrufen.

netcat arbeitet nach dem Client-Server-Prinzip, das heisst es muss auf beiden Rechnern laufen, damit man damit arbeiten kann. Zuerst startet man es auf dem Server

nc -l PORT

wobei PORT ein geeigneter freier lokaler Port sein muss. So gestartet läuft netcat auf dem Server und lauscht dabei auf dem angegebenen Port auf eingehende Verbindungen von der Gegenseite, dem Client.

Dann startet man netcat auf dem Client:

nc [-u] ZIELRECHNER ZIELPORT
  • ZIELRECHNER = Hostname oder IP-Adresse des Rechners, mit dem man sich verbinden will
  • ZIELPORT = der Port, an dem netcat auf der Gegenseite lauscht
  • -u = optionaler Parameter, wenn angegeben benutzt netcat statt TCP das verbindungslose UDP.

Wichtig ist, daß netcat auf dem Zielrechner schon im Serverstatus laufen muss, sonst bricht netcat mit einer Fehlermeldung ab.

Zum weiteren Verständnis ist unbedingt wichtig zu wissen, daß alle ausgehenden Daten auf dem Client durch die Standardeingabe der Shell (stdin) über das Netzwerk an den Kommunikationspartner geschickt werden und die ankommenden Daten auf dem Server auf der Standardausgabe der Shell (stdout) ausgegeben werden. Dieser Mechanismus hat den Vorteil, daß die zu kopierenden Daten mittels Skripten bei Bedarf auch beliebig verarbeitet werden können. Beachten sollte man aber, daß zumindest das klassische netcat keine eigene Möglichkeit hat, die Daten verschlüsselt zu übertragen. Wird dies gewünscht, so muss man entweder vorher auf Linux-eigene Verschlüsselungen zurückgreifen oder das neuere netcat-openbsd benutzen.

Hört sich komplizierter an als es ist und wird hoffentlich durch die nacfolgenden kleinen Beispiele klarer.

Dateien kopieren

für die folgenden Beispiele wird jetzt immer der willkürlich gewählte Port 2000 benutzt. kopieren von Datei ORIGINAL (vom Client) nach Datei KOPIE (auf dem Server ZIEL)

nc -l 2000 > ZIEL        # Starten von netcat auf Serverseite
nc ZIEL 2000 < ORIGINAL  # netcat auf Client schickt die Datei ORIGINL nach dem Server ZIEL

wurde alles richtig kopiert, so erfolgt Linux-typisch keinerlei Meldung und beide netcat beenden ihren Dienst. Möchte man netcat auf dem Server weiterlaufen lassen, so muss man ihm zusätzlich den Parameter -k mitgeben.

Möchte man mehrere Dateien (z.B. alle Dateien eines Verzeichnisses) kopieren, so kann man sie z.B. mit Hilfe eines Packprogrammes (hier tar und zip) auf dem Client zu einer gepackten Datei zusammenfassen und auf der Serverseite in ähnlicher Seite wieder entpacken:

nc -l 2000 | gunzip | tar vx    # Entpacken der ursprünglichen Verzeichnisstruktur auf dem Zielrechner
tar vc * | gzip | nc ziel 2000  # Packen aller Dateien (*) im aktuellen Verzeichnis

Anmerkung für alle tar Ent- und Ungewöhnten: vc und vx sind Opionen des tar-Kommandos

  • v = ausführliche Ausgabe (verbose)
  • c = Archiv erstellen (create)
  • x = Archiv entpacken (extract)

Weblinks