2011-12-23 12:49:28 +0000 2011-12-23 12:49:28 +0000
31
31

Come posso controllare quali porte sono occupate e quali sono libere sulla mia macchina Linux?

C'è qualche comando a riga di comando o qualche altro modo per trovare ed elencare i numeri di porta occupati e liberi sulla mia macchina Linux?

Risposte (4)

42
42
42
2011-12-23 13:11:39 +0000

Il comando

netstat -antu

mostrerà tutte le porte tcp e udp in uso. L'output sarà qualcosa di simile a questo:

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 Local Address mostra la porta in uso. Se lo stato è “LISTEN” significa una porta che sta usando per le connessioni in entrata. Se l'indirizzo IP nel campo Local Address è 0.0.0.0 significa che le connessioni in entrata saranno accettate su qualsiasi indirizzo IP assegnato a un'interfaccia - quindi questo significa da connessioni originate al di fuori della vostra macchina.

Se dicesse localhost o 127.0.0.1 accetterebbe solo connessioni dalla tua macchina.

Inoltre, se aggiungi il parametro -p ed esegui 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 è mostrato come in uso è libero, tuttavia gli utenti (account non privilegiati) possono aprire solo porte superiori a 1023.

13
13
13
2012-10-12 06:02:01 +0000

Ho compilato una piccola lista io stesso.

Alcuni dei miei preferiti sono:

netstat -tulpn
lsof -i -n -P
7
7
7
2015-11-23 15:35:42 +0000

Un modo buono e affidabile per controllare le porte aperte è usare ss (sostituzione del deprecato netstat), è utilizzabile in uno script senza richiedere privilegi elevati (cioè sudo).

Uso: opzione -l per le porte in ascolto, opzione -n per bypassare la risoluzione DNS, e il filtro sulla porta sorgente NN: src :NN (sostituisci NN con la porta che vuoi monitorare). Per altre opzioni, vedi man 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 che abbiamo richiesto. Esempio con 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 porta 81 non in uso (vedi 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)
3
3
3
2014-06-30 08:25:41 +0000

Un altro modo:

telnet localhost <PORT_NUMBER>

Se la porta è libera avrete un errore. Se la porta è in uso telnet si connetterà.

(trovato su http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html )