2011-12-23 12:49:28 +0000 2011-12-23 12:49:28 +0000
31
31

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?

Antworten (4)

42
42
42
2011-12-23 13:11:39 +0000

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.

13
13
13
2012-10-12 06:02:01 +0000

Ich habe selbst eine kleine Liste zusammengestellt.

Einige meiner Favoriten sind:

netstat -tulpn
lsof -i -n -P
7
7
7
2015-11-23 15:35:42 +0000

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)
3
3
3
2014-06-30 08:25:41 +0000

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 )