Wie kann ich überprüfen, welche Ports auf meinem Linux-Rechner belegt und welche frei sind?
Gibt es einen Kommandozeilenbefehl oder eine andere Möglichkeit, die belegten und freien Portnummern auf meinem Linux-Rechner zu finden und aufzulisten?
Gibt es einen Kommandozeilenbefehl oder eine andere Möglichkeit, die belegten und freien Portnummern auf meinem Linux-Rechner zu finden und aufzulisten?
Der Befehl
netstat -antu
zeigt alle verwendeten tcp- und udp-Ports an. Die Ausgabe sieht dann etwa so aus:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN
Die Zahl nach dem Doppelpunkt im Feld Lokale Adresse zeigt den verwendeten Port an. Wenn der Status “LISTEN” ist, bedeutet dies einen Port, der für eingehende Verbindungen verwendet wird. Wenn die IP-Adresse im Feld “Local Address
” lautet, bedeutet dies, dass eingehende Verbindungen an jeder IP-Adresse akzeptiert werden, die einer Schnittstelle zugewiesen ist - also von Verbindungen, die von außerhalb Ihres Rechners stammen.
Steht dort 0.0.0.0
oder localhost
, würde dies bedeuten, dass nur Verbindungen von Ihrem Rechner akzeptiert werden.
Wenn Sie außerdem den Parameter 127.0.0.1
hinzufügen und ihn als root ausführen, wird der Prozess angezeigt, der den Port geöffnet hat:
$ sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN 860/rpc.statd
Alles, was nicht als verwendet angezeigt wird, ist frei, allerdings können Benutzer (unprivilegierte Konten) nur Ports über 1023 öffnen.
Ich habe selbst eine kleine Liste zusammengestellt.
Einige meiner Favoriten sind:
netstat -tulpn
lsof -i -n -P
Ein guter und zuverlässiger Weg, um zu prüfen, welche Ports geöffnet sind, ist die Verwendung von ss
(Ersatz für das veraltete netstat
), es ist in einem Skript verwendbar, ohne dass erhöhte Rechte erforderlich sind.
Verwendung: Option sudo
für lauschende Ports, Option -l
zum Umgehen der DNS-Auflösung und der Filter auf Quellport -n
: NN
(ersetzen Sie src :NN
durch den Port, den Sie überwachen möchten). Für weitere Optionen siehe NN
ss -ln src :NN
Beispiele:
[user@server ~]# ss -ln src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
[user@server ~]# ss -ln src :81
State Recv-Q Send-Q Local Address:Port Peer Address:Port
Und in einem Skript können wir mit grep testen, ob die Ausgabe den gewünschten Port enthält. Beispiel mit genutztem Port 80 (siehe oben):
myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if ["$result" -eq 1]; then
echo "Port $myport is in use (result == $result) "
else
echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 80 is in use (result == 1)
Beispiel mit nicht genutztem Port 81 (siehe oben):
myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if ["$result" -eq 1]; then
echo "Port $myport is in use (result == $result) "
else
echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 81 is NOT in use (result == 0)
Eine andere Möglichkeit:
telnet localhost <PORT_NUMBER>
Wenn der Port frei ist, erhalten Sie einen Fehler. Wenn der Port in Gebrauch ist, wird telnet eine Verbindung herstellen.
(gefunden auf http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html )