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 Addresscampo 0.0.0.0indica 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 localhosto 127.0.0.1accetterebbe solo connessioni dalla tua macchina.
Inoltre, se aggiungi il -pparametro 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.
-antupuò 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 -lper le porte di ascolto, opzione -nper bypassare la risoluzione DNS e filtro sulla porta di origine NN: src :NN(sostituire NNcon 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 )