Gibt es einen Befehlszeilenbefehl oder eine andere Möglichkeit, um die belegten und freien Portnummern auf meinem Linux-Computer zu ermitteln und aufzulisten?
Gibt es einen Befehlszeilenbefehl oder eine andere Möglichkeit, um die belegten und freien Portnummern auf meinem Linux-Computer zu ermitteln und aufzulisten?
Antworten:
Der Befehl
netstat -antu
Zeigt alle verwendeten TCP- und UDP-Ports an. Die Ausgabe sieht ungefähr 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 Nummer nach dem Doppelpunkt im Feld Lokale Adresse zeigt den verwendeten Port an. Wenn der Status "LISTEN" ist, bedeutet dies, dass ein Port für eingehende Verbindungen verwendet wird. Wenn die IP-Adresse in diesem Local Address
Feld angegeben ist 0.0.0.0
, bedeutet dies, dass eingehende Verbindungen auf jeder IP-Adresse akzeptiert werden, die einer Schnittstelle zugewiesen ist.
Wenn gesagt localhost
oder 127.0.0.1
wäre es nur , um Verbindungen von Ihrem Computer zu akzeptieren.
Wenn Sie den -p
Parameter hinzufügen und als root ausführen, wird außerdem 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 kostenlos. Benutzer (nicht privilegierte Konten) können jedoch nur Ports über 1023 öffnen.
-antu
zu -tuna
Ihrer
Ich habe selbst eine kleine Liste zusammengestellt .
Einige meiner Favoriten sind:
netstat -tulpn
lsof -i -n -P
Eine gute und zuverlässige Möglichkeit, nach geöffneten Ports zu suchen, ist die Verwendung ss
(Ersatz für die veralteten netstat
). Sie kann in einem Skript verwendet werden, ohne dass erhöhte Berechtigungen erforderlich sind (z. B. sudo
).
Verwendung: Option zum Überwachen von -l
Ports, Option -n
zum Umgehen der DNS-Auflösung und Filter für Quellport NN
: src :NN
( NN
durch den zu überwachenden Port ersetzen ). Weitere Optionen finden Sie unterman ss
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 von uns angeforderten Port enthält. Beispiel mit verwendetem 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 belegtem Port 81 (so)
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)
Ein anderer Weg:
telnet localhost <PORT_NUMBER>
Wenn der Port frei ist, erhalten Sie eine Fehlermeldung. Wenn der Port verwendet wird, stellt Telnet eine Verbindung her.
(zu finden unter http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html )