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 PortnummerPID/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 verbreitetss -tunlp– Moderner Ersatz für netstat, schnellerlsof -nP -iTCP -sTCP:LISTEN– Zeigt detaillierte Prozessinformationen
Mit grep oder der Port-Option bei lsof filterst du gezielt nach bestimmten Ports.