Der Befehl
netstat -antu
zeigt alle verwendeten TCP- und UDP-Ports an. Die Ausgabe sieht in 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 Local Address
Feld ist 0.0.0.0
Das bedeutet, dass eingehende Verbindungen auf jeder IP-Adresse akzeptiert werden, die einer Schnittstelle zugewiesen ist – also von Verbindungen, die von außerhalb Ihres Computers stammen.
Wenn dort localhost
stand oder 127.0.0.1
es würde nur Verbindungen von Ihrem Rechner akzeptieren.
Zusätzlich, wenn Sie den -p
hinzufügen Parameter und führen Sie es als root aus, es 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 kostenlos, Benutzer (nicht privilegierte Konten) können jedoch nur Ports über 1023 öffnen.
Ich habe mir 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 von ss
(Ersatz für den veralteten netstat
), kann es in einem Skript verwendet werden, ohne dass erhöhte Berechtigungen erforderlich sind (z. B. sudo
).
Verwendung:Option -l
für lauschende Ports Option -n
um die DNS-Auflösung zu umgehen, und den Filter auf Quellport NN
:src :NN
(ersetzen Sie NN
nach dem Port, den Sie überwachen möchten). Weitere Optionen finden Sie unter man ss
ss -ln src :NN
Beispiele:
[[email protected] ~]# ss -ln src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
[[email protected] ~]# 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 angeforderten Port enthält. Beispiel mit Port 80 in Verwendung (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 verwendetem 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)