Bei der Behebung von Problemen mit der Netzwerkkonnektivität oder anwendungsspezifischen Problemen sollte eines der ersten Dinge überprüft werden, welche Ports tatsächlich auf Ihrem System verwendet werden und welche Anwendung einen bestimmten Port abhört.
In diesem Artikel wird die Verwendung von netstat
erläutert , ss
und lsof
Befehle, um herauszufinden, welche Dienste auf welchen Ports lauschen. Die Anleitung gilt für alle Linux- und Unix-basierten Betriebssysteme wie macOS.
Was ist Listening Port #
Der Netzwerkport wird durch seine Nummer, die zugehörige IP-Adresse und den Typ des Kommunikationsprotokolls wie TCP oder UDP identifiziert.
Listening Port ist ein Netzwerkport, an dem eine Anwendung oder ein Prozess lauscht und als Kommunikationsendpunkt fungiert.
Jeder Listening-Port kann mithilfe einer Firewall geöffnet oder geschlossen (gefiltert) werden. Im Allgemeinen ist ein offener Port ein Netzwerkport, der eingehende Pakete von entfernten Standorten akzeptiert.
Es ist nicht möglich, dass zwei Dienste denselben Port an derselben IP-Adresse überwachen.
Wenn Sie beispielsweise einen Apache-Webserver betreiben, der Ports 80
abhört und 443
und Sie versuchen, Nginx zu installieren, wird letzteres nicht gestartet, da die HTTP- und HTTPS-Ports bereits verwendet werden.
Listening-Ports mit netstat
prüfen #
netstat
ist ein Befehlszeilentool, das Informationen über Netzwerkverbindungen bereitstellen kann.
Verwenden Sie den folgenden Befehl, um alle TCP- oder UDP-Ports aufzulisten, die überwacht werden, einschließlich der Dienste, die die Ports und den Socket-Status verwenden:
sudo netstat -tunlp
Die in diesem Befehl verwendeten Optionen haben folgende Bedeutung:
-t
- TCP-Ports anzeigen.-u
- UDP-Ports anzeigen.-n
- Numerische Adressen anzeigen statt Hosts aufzulösen.-l
- Nur Listening Ports anzeigen.-p
- Zeigen Sie die PID und den Namen des Listener-Prozesses an. Diese Informationen werden nur angezeigt, wenn Sie den Befehl als root oder sudouser ausführen.
Die Ausgabe sieht in etwa so aus:
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 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
tcp6 0 0 :::22 :::* LISTEN 445/sshd
tcp6 0 0 :::25 :::* LISTEN 929/master
tcp6 0 0 :::33060 :::* LISTEN 534/mysqld
udp 0 0 0.0.0.0:68 0.0.0.0:* 966/dhclient
Die wichtigen Spalten in unserem Fall sind:
Proto
- Das vom Socket verwendete Protokoll.Local Address
- Die IP-Adresse und Portnummer, die der Prozess abhört.PID/Program name
- Die PID und der Name des Prozesses.
Wenn Sie die Ergebnisse filtern möchten, verwenden Sie grep
Befehl. Um beispielsweise herauszufinden, welcher Prozess auf TCP-Port 22 lauscht, würden Sie Folgendes eingeben:
sudo netstat -tnlp | grep :22
Die Ausgabe zeigt, dass auf dieser Maschine Port 22 vom SSH-Server verwendet wird:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
tcp6 0 0 :::22 :::* LISTEN 445/sshd
Wenn die Ausgabe leer ist, bedeutet dies, dass nichts auf dem Port lauscht.
Sie können die Liste auch nach Kriterien filtern, z. B. PID, Protokoll, Status usw.
netstat
ist veraltet und wird durch ss
ersetzt und ip
, aber es ist immer noch einer der am häufigsten verwendeten Befehle zum Überprüfen von Netzwerkverbindungen.
Listening-Ports mit ss
prüfen #
ss
ist das neue netstat
. Es fehlen einige der netstat
Features, macht aber mehr TCP-Zustände verfügbar und ist etwas schneller. Die Befehlsoptionen sind größtenteils gleich, daher der Übergang von netstat
zu ss
ist nicht schwierig.
Mit ss
erhalten Sie eine Liste aller Listening Ports Sie würden Folgendes eingeben:
sudo ss -tunlp
Die Ausgabe ist fast dieselbe wie die von netstat
gemeldete :
State Recv-Q Send-Q Local Address:Port Peer Address: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=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=445,fd=4))
LISTEN 0 100 [::]:25 [::]:* users:(("master",pid=929,fd=14))
LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=534,fd=33))
Listening-Ports mit lsof
prüfen #
lsof
ist ein leistungsstarkes Befehlszeilenprogramm, das Informationen über von Prozessen geöffnete Dateien bereitstellt.
Unter Linux ist alles eine Datei. Sie können sich einen Socket als eine Datei vorstellen, die in das Netzwerk schreibt.
Um eine Liste aller lauschenden TCP-Ports mit lsof
zu erhalten Typ:
sudo lsof -nP -iTCP -sTCP:LISTEN
Die verwendeten Optionen lauten wie folgt:
-n
- Portnummern nicht in Portnamen umwandeln.-p
- Hostnamen nicht auflösen, numerische Adressen anzeigen.-iTCP -sTCP:LISTEN
- Nur Netzwerkdateien mit TCP-Status LISTEN anzeigen.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 445 root 3u IPv4 16434 0t0 TCP *:22 (LISTEN)
sshd 445 root 4u IPv6 16445 0t0 TCP *:22 (LISTEN)
apache2 515 root 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
mysqld 534 mysql 33u IPv6 19973 0t0 TCP *:33060 (LISTEN)
apache2 764 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
apache2 765 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
master 929 root 13u IPv4 19637 0t0 TCP *:25 (LISTEN)
master 929 root 14u IPv6 19638 0t0 TCP *:25 (LISTEN)
Die Namen der meisten Ausgabespalten sind selbsterklärend:
COMMAND
,PID
,USER
- Der Name, die PID und der Benutzer, der das dem Port zugeordnete Programm ausführt.NAME
- Die Portnummer.
Um herauszufinden, welcher Prozess an einem bestimmten Port lauscht, z. B. Port 3306
Sie würden verwenden:
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
Die Ausgabe zeigt, dass der MySQL-Server Port 3306
verwendet :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
Weitere Informationen finden Sie auf der lsof-Manpage und lesen Sie alle anderen leistungsstarken Optionen dieses Tools.
Schlussfolgerung #
Wir haben Ihnen mehrere Befehle gezeigt, mit denen Sie überprüfen können, welche Ports auf Ihrem System verwendet werden und wie Sie herausfinden können, welcher Prozess an einem bestimmten Port lauscht.
Wenn Sie Fragen oder Anmerkungen haben, hinterlassen Sie bitte unten einen Kommentar.