Ottieni un elenco di Open Ports in Linux


191

Ho bisogno di un comando Linux per elencare tutte le porte aperte gratuite da utilizzare in un'applicazione

lsof -i TCP| fgrep LISTEN

Non sembra essere d'aiuto poiché le porte che elenca non sono necessariamente gratuite per l'uso. Come posso elencare le porte aperte libere non utilizzate?

Risposte:


258
netstat -lntu

come risposto da @askmish ti fornirà un elenco di servizi in esecuzione sul tuo sistema su porte tcp e udp dove

  • -l = solo servizi in ascolto su alcune porte
  • -n = mostra il numero di porta, non tentare di risolvere il nome del servizio
  • -t = porte tcp
  • -u = porte udp
  • -p = nome del programma

Non è necessario il parametro 'p' in quanto ti interessa solo ottenere quali porte sono libere e non quale programma è in esecuzione su di esso.

Questo mostra solo quali porte del tuo sistema sono esaurite, però. Questo non ti dice lo stato della tua rete, ad esempio se sei dietro NAT e vuoi che alcuni servizi siano accessibili dall'esterno. O se il firewall sta bloccando la porta per i visitatori esterni. In tal caso, nmap viene in soccorso. ATTENZIONE: utilizzare nmap solo su reti che sono sotto il tuo controllo. Inoltre, ci sono regole del firewall che possono bloccare i ping nmap, dovrete armeggiare con le opzioni per ottenere risultati corretti.


20
Si noti che netstatè deprecato su molti sistemi e ssdeve essere utilizzato invece.
Johu,

1
ma se sei su busybox ssnon è incluso
jcollum

90

Poiché net-toolsè obsoleto , è possibile utilizzare il sscomando anziché netstatse netstatnon è presente sul computer:

ss -lntu

dovrebbe funzionare in modo simile a

netstat -lntu

secondo la guida integrata:

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets

3
Un altro flag utile è -p che mostra l'id di processo del socket.
Talespin_Kit

21

Questo comando elencherà le porte di rete aperte e i processi che le possiedono:

netstat -lnptu

puoi successivamente filtrare i risultati secondo le tue specifiche esatte.

È inoltre possibile utilizzare nmapper risultati più granulari sulle porte.


2
Il flag -p richiede i privilegi di root per alcuni processi, quindi sarebbesudo netstat -lnptu
klaus se

5

Tutte le porte aperte incluso il traffico di risposta:

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

3
Un elenco di soli numeri di porta unici e solo IPv4:netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
Aaron C. de Bruyn

+1 per mostrare come filtrare ed estrarre i numeri dal risultato. Modificato per rimuovere l'output di stderr da netstat (che aggiunge un'intestazione al risultato in Ubuntu).
datashaman

Hmm, ripensandoci. -1 per non rispondere alla domanda.
datashaman

1

La mia opinione sulla domanda originale era che stava chiedendo delle porte inutilizzate, non delle porte attualmente connesse ai servizi. In questo caso, non esiste un modo specifico per elencarli, se non elencare le porte utilizzate e supporre che le altre non siano utilizzate.

Un altro punto da tenere a mente: come utente, non sarai in grado di aprire una porta inferiore a 1024 (per questo avrai bisogno delle autorizzazioni di root).


0

Il seguente comando funzionerà su qualsiasi Unix che emette nello stesso formato di Ubuntu / Debian - dove l'indirizzo locale è nella colonna 4 e l'output include un'intestazione di 2 righe nella parte superiore. Se uno di questi numeri è diverso, modifica il comando awk di seguito.

Se vuoi solo IPv4:

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

Se vuoi solo IPv6:

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

Se vuoi entrambi insieme:

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

Il comando genera un elenco di numeri di porta in ascolto su tutte le interfacce. Se vuoi elencare tutte le porte in ascolto sull'interfaccia di localhost, usa qualcosa del genere:

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

0

Provare

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

e guarda questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.