Rufen Sie eine Liste der offenen Ports in Linux ab

191

Ich benötige einen Linux-Befehl, um alle freien offenen Ports zur Verwendung in einer Anwendung aufzulisten

lsof -i TCP| fgrep LISTEN

Wird nicht als hilfreich angesehen, da die darin aufgeführten Ports nicht unbedingt kostenlos sind. Wie liste ich freie offene Ports auf, die nicht verwendet werden?

ErrorNotFoundException
quelle

Antworten:

258
netstat -lntu

Wie von @askmish geantwortet, erhalten Sie eine Liste der Dienste, die auf Ihrem System auf TCP- und UDP-Ports ausgeführt werden

  • -l = nur Dienste, die an einem Port empfangsbereit sind
  • -n = Portnummer anzeigen, versuchen Sie nicht, den Dienstnamen aufzulösen
  • -t = TCP-Ports
  • -u = udp ports
  • -p = Name des Programms

Sie brauchen den 'p'-Parameter nicht, da Sie nur wissen möchten, welche Ports frei sind und welches Programm nicht darauf läuft.

Dies zeigt jedoch nur, welche Ports Ihres Systems belegt sind. Dies sagt Ihnen nichts über den Status Ihres Netzwerks aus, z. B. wenn Sie sich hinter NAT befinden und möchten, dass einige Dienste von außen zugänglich sind. Oder wenn die Firewall den Port für externe Besucher blockiert. In diesem Fall hilft nmap. WARNUNG: Verwenden Sie nmap nur in Netzwerken, die Ihrer Kontrolle unterliegen. Außerdem gibt es Firewall-Regeln, die nmap-Pings blockieren können. Sie müssen mit Optionen herumspielen, um korrekte Ergebnisse zu erzielen.

gemulved
quelle
19
Beachten Sie, dass dies netstatauf vielen Systemen veraltet ist und ssstattdessen verwendet werden sollte.
Johu
1
aber wenn Sie auf busybox sssind nicht inbegriffen
jcollum
90

Da ist net-toolsveraltet , können Sie die Verwendung ssBefehl statt , netstatwenn netstatauf Ihrem Gerät nicht vorhanden ist :

ss -lntu

sollte ähnlich funktionieren wie

netstat -lntu

entsprechend der eingebauten Hilfe:

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets
Eric Finn
quelle
3
Ein weiteres nützliches Flag ist -p, das die Prozess-ID des Sockets anzeigt.
Talespin_Kit
21

Dieser Befehl listet offene Netzwerkports und die Prozesse auf, deren Eigentümer sie sind:

netstat -lnptu

Danach können Sie die Ergebnisse nach Ihren genauen Spezifikationen filtern.

Sie können auch nmapfür detailliertere Ergebnisse zu Ports verwenden.

Askmish
quelle
2
Das -p-Flag erfordert für einige Prozesse root-Rechte, also wäre essudo netstat -lnptu
klaus se 30.10.14
5

Alle geöffneten Ports einschließlich Antwortverkehr:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l
Diyismus
quelle
3
Eine Liste von nur eindeutigen Portnummern und nur IPv4:netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
Aaron C. de Bruyn
+1 für das Filtern und Extrahieren der Zahlen aus dem Ergebnis. Bearbeitet, um die stderr-Ausgabe von netstat zu entfernen (die dem Ergebnis in Ubuntu einen Header hinzufügt).
Datashaman
Hmm, überlegungen. -1 für die nicht Beantwortung der Frage.
Datashaman
1

Mein Standpunkt zur ursprünglichen Frage war, dass er nach den nicht verwendeten Ports fragte, nicht nach den Ports, die derzeit mit Diensten verbunden sind. In diesem Fall gibt es keine spezielle Möglichkeit, sie aufzulisten, außer die verwendeten Ports aufzulisten und davon auszugehen, dass die anderen nicht verwendet werden.

Ein weiterer Punkt, den Sie beachten sollten: Als Benutzer können Sie keinen Port mit weniger als 1024 öffnen (dafür benötigen Sie Root-Berechtigungen).

joat
quelle
0

Der folgende Befehl funktioniert auf jedem Unix-System, das im selben Format wie Ubuntu / Debian ausgegeben wird - wobei sich die lokale Adresse in Spalte 4 befindet und die Ausgabe oben einen 2-zeiligen Header enthält. Wenn sich eine dieser Zahlen unterscheidet, ändern Sie den folgenden Befehl awk.

Wenn Sie nur IPv4 möchten:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

Wenn Sie nur IPv6 möchten:

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

Wenn Sie beides zusammen haben wollen:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

Der Befehl gibt eine Liste der Portnummern aus, die auf allen Schnittstellen empfangsbereit sind. Wenn Sie alle Ports auflisten möchten, die die localhost-Schnittstelle überwachen, verwenden Sie Folgendes:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq
Datashaman
quelle
0

Versuchen

sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' |  awk 'NR>2{print $7}' | sort -n  | uniq

und sieh dir das an.

Robokishan
quelle