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.