netstat Linux: Netzwerkstatus und -aktivität überwachen

Foto des Autors

By Jan

Was ist netstat?

netstat ist ein leistungsstarkes Netzwerkdiagnosetool, das dir einen umfassenden Überblick über den Netzwerkstatus und die -aktivität deines Linux-Systems gibt. Es ermöglicht dir, Verbindungen zu verfolgen, Protokollinformationen zu extrahieren, Routing-Tabellen zu überprüfen und vieles mehr.

Wozu dient netstat?

Mit netstat kannst du eine Vielzahl von Aufgaben erledigen, darunter:

  • Überwachung des Netzwerkverkehrs in Echtzeit oder über einen bestimmten Zeitraum
  • Identifizierung von Netzwerkproblemen und -engpässen
  • Analyse von Netzwerkaktivitäten für Sicherheits- oder Fehlerbehebungszwecke
  • Überprüfung der Konfiguration von Netzwerkgeräten und -diensten
  • Verwaltung von Firewall-Regeln und IP-Adresszuweisungen

Vorteile von netstat

netstat bietet zahlreiche Vorteile gegenüber anderen Netzwerküberwachungstools:

  • Vielseitigkeit: Es kann verwendet werden, um verschiedene Aspekte des Netzwerkverkehrs zu untersuchen, einschließlich TCP- und UDP-Verbindungen, Routing-Informationen und Statistiken zur Netzwerkaktivität.
  • Kommandozeile: netstat ist ein Befehlszeilentool, das eine präzise Steuerung und Automatisierung ermöglicht.
  • Plattformunabhängigkeit: Es ist auf den meisten Linux-Distributionen verfügbar und bietet eine einheitliche Oberfläche für die Netzwerküberwachung.
  • Open Source: netstat ist ein quelloffenes Tool, das kostenlos heruntergeladen und verwendet werden kann.

Funktionsweise von netstat

netstat sammelt Informationen aus verschiedenen Quellen, darunter Kernel-Datenstrukturen, Routing-Tabellen und Protokollaufrufe. Diese Informationen werden dann in einem benutzerfreundlichen Format angezeigt, das es dir ermöglicht, die Netzwerkaktivitäten deines Systems zu verstehen und zu analysieren.

netstat unter Linux

netstat ist ein vielseitiges Befehlszeilenprogramm, das dir umfassende Einblicke in den Netzwerkstatus und die -aktivität deines Linux-Systems ermöglicht. Es ist ein wertvolles Werkzeug für Systemadministratoren, Netzwerktechniker und alle, die ein tiefes Verständnis des Netzwerkverkehrs wünschen.

Installation

netstat ist ein Standardbestandteil der meisten Linux-Distributionen. Wenn es auf deinem System nicht installiert ist, kannst du es mit deinem Paketmanager installieren.

sudo apt-get install netstat (Debian/Ubuntu)
sudo yum install netstat (Red Hat/CentOS)

Grundlegende Verwendung

Um netstat auszuführen, öffnest du einfach ein Terminalfenster und gibst den Befehl ohne Argumente ein:

netstat

Dies zeigt eine grundlegende Übersicht über den aktuellen Netzwerkstatus an, einschließlich:

  • Liste der aktiven TCP- und UDP-Verbindungen
  • Lokale und Remote-Adressen für jede Verbindung
  • Verbindungsstatus (ESTABLISHED, CLOSE_WAIT usw.)

Erweiterte Optionen

netstat bietet eine Vielzahl von Optionen und Flags, die es dir ermöglichen, die Ausgabe anzupassen und spezifische Informationen abzurufen.

Optionen:

  • -a: Zeigt alle Sockets an, auch wenn sie nicht verbunden sind
  • -e: Zeigt erweiterte Statistiken an, wie z. B. Pakete, Bytes und Fehler
  • -i: Zeigt Informationen zur Netzwerkschnittstelle an
  • -l: Hört auf einem Socket auf Änderungen und zeigt diese in Echtzeit an
  • -n: Zeigt die Adressen in numerischer Form an (keine DNS-Auflösung)

Flags:

  • -p: Zeigt die Prozess-IDs für Verbindungen an
  • -s: Zeigt einen Überblick über die Netzwerkstatistiken an
  • -r: Zeigt die Routing-Tabelle an
  • -t: Zeigt TCP-Verbindungen an
  • -u: Zeigt UDP-Verbindungen an

Optionen und Flags von netstat

