netstat: Netzwerkverbindungen prüfen

Autor: Veröffentlicht

Kurz erklärt: netstat ist ein Kommandozeilenwerkzeug, das Netzwerkverbindungen, Ports, an denen Programme auf Datenverkehr warten, und weitere Netzwerkinformationen anzeigt. Unter Linux ist es meist im Paket net-tools enthalten: Der Befehl sudo netstat -tulnp zeigt TCP- und UDP-Ports sowie die zugehörigen Prozesse. Zum Prüfen bestehender TCP-Verbindungen eignet sich sudo netstat -tnp. Eine moderne Alternative ist ss.

Was zeigt netstat und wann ist es hilfreich?

Mit netstat kannst du prüfen, mit welchen Adressen dein Computer kommuniziert und welche Programme Netzwerkdienste bereitstellen. So lässt sich beispielsweise feststellen, ob ein Webserver läuft, warum eine Anwendung einen Port nicht belegen kann oder welcher Prozess eine Verbindung zu einem anderen Gerät aufrechterhält.

Ein Port ist eine Nummer, über die Netzwerkverkehr einem bestimmten Dienst zugeordnet wird. Ein Programm, das an einem Port lauscht, wartet auf Kommunikation. Eine aktive TCP-Verbindung hingegen verbindet eine bestimmte lokale Adresse samt Port mit der Adresse und dem Port der Gegenstelle.

netstat zeigt den Zustand, der auf dem untersuchten Computer sichtbar ist. Die Ausgabe allein belegt nicht, dass ein Dienst aus dem Internet erreichbar ist: Eine Firewall, ein Router oder Netzwerkregeln des Infrastrukturanbieters können den Zugriff blockieren.

Wie installierst du netstat unter Linux?

Prüfe zunächst, ob das Werkzeug bereits verfügbar ist:

netstat --version

Meldet die Shell, dass der Befehl nicht gefunden wurde, installiere das Paket net-tools mit dem Paketmanager deiner Distribution. Typische Befehle sind:

DistributionInstallation
Debian, Ubuntusudo apt update && sudo apt install net-tools
Fedorasudo dnf install net-tools
Arch Linuxsudo pacman -S net-tools
openSUSEsudo zypper install net-tools

Für die Installation brauchst du Administratorrechte. Wenn du auf einem verwalteten Server keinen Zugriff auf sudo hast, bitte den Administrator um die Installation oder prüfe, ob der Befehl ss verfügbar ist.

Auf vielen modernen Linux-Systemen ist netstat nicht standardmäßig installiert. Zur Diagnose von Verbindungen wird ss aus dem Paket iproute2 empfohlen. Bei der Arbeit mit älteren Anleitungen und Umgebungen kann netstat weiterhin nützlich sein.

Wie prüfst du aktive Verbindungen?

Um TCP-Verbindungen ohne die Sockets anzuzeigen, die auf neue Verbindungen warten, führe folgenden Befehl aus:

sudo netstat -tnp

Die Option -t wählt TCP aus. -n zeigt Adressen und Ports numerisch an, ohne Namen aufzulösen. -p ergänzt Informationen zum Prozess. Mit sudo kannst du auch Angaben zu Prozessen anderer Benutzer sehen; ohne die nötigen Rechte können manche Informationen fehlen.

In der Spalte State steht der Verbindungszustand. ESTABLISHED bezeichnet eine bestehende Verbindung, SYN_SENT einen Verbindungsversuch und TIME_WAIT einen Zustand nach dem Verbindungsende, in dem das System die Verbindungsdaten noch aufbewahrt. Ein Eintrag mit TIME_WAIT weist für sich genommen nicht auf eine Störung hin.

Wenn dich ausschließlich bestehende TCP-Verbindungen interessieren, kannst du die Ausgabe filtern:

sudo netstat -tnp | grep ESTABLISHED

Die Spalte Local Address enthält die lokale Adresse und den lokalen Port, Foreign Address die Adresse und den Port der Gegenstelle. UDP baut Verbindungen nicht auf dieselbe Weise auf wie TCP. Deshalb haben UDP-Sockets keinen entsprechenden Zustand ESTABLISHED. Zum Prüfen dieser Sockets verwendest du sudo netstat -unp.

Wie findest du Programme, die an Ports lauschen?

Ein besonders praktischer Befehl zum Prüfen von Netzwerkdiensten ist:

sudo netstat -tulnp

Die Option -l beschränkt die Ausgabe auf lauschende Sockets, -u berücksichtigt UDP. Bei TCP siehst du den Zustand LISTEN. Bei UDP handelt es sich dagegen um Sockets, die Datagramme empfangen, nicht um das Warten auf Verbindungen im Sinne von TCP.

Ein vereinfachter Beispieleintrag kann so aussehen:

tcp  0  0  127.0.0.1:8080  0.0.0.0:*  LISTEN  2451/python3

Das bedeutet, dass der Prozess python3 mit der PID 2451 an Port 8080 lauscht, allerdings nur an der lokalen Loopback-Schnittstelle. Die PID ist die Prozesskennung. Mit ihr kannst du den Prozess genauer untersuchen, beispielsweise mit dem Befehl ps -p 2451 -f.

Die Adresse, an der ein Dienst lauscht, ist wichtig:

Verwechsle die Adresse 0.0.0.0:* in der Spalte Foreign Address nicht mit einem entfernten Client. Bei einem lauschenden Socket bedeutet sie, dass keine Gegenstelle angegeben ist.

Beispiel: Eine Anwendung kann Port 8080 nicht belegen

Wenn eine Anwendung meldet, dass Port 8080 belegt ist, prüfe die lauschenden TCP-Sockets:

sudo netstat -tlnp | grep ':8080 '

Lies die PID und den Programmnamen ab. Prüfe anschließend den Prozess mit ps -p PID -f und ersetze dabei PID durch die gefundene Nummer. Kläre, ob es sich um eine frühere Instanz deiner Anwendung oder um einen benötigten Dienst handelt. Beende erst danach das betreffende Programm auf dem dafür vorgesehenen Weg oder wähle einen anderen Port. Beende keinen unbekannten Prozess nur deshalb, weil er den Start verhindert.

Falls netstat nicht verfügbar ist, kannst du eine ähnliche Prüfung mit folgendem Befehl durchführen:

sudo ss -tulnp

Bei Problemen mit dem Zugriff von einem anderen Computer prüfst du zuerst, an welcher Adresse der Dienst lauscht und welcher Prozess dahintersteht. Untersuche erst danach die Firewall und die Netzwerkroute. So kannst du unterscheiden, ob die Anwendung nicht funktioniert oder ihr Port nicht erreichbar ist.

Siehe auch: Domain und Social Media — was sollte einheitlich sein?

Lesen Sie auch

Wie PHP-FPM PHP-Anfragen verarbeitet, sich vom Webserver unterscheidet und wie du Prozesse an Last und Hosting-Ressourcen anpasst.
BIND ist offene DNS-Serversoftware. Erfahre, welche Aufgaben sie übernimmt und wann sich der Betrieb eines eigenen Servers lohnt.
Was Polens REGON-Register und seine Kennnummer bedeuten, wie sie sich von NIP und KRS unterscheiden und wie Sie Unternehmensdaten prüfen.