Frage Erhalten Sie eine Liste der offenen Ports in Linux


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

lsof -i TCP| fgrep LISTEN

Hilft nicht, da die Ports, die es auflistet, nicht unbedingt kostenlos zu verwenden sind. Wie liste ich freie offene Ports auf, die nicht verwendet werden?


151
2018-01-08 07:34


Ursprung


//, Was ist, wenn netstat auf dem Host nicht verfügbar ist? - Nathan Basanese


Antworten:


netstat -lntu

wie geantwortet von @askmish gibt Ihnen eine Liste der Dienste, die auf Ihrem System auf tcp und UDP-Ports laufen

  • -l = nur Dienste, die auf einem Port warten
  • -n = Portnummer anzeigen, versuchen Sie nicht, den Servicenamen aufzulösen
  • -t = TCP-Ports
  • -u = UDP-Ports
  • -p = Name des Programms

Sie brauchen den Parameter 'p' nicht, da Sie nur daran interessiert sind, welche Ports frei sind und nicht, welches Programm darauf läuft.

Dies zeigt jedoch nur, welche Ports auf Ihrem System aufgebraucht sind. Dadurch erfahren Sie nicht den Status Ihres Netzwerks, z. wenn Sie hinter NAT stehen 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 kommt nmap zu Hilfe. WARNUNG: Verwenden Sie nmap nur in Netzwerken, die sich unter Ihrer Kontrolle befinden. Außerdem gibt es Firewall-Regeln, die nmap-Pings blockieren können, Sie müssen mit Optionen herumspielen, um korrekte Ergebnisse zu erhalten.


217
2018-01-08 11:51



Beachten Sie, dass netstat ist auf vielen Systemen veraltet und ss sollte stattdessen verwendet werden. - Johu


Schon seit net-tools ist veraltet, du kannst den ... benutzen ss Befehl Anstatt von netstat ob netstat ist nicht auf Ihrer Maschine vorhanden:

ss -lntu

sollte ähnlich funktionieren

netstat -lntu

nach 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

53
2018-06-08 20:19





Dieser Befehl listet offene Netzwerk-Ports und die Prozesse, die sie besitzen, auf:

netstat -lnptu

Danach können Sie die Ergebnisse genau nach Ihren Angaben filtern.

Du könntest auch benutzen nmap für detailliertere Ergebnisse zu Ports.


19
2018-01-08 07:45



Das Flag -p erfordert Root-Berechtigungen für einige Prozesse, so wäre es sudo netstat -lnptu - klaus se


Alle geöffneten Ports einschließlich Antwortverkehr:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l

4
2017-11-03 04:33



Eine Liste von gerade eindeutige Portnummern und nur IPv4: netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq - Aaron C. de Bruyn
+1, um zu zeigen, wie die Zahlen aus dem Ergebnis gefiltert und extrahiert werden. Bearbeitet, um die stderr-Ausgabe von netstat zu entfernen (die dem Ergebnis in Ubuntu einen Header hinzufügt). - datashaman
Hmm, bei zweiten Gedanken. -1 um die Frage nicht zu beantworten. - datashaman


Der folgende Befehl funktioniert auf jedem Unix, der im selben Format wie Ubuntu / Debian ausgibt - wobei sich die lokale Adresse in der Spalte 4 befindet und die Ausgabe eine 2-zeilige Überschrift am Anfang enthält. Wenn eine dieser Zahlen unterschiedlich ist, optimieren Sie den awk-Befehl unten.

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 wollen:

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

Wenn Sie beide zusammen 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 an allen Schnittstellen überwacht werden. Wenn Sie alle Ports auflisten möchten, die auf der localhost-Schnittstelle überwacht werden, verwenden Sie Folgendes:

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

0
2018-04-04 06:29