Esiste un comando da riga di comando o un altro modo per trovare ed elencare i numeri di porta occupati e liberi sulla mia macchina Linux?
Esiste un comando da riga di comando o un altro modo per trovare ed elencare i numeri di porta occupati e liberi sulla mia macchina Linux?
Risposte:
Il comando
netstat -antu
mostrerà tutte le porte tcp e udp in uso. L'output sarà simile al seguente:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN
Il numero dopo i due punti nel campo Indirizzo locale indica la porta in uso. Se lo stato è "ASCOLTA" significa una porta che sta utilizzando per le connessioni in entrata. Se l'indirizzo IP nel Local Address
campo 0.0.0.0
indica che le connessioni in entrata saranno accettate su qualsiasi indirizzo IP assegnato a un'interfaccia, quindi ciò significa dalle connessioni che hanno origine al di fuori della macchina.
Se lo dicesse localhost
o 127.0.0.1
accetterebbe solo connessioni dalla tua macchina.
Inoltre, se aggiungi il -p
parametro ed eseguilo come root, mostrerà il processo che ha aperto la porta:
$ 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
Tutto ciò che non viene mostrato come in uso è gratuito, tuttavia gli utenti (account non privilegiati) possono aprire solo porte superiori a 1023.
-antu
può essere scritto come -tuna
🐟
Ho compilato una piccola lista me stesso.
Alcuni dei miei preferiti sono:
netstat -tulpn
lsof -i -n -P
Un modo valido e affidabile per verificare la presenza di porte aperte è l'utilizzo ss
(sostituzione per i deprecati netstat
), è utilizzabile in uno script senza richiedere privilegi elevati (ad es sudo
.).
Utilizzo: opzione -l
per le porte di ascolto, opzione -n
per bypassare la risoluzione DNS e filtro sulla porta di origine NN
: src :NN
(sostituire NN
con la porta che si desidera monitorare). Per ulteriori opzioni, vedereman ss
ss -ln src :NN
Esempi:
[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
E in uno script, usando grep, possiamo verificare se l'output contiene la porta richiesta. Esempio con la porta 80 in uso (vedi sopra):
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)
Esempio con la porta 81 non in uso (vedere sopra)
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)
Un altro modo:
telnet localhost <PORT_NUMBER>
Se la porta è libera, verrà visualizzato un errore. Se la porta è in uso, Telnet si connetterà.
(disponibile su http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html )