Comando ss in Linux: controllare porte in ascolto e connessioni
ss mostra i socket locali e aiuta a individuare porte in ascolto, indirizzi associati e stati delle connessioni. È utile per verificare se un servizio attende connessioni sulla porta prevista; vedere un socket, però, non dimostra che un client esterno possa raggiungerlo.
Un socket è un punto di comunicazione gestito dal sistema operativo. TCP (Transmission Control Protocol) usa connessioni; UDP (User Datagram Protocol) scambia datagrammi senza una connessione di trasporto come quella TCP. ss distingue questi protocolli e può mostrare anche socket locali Unix.
Sintassi e selezione dei socket
ss [option] [filter]
Questa è una sintassi descrittiva: le parentesi e i segnaposto non si digitano. Controlla la versione disponibile con ss -V e le opzioni con ss --help o man ss. Il programma fa parte di iproute2; disponibilità e dettagli dipendono dalla distribuzione e dalla versione installata.
Senza opzioni, ss mostra normalmente socket non in ascolto. Per cercare i servizi in attesa usa -l; per includere socket in ascolto e non in ascolto usa -a. Seleziona TCP con -t e UDP con -u, invece di interpretare un elenco generico come inventario delle sole porte del server.
Esempi di consultazione
Porte TCP in ascolto
ss -ltn
Combina ascolto (-l), TCP (-t) e numeri al posto dei nomi dei servizi (-n). Cerca la porta attesa nella colonna dell'indirizzo locale. Un elenco vuoto significa che non sono stati trovati socket corrispondenti in quel momento e nel contesto osservato: non è una scansione delle porte di un altro computer.
Socket TCP e UDP con informazioni sui processi
sudo ss -ltnup
Aggiunge UDP (-u) e i processi (-p). Usa sudo solo se disponi dell'autorizzazione e servono privilegi aggiuntivi per vedere i proprietari; per la semplice lista dei socket puoi iniziare senza elevazione. Per UDP puoi incontrare UNCONN: non indica da solo un errore del servizio né equivale allo stato TCP LISTEN.
Socket TCP relativi alla porta 22
ss -tn '( sport = :22 or dport = :22 )'
Il filtro seleziona la porta locale con sport oppure quella remota con dport. Le virgolette fanno arrivare parentesi e operatori a ss come un'unica espressione. Il numero 22 è un esempio, comunemente usato da SSH (Secure Shell): un numero di porta non identifica con certezza l'applicazione.
Questo comando non include automaticamente i socket in ascolto. Per cercare il listener usa l'esempio con -l; per limitare l'elenco a connessioni TCP già stabilite puoi aggiungere il filtro di stato state established. La colonna State rimane essenziale: socket non in ascolto e connessione stabilita non sono sinonimi in ogni situazione.
Leggere indirizzo locale e stato LISTEN
Riprendiamo il primo comando:
ss -ltn
Ecco una parte di output illustrativo, non una rilevazione della tua macchina. Indirizzi, colonne e valori delle code possono variare:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN indica che il socket TCP attende connessioni. Local Address:Port è il punto locale; Peer Address:Port riguarda l'altro estremo. In questa riga il peer non è un client già collegato e il valore 128 non è un conteggio di 128 utenti connessi.
0.0.0.0:22 rappresenta l'ascolto sulla porta 22 per gli indirizzi IPv4 locali disponibili nel contesto di rete del socket. Non è l'indirizzo da dare al client: usa l'indirizzo effettivo del server. Un socket vincolato a 127.0.0.1 accetta accessi diretti tramite loopback, cioè dalla stessa macchina, e non tramite un'interfaccia esterna.
IPv4 e IPv6 vanno controllati separatamente quando necessario, usando -4 o -6. Non dedurre da una riga IPv4 che esista anche un listener IPv6. La sola presenza di un listener non verifica firewall, regole cloud, instradamento o funzionamento dell'applicazione.
Opzioni principali
| Opzione | Uso |
|---|---|
-l |
Mostra soltanto i socket in ascolto, omessi dalla vista predefinita. |
-t / -u |
Seleziona TCP oppure UDP; si possono combinare. |
-n |
Usa valori numerici, evitando i nomi dei servizi per le porte. |
-p |
Aggiunge informazioni sui processi, quando sono accessibili. |
-a |
Include socket in ascolto e non in ascolto. |
-s |
Mostra statistiche riepilogative sui socket. |
Un riepilogo non sostituisce l'elenco delle singole porte. Anche UDP può avere un socket con un destinatario predefinito impostato tramite connect, ma ciò non crea il collegamento TCP né conferma che il destinatario risponda.
Verificare un problema di accesso o un conflitto
- Confronta protocollo, indirizzo e porta configurati nel servizio con quelli mostrati da ss. Se il servizio è vincolato soltanto al loopback, un accesso diretto all'indirizzo esterno non raggiunge quel listener.
- Per un possibile conflitto TCP consulta
ss -ltnpe identifica il processo se i permessi lo consentono. Non terminare un processo soltanto perché usa lo stesso numero di porta: considera anche indirizzo, protocollo e configurazione del servizio. - Se il listener è presente ma l'accesso fallisce, verifica separatamente percorso di rete, firewall locale e regole del provider. La guida al comando ip e ai percorsi di rete aiuta a distinguere indirizzo e instradamento.
- Dopo una modifica autorizzata alla configurazione del servizio, rileggi i socket e verifica l'accesso dal client interessato con il protocollo previsto. ss da solo non esegue questa prova applicativa.
Le informazioni sui processi possono mancare per limiti di accesso o perché il socket non ha più un processo proprietario visibile, per esempio in alcuni stati TCP successivi alla chiusura. Un campo vuoto non dimostra che la porta sia libera. Inoltre un contenitore o uno spazio dei nomi di rete separato può mostrare socket diversi dall'host: osserva il contesto in cui gira il servizio.
I comandi eseguibili riportati qui servono alla consultazione. Non aggiungere -K per ottenere più dettagli: quell'opzione tenta di chiudere forzatamente socket e può interrompere collegamenti.
Domande frequenti
Perché la porta compare in ss ma un client esterno non si collega?
Controlla prima l'indirizzo di ascolto e la famiglia IP. Poi verifica instradamento, firewall e regole cloud, oltre al servizio stesso. Un listener locale è una condizione utile per la diagnosi, ma non certifica la raggiungibilità dal client.
Documentazione di riferimento
Il manuale ss di iproute2 descrive selezioni, filtri e opzioni. I manuali Linux di TCP e UDP spiegano la differenza tra ascolto, connessione e datagrammi.




