Mit den Befehlen netstat, ss und lsof findest du heraus, welche Ports auf deinem System belegt sind und welche Prozesse darauf lauschen. Das ist nützlich bei der Fehlersuche im Netzwerk oder wenn ein Dienst nicht starten will.

Was ist ein lauschender Port?

Ein Port wird durch seine Nummer, die zugehörige IP-Adresse und das Protokoll (TCP oder UDP) identifiziert. Ein lauschender Port ist ein Netzwerkendpunkt, an dem ein Dienst auf eingehende Verbindungen wartet.

Jeder Port kann nur von einem Prozess gleichzeitig genutzt werden. Läuft beispielsweise Apache auf Port 80, kann Nginx diesen Port nicht verwenden, solange Apache aktiv ist.

Ports mit netstat anzeigen

Der Befehl netstat zeigt Netzwerkverbindungen und lauschende Ports an. Mit folgenden Optionen listest du alle TCP- und UDP-Ports auf:

sudo netstat -tunlp

Die Optionen im Überblick:

  • -t – TCP-Ports anzeigen
  • -u – UDP-Ports anzeigen
  • -n – Numerische Adressen statt Hostnamen
  • -l – Nur lauschende Ports
  • -p – Prozess-ID und Name anzeigen (erfordert root)

Eine typische Ausgabe sieht so aus:

Proto Recv-Q Send-Q Lokale Adresse    Fremde Adresse   Zustand  PID/Programmname
tcp        0      0 0.0.0.0:22        0.0.0.0:*        LISTEN   445/sshd
tcp        0      0 0.0.0.0:25        0.0.0.0:*        LISTEN   929/master
tcp6       0      0 :::3306           :::*             LISTEN   534/mysqld
tcp6       0      0 :::80             :::*             LISTEN   515/apache2
udp        0      0 0.0.0.0:68        0.0.0.0:*                 966/dhclient

Die wichtigsten Spalten:

  • Proto – Das verwendete Protokoll (TCP oder UDP)
  • Lokale Adresse – IP-Adresse und Portnummer
  • PID/Programmname – Prozess-ID und Name des Dienstes

Nach einem bestimmten Port filtern

Mit grep kannst du die Ausgabe auf einen bestimmten Port eingrenzen:

sudo netstat -tnlp | grep :22

Ausgabe:

tcp   0   0 0.0.0.0:22   0.0.0.0:*   LISTEN   445/sshd
tcp6  0   0 :::22        :::*        LISTEN   445/sshd

Eine leere Ausgabe bedeutet, dass kein Dienst auf diesem Port lauscht.

Ports mit ss anzeigen

Der Befehl ss ist der moderne Nachfolger von netstat. Er ist schneller und zeigt mehr Details zu TCP-Verbindungen an.

sudo ss -tunlp

Die Optionen sind identisch zu netstat. Die Ausgabe enthält zusätzliche Informationen wie Benutzer und File-Deskriptoren:

State   Recv-Q  Send-Q  Lokale Adresse:Port   Peer-Adresse:Port
LISTEN  0       128     0.0.0.0:22            0.0.0.0:*         users:(("sshd",pid=445,fd=3))
LISTEN  0       100     0.0.0.0:25            0.0.0.0:*         users:(("master",pid=929,fd=13))
LISTEN  0       128     *:3306                *:*               users:(("mysqld",pid=534,fd=30))
LISTEN  0       128     *:80                  *:*               users:(("apache2",pid=515,fd=4))

Ports mit lsof anzeigen

Der Befehl lsof listet geöffnete Dateien auf. Da auch Netzwerkverbindungen als Dateien behandelt werden, eignet er sich gut zur Port-Analyse.

sudo lsof -nP -iTCP -sTCP:LISTEN

Die Optionen:

  • -n – Portnummern nicht in Namen auflösen
  • -P – Hostnamen nicht auflösen
  • -iTCP -sTCP:LISTEN – Nur lauschende TCP-Verbindungen anzeigen

Ausgabe:

COMMAND   PID   USER     FD   TYPE  DEVICE  SIZE/OFF  NODE  NAME
sshd      445   root     3u   IPv4  16434   0t0       TCP   *:22 (LISTEN)
apache2   515   root     4u   IPv6  16590   0t0       TCP   *:80 (LISTEN)
mysqld    534   mysql   30u   IPv6  17636   0t0       TCP   *:3306 (LISTEN)
master    929   root    13u   IPv4  19637   0t0       TCP   *:25 (LISTEN)

Einen bestimmten Port abfragen

Um zu prüfen, welcher Prozess auf Port 3306 lauscht:

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

Ausgabe:

COMMAND  PID   USER   FD   TYPE  DEVICE  SIZE/OFF  NODE  NAME
mysqld   534   mysql  30u  IPv6  17636   0t0       TCP   *:3306 (LISTEN)

Zusammenfassung

Alle drei Befehle zeigen lauschende Ports an:

  • netstat -tunlp – Klassischer Befehl, weit verbreitet
  • ss -tunlp – Moderner Ersatz für netstat, schneller
  • lsof -nP -iTCP -sTCP:LISTEN – Zeigt detaillierte Prozessinformationen

Mit grep oder der Port-Option bei lsof filterst du gezielt nach bestimmten Ports.