Um die Funktionalität von netstat anzupassen, kannst du eine Vielzahl von Optionen und Flags verwenden. Dies ermöglicht es dir, die Ausgabe zu filtern, bestimmte Informationen auszugeben und die Befehlsausführung zu steuern.

Allgemeine Optionen

  • -a: Zeige alle Socket-Verbindungen an, auch diejenigen im LISTEN-Modus.
  • -e: Zeige erweiterte Informationen, einschließlich Statistiken zu Netzwerkadaptern und Multicast-Mitgliedschaften.
  • -i: Zeige Statistiken zu Netzwerkadaptern und Schnittstellen an.
  • -l: Zeige nur Socket-Verbindungen im LISTEN-Modus an.
  • -n: Löse IP-Adressen in ihren Domainnamen auf.
  • -p: Zeige die Prozess-IDs von Prozessen an, die an Socket-Verbindungen beteiligt sind.
  • -r: Zeige die Routing-Tabelle an.
  • -s: Zeige eine Zusammenfassung der Netzwerkstatistiken an.
  • -t: Zeige nur TCP-Verbindungen an.
  • -u: Zeige nur UDP-Verbindungen an.

Protokollspezifische Optionen

Neben den allgemeinen Optionen bietet netstat auch protokollspezifische Optionen, mit denen du Informationen zu bestimmten Netzwerkprotokollen abfragen kannst.

  • -f: Zeige die Adresse der Socket-Datei pro Socket an (für Unix-Domain-Sockets).
  • -g: Zeige die Multicast-Mitgliedschaften an.
  • -m: Zeige die Multipath-Routing-Informationen an.
  • -o: Zeige die Socket-Optionen an.
  • -X: Zeige ausführliche TCP-Protokollinformationen an, einschließlich TCP-Optionen und Fenstergrößen.

Filter und Sortierung

Du kannst Filter und Sortierungen verwenden, um die Ausgabe von netstat zu verfeinern und so die Informationen zu erhalten, die du benötigst.

  • -c: Aktualisiere ständig die Ausgabe von netstat.
  • -w: Warte zwischen den Aktualisierungen (mit -c verwendet).
  • -filter: Filtere die Ausgabe von netstat nach bestimmten Kriterien (z. B. nach Port, Prozess-ID oder IP-Adresse).
  • -sort: Sortiere die Ausgabe von netstat nach einem bestimmten Feld (z. B. nach Portnummer oder Prozess-ID).

Diese Optionen und Flags bieten dir eine umfassende Kontrolle über die Ausgabe von netstat, sodass du die Netzwerkaktivität deines Linux-Systems genau überwachen kannst.

Protokollinformationen auslesen

Wenn du dich für die Protokolle interessierst, die von deinen Netzwerkverbindungen verwendet werden, bietet dir netstat mehrere Optionen zum Abrufen dieser Informationen.

### -p

Die Option -p zeigt dir das Protokoll an, das einem bestimmten Socket zugeordnet ist. Dies kann hilfreich sein, um zu bestimmen, welches Protokoll für eine bestimmte Verbindung verwendet wird.

netstat -p

### -A

Die Option -A zeigt alle Protokolle an, die auf deinem System aktiv sind. Dies kann dir einen Überblick über die verwendeten Protokolle geben.

netstat -A

### -f

Die Option -f zeigt den vollständigen Namen des Protokolls an einem Socket an. Dies kann nützlich sein, um zwischen verschiedenen Protokollversionen zu unterscheiden.

netstat -f

Socket-Status anzeigen

Um den Status von Netzwerk-Sockets anzuzeigen, verwende die Option -a oder --all. Diese Option listet alle aktiven Sockets auf, einschließlich TCP- (Transmission Control Protocol), UDP- (User Datagram Protocol) und RAW-Sockets.

Status-Flags

Zu den angezeigten Status-Flags gehören:

  • ESTABLISHED: Der Socket ist mit einem anderen Computer verbunden und Daten werden übertragen.
  • SYN_SENT: Der Socket hat eine Verbindungsanfrage gesendet und wartet auf eine Antwort.
  • SYN_RCVD: Der Socket hat eine Verbindungsanfrage empfangen und sendet eine Bestätigung.
  • FIN_WAIT1: Der Socket wartet auf die Bestätigung einer Verbindungstrennungsanfrage.
  • FIN_WAIT2: Der Socket wartet auf die Bestätigung einer Verbindungstrennungsanfrage vom Remote-Computer.
  • TIME_WAIT: Der Socket befindet sich in einem Wartezeitraum, nachdem eine Verbindung getrennt wurde.
  • CLOSED: Der Socket ist geschlossen und wird nicht verwendet.

Socket-Typen

Die angezeigten Socket-Typen umfassen:

  • TCP: Zuverlässiger, stromorientierter Transportprotokoll-Socket.
  • UDP: Unzuverlässiger, verbindungsloser Transportprotokoll-Socket.
  • RAW: Socket, der direkten Zugriff auf die Netzwerkhardware bietet.

Port-Informationen

Neben dem Socket-Status zeigt netstat auch die Portnummern an, mit denen der Socket verbunden ist. Portnummern identifizieren die Dienste, die den Socket verwenden.

Beispiele

Um alle aktiven Sockets anzuzeigen, kannst du den folgenden Befehl verwenden:

netstat -a

Um nur TCP-Sockets anzuzeigen, verwende:

netstat -at

Um nur UDP-Sockets anzuzeigen, verwende:

netstat -au

Routing-Tabellen prüfen

Mit netstat kannst du auch die Routing-Tabellen deines Systems überprüfen. Diese Tabellen enthalten Informationen darüber, wie Datenpakete zu ihrem Ziel weitergeleitet werden.

Wie lese ich die Routing-Tabelle?

Um die Routing-Tabelle anzuzeigen, verwende diese Option:

netstat -r

Die Ausgabe enthält Spalten wie folgt:

  • Destination: Das Zielnetzwerk oder der Host
  • Gateway: Der nächste Hop auf dem Weg zum Ziel
  • Genmask: Die Genmask (Netzwerkmaske) des Zielnetzes
  • Flags: Markierungen, die den Status der Route angeben (z. B. U für Up, G für Gateway)
  • Metric: Der Kostenfaktor für die Route
  • Ref: Die Anzahl der Verweise auf die Route
  • Use: Die Anzahl der Male, die die Route verwendet wurde
  • Iface: Die Schnittstelle, über die der Datenverkehr geleitet wird

Zusätzliche Optionen für die Routing-Tabelle

  • -n: Anzeige von IP-Adressen in numerischer Form
  • -p: Anzeige von Routing-Einträgen für ein bestimmtes Protokoll (z. B. -p tcp)
  • -s: Anzeige einer Zusammenfassung der Routing-Tabelle
  • -t: Anzeige der Art der Routing-Tabelle (z. B. -t inet)

Troubleshooting mit der Routing-Tabelle

Wenn du Probleme mit der Netzwerkverbindung hast, kannst du die Routing-Tabelle überprüfen, um nach Hinweisen zu suchen. Beispielsweise könnten fehlerhafte Einträge verhindern, dass der Datenverkehr richtig geroutet wird.

Du kannst netstat auch verwenden, um die Standard-Gateway-Adresse deines Systems zu überprüfen, indem du diese Option verwendest:

netstat -rn | grep default

Die Ausgabe sollte eine Zeile mit dem Ziel 0.0.0.0 und dem Gateway YourGatewayAddress enthalten.

Offene Ports auflisten

Mit netstat kannst du alle offenen Ports auf deinem Linux-System auflisten, sowohl TCP- als auch UDP-Ports. Dies ist hilfreich, um zu sehen, welche Dienste auf deinem System ausgeführt werden und welche Ports sie verwenden.

Option zum Auflisten offener Ports

Um alle offenen Ports auf deinem System aufzulisten, verwende die folgende Option:

netstat -nap
  • -n zeigt die IP-Adressen und Portnummern in numerischer Form an.
  • -a listet alle Ports auf, auch die, die im LISTEN-Zustand sind.
  • -p zeigt die Prozess-ID (PID) des Prozesses an, der den Port verwendet.

Erläuterung der Ausgabe

Die Ausgabe von netstat -nap enthält die folgenden Informationen für jeden offenen Port:

  • Proto: Das Protokoll, das für den Port verwendet wird, entweder TCP oder UDP.
  • Local Address: Die lokale IP-Adresse und die Portnummer des Ports.
  • Foreign Address: Die Remote-IP-Adresse und die Portnummer des Ports, zu dem der lokale Port eine Verbindung herstellt. Wenn kein Remote-Port angegeben ist, hört der lokale Port auf eingehende Verbindungen.
  • State: Der Status des Ports. Mögliche Zustände sind:

    • LISTEN: Der Port wartet auf eingehende Verbindungen.
    • ESTABLISHED: Der Port ist mit einem Remote-Port verbunden.
    • TIME_WAIT: Der Port war noch vor kurzem mit einem Remote-Port verbunden und wartet darauf, dass die Verbindung vollständig beendet wird.
    • CLOSE_WAIT: Der Port wartet darauf, dass die Verbindung vom Remote-Host geschlossen wird.
    • LAST_ACK: Der Port wartet darauf, dass der Remote-Host eine Bestätigung für das Schließen der Verbindung sendet.
    • CLOSED: Der Port ist geschlossen.
    • SYN_SENT: Der Port wartet auf eine Bestätigung vom Remote-Host für eine Verbindungsanfrage.
    • SYN_RECV: Der Port hat eine Verbindungsanfrage vom Remote-Host erhalten und wartet auf eine Bestätigung.
  • PID/Program name: Die Prozess-ID (PID) des Prozesses, der den Port verwendet, und der Name des Programms.

Beispiel

Die folgende Ausgabe von netstat -nap zeigt eine Liste offener Ports auf einem Linux-System:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22            0.0.0.0:*               LISTEN      1326/sshd         
tcp        0      0 127.0.0.1:631          0.0.0.0:*               LISTEN      311/cupsd          
tcp        0      0 0.0.0.0:80            0.0.0.0:*               LISTEN      653/nginx         
tcp        0      0 127.0.0.1:7399         127.0.0.1:35587        ESTABLISHED 1970/redis-server  
udp        0      0 0.0.0.0:67             0.0.0.0:*                           1214/dhclient     
udp        0      0 127.0.0.1:7399         127.0.0.1:35588        ESTABLISHED 1970/redis-server  
udp        0      0 127.0.0.1:5353         127.0.0.1:35589        ESTABLISHED 1970/redis-server  

Diese Ausgabe zeigt, dass die folgenden Ports auf dem System geöffnet sind:

  • Port 22 (TCP) wird von SSH verwendet.
  • Port 631 (TCP) wird von CUPS verwendet.
  • Port 80 (TCP) wird von Nginx verwendet.
  • Port 7399 (TCP) wird von Redis Server verwendet.
  • Port 67 (UDP) wird von DHCP-Client verwendet.
  • Port 5353 (UDP) wird von Redis Server verwendet.

Netzwerkstatistiken abfragen

Mit netstat kannst du auch umfassende Netzwerkstatistiken abrufen. Diese Statistiken geben dir Aufschluss über die Gesamtmenge der übertragenen Daten, die Anzahl der erstellten Verbindungen und andere wichtige Metriken.

Insgesamt übertragene Daten

Um die insgesamt übertragene Datenmenge zu ermitteln, verwende die Option -s:

netstat -s

Diese Ausgabe enthält eine Aufschlüsselung des ein- und ausgehenden Datenverkehrs für alle Protokolle.

Anzahl der Verbindungen

Um die Gesamtzahl der erstellten Verbindungen anzuzeigen, verwende die Option -c:

netstat -c

Diese Ausgabe zeigt die Anzahl der aktiven, inaktiven und geschlossenen Verbindungen an.

Weitere Statistiken

Zusätzlich zu diesen grundlegenden Statistiken kannst du mit netstat auch weitere Informationen abrufen, wie z. B.:

  • Anzahl der Verbindungsversuche
  • Anzahl der zurückgesetzten Verbindungen
  • Anzahl der verworfenen Pakete

Verwende für eine vollständige Liste der verfügbaren Statistiken die Option --help:

netstat --help

Prozess-IDs von Verbindungen ermitteln

Wenn du den Prozess identifizieren musst, der für eine bestimmte Netzwerkverbindung verantwortlich ist, kannst du mit netstat die Prozess-ID (PID) ermitteln.

Verwendung der Option -p

Verwende die Option -p, um die PID in die Ausgabe von netstat einzubeziehen:

netstat -p

Die Ausgabe enthält zusätzlich zur Standardinformation die Spalte PID/Program name. Die PID wird als Dezimalzahl angezeigt.

Verbindung zu einem Prozess herstellen

Du kannst eine direkte Verbindung zu einem Prozess herstellen, indem du die PID zusammen mit der Option -A verwendest:

netstat -pA | grep <PID>

Ersetze <PID> durch die Prozess-ID des Prozesses, mit dem du dich verbinden möchtest.

Fehlersuche bei nicht gefundenen PIDs

In einigen Fällen kann netstat keine PIDs für bestimmte Verbindungen anzeigen. Dies kann passieren, wenn:

  • Der Prozess bereits beendet wurde.
  • Der Prozess keine Netzwerkverbindungen herstellt.
  • Die PID nicht in der /proc-Dateisystem verfügbar ist.

In solchen Fällen kannst du versuchen, den Prozess mit der Befehlszeile zu identifizieren:

ps aux | grep <port number>

Ersetze <port number> durch die Portnummer der Verbindung, an der du interessiert bist.

Filter und Sortierung verwenden

Um deine Ergebnisse einzugrenzen und fokussierte Informationen zu erhalten, bietet netstat eine Reihe von Filter- und Sortieroptionen.

Filtern nach Protokoll, Adresse oder Port

Du kannst die Ausgabe nach bestimmten Protokollen (-p), IP-Adressen (-A) oder Ports (-n) filtern. Beispielsweise kannst du mit dem folgenden Befehl nur TCP-Verbindungen auflisten:

netstat -ptcp

Filtern nach Verbindungsstatus

Mit dem Flag -e kannst du alle geöffneten Verbindungen anzeigen. Du kannst aber auch nach bestimmten Verbindungsstatus filtern, wie z. B.:

  • ESTABLISHED: Vollständig etablierte Verbindungen
  • LISTEN: Abhörende Verbindungen
  • CLOSE_WAIT: Verbindungen, bei denen der Empfänger die Anfrage zum Beenden bestätigt hat
  • TIME_WAIT: Verbindungen, die auf den Ablauf eines Timers warten

Sortieren nach verschiedenen Kriterien

Du kannst die Ausgabe nach verschiedenen Kriterien sortieren, unter anderem:

  • -l: Sortierung nach lokalen Adressen
  • -r: Sortierung nach Remote-Adressen
  • -n: Sortierung nach Ports
  • -i: Sortierung nach Netzwerk-Schnittstellen

So kannst du beispielsweise die Ergebnisse nach der lokalen Adresse sortieren:

netstat -tnl

Kombinieren von Filtern und Sortierungen

Du kannst mehrere Filter- und Sortieroptionen kombinieren, um die Ausgabe noch weiter zu verfeinern. Beispielsweise kannst du mit dem folgenden Befehl nur TCP-Verbindungen auflisten, die sich im ESTABLISHED-Status befinden:

netstat -ptcp -e | grep ESTABLISHED

Erweitertes Debugging mit netstat

Für komplexere Debugging-Aufgaben bietet netstat eine Vielzahl erweiterter Optionen und Flags.

Sockets debuggen

Um die Socket-Aufrufe eines bestimmten Prozesses zu überwachen, verwende die Option -s. Dies kann hilfreich sein, um Socket-Leaks oder andere Probleme mit Socket-Verbindungen zu identifizieren. Netstat zeigt dann eine Aufschlüsselung der Socket-Aufrufe nach Protokoll und Status an.

netstat -s

Routing-Tabellen filtern

Manchmal ist es notwendig, die Routing-Tabelle für bestimmte Ziele oder Schnittstellen zu filtern. Die Option -rn kann verwendet werden, um die Routing-Tabelle nach verschiedenen Kriterien zu filtern, z. B. Zieladresse, Schnittstellenname oder Gateway.

netstat -rn | grep 8.8.8.8

TCP-Verbindungsstatus anzeigen

Die Option -tcp zeigt detaillierte Informationen über alle aktiven TCP-Verbindungen an, einschließlich des Verbindungsstatus, der lokalen und Remote-Adressen und Ports sowie der Prozess-ID des zugehörigen Prozesses.

netstat -tcp

Prozesse nach Verbindungen filtern

Um Prozesse nach ihren Netzwerkverbindungen zu filtern, verwende die Option -p. Dies kann hilfreich sein, um zu ermitteln, welche Prozesse auf bestimmte Ports zugreifen oder welche Ports ein bestimmter Prozess verwendet.

netstat -p | grep PID

Weitere erweiterte Debugging-Funktionen

Zusätzlich zu den oben genannten Optionen bietet netstat eine Reihe weiterer erweiterter Debugging-Funktionen, darunter:

  • -c: Deaktiviert den Cache und erzwingt, dass netstat die Informationen aus dem Kernel holt.
  • --raw | -r: Zeigt die Ergebnisse in Rohformat an.
  • -x: Aktiviert die Anzeige von erweiterten Informationen, wie z. B. Prozessname, PID und Socket-Typ.
  • --numeric | -n: Deaktiviert die Namensauflösung und zeigt IP-Adressen in numerischer Form an.

Schreibe einen Kommentar