Skip to main content
  1. Comandi/

ss - socket statistics

·4 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

Mostra lo stato di tutti i socket di rete del sistema — porte in ascolto, connessioni attive, socket Unix. Sostituisce netstat che e' deprecato sui sistemi Linux moderni. Legge direttamente dal kernel via Netlink — piu' veloce e accurato di netstat che parsava /proc.

Parti dalla rete

"Chi sta parlando con chi?" Ottimo quando vuoi il quadro completo delle connessioni attive senza sapere cosa cercare.

Sintassi
#

ss [opzioni]

Comandi essenziali
#

ComandoFlagSignificato flagCosa fa
ss -tuln-t -u -l -ntcp+udp+listen+numericPorte TCP e UDP in ascolto, numeri invece di nomi
ss -tlnp-t -l -n -ptcp+listen+numeric+processTCP in ascolto con il processo che le usa
ss -an-a -nall+numericTutti i socket, porte numeriche
ss -tn-t -ntcp+numericSolo connessioni TCP attive
ss -s-ssummaryStatistiche aggregate sui socket
ss -o-ooptionsMostra timer TCP (keepalive, retransmit)
ss -4-4IPv4Solo socket IPv4
ss -6-6IPv6Solo socket IPv6

Flag principali da combinare
#

-t  → TCP
-u  → UDP
-l  → solo LISTEN (in ascolto)
-a  → tutti (LISTEN + ESTABLISHED + altro)
-n  → numerico — porta 22 invece di "ssh"
-p  → mostra il processo (richiede sudo per processi altrui)

Leggere l'output
#

sudo ss -tlnp
# State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port  Process
# LISTEN  0       128     0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=1234))
# LISTEN  0       128     127.0.0.1:631        0.0.0.0:*          users:(("cupsd",pid=5678))
#   ^                     ^                    ^
#   stato                 chi ascolta:porta    chi puo' connettersi
0.0.0.0:22      → ascolta su tutte le interfacce, porta 22 — raggiungibile dall'esterno
127.0.0.1:631   → ascolta solo su localhost — non raggiungibile dall'esterno
:::22           → IPv6 equivalente di 0.0.0.0

netstat vs ss
#

netstat (deprecato)         ss (moderno)
───────────────────         ────────────────────────────
parsava /proc/net/          legge direttamente dal kernel
piu' lento                  molto piu' veloce
stesso output               output piu' ricco
da non usare                standard su Linux moderno

Equivalenze:

netstat -tuln    →    ss -tuln
netstat -an      →    ss -an
netstat -tulnp   →    sudo ss -tlnp

ss vs nc
#

ss -tlnp vs nc -zv host 1-100:

ss -tlnp                          nc -zv host 1-100
──────────────────────────        ──────────────────────────────
guarda DENTRO la macchina         guarda dall'ESTERNO verso un host
mostra cosa ascolta localmente    testa se le porte sono aperte
legge dal kernel — istantaneo     manda pacchetti TCP reali
nessun traffico di rete           genera traffico di rete
incident response locale          port scan / verifica connettività

In pratica: ss è lo specchio interno, nc -zv è il test esterno. Su un server sospetto usi ss per vedere cosa gira. Da Kali verso Ubuntu usi nc -zv per vedere cosa è raggiungibile dall'esterno.

Combinazioni utili
#

# Incident response — panoramica immediata
sudo ss -tlnp                          # chi ascolta?
sudo ss -tn | grep ESTABLISHED         # chi e' connesso adesso?

# Trova un processo per porta
sudo ss -tlnp | grep :8080

# Connessioni verso l'esterno (esclude localhost)
ss -tn | grep ESTABLISHED | grep -v "127.0.0"

# Conta le connessioni per stato
ss -s

# Vedi i timer TCP di una connessione
ss -o state established

# Socket Unix (comunicazione locale tra processi)
ss -xl

Scenario Reale
#

# Incident response — processo sospetto apre una porta
sudo ss -tlnp
# LISTEN  0  128  0.0.0.0:4444  0.0.0.0:*  users:(("nc",pid=9876))
#                         ^
#                         porta 4444 — classica reverse shell netcat

# Connessioni verso IP esterni insoliti
ss -tn | grep ESTABLISHED
# ESTAB  0  0  192.168.64.3:54231  45.33.x.x:443
#                                   ^
#                                   IP esterno sconosciuto su porta 443

# Verifica con lsof chi ha aperto quella connessione
sudo lsof -i :54231
Tip

sudo ss -tlnp e' il primo comando in qualsiasi incident response sulla rete — ti da' immediatamente la mappa di tutte le porte aperte e quale processo le usa.

Note

Senza sudo, -p mostra solo i processi del tuo utente. Con sudo vedi tutti i processi di sistema. Quasi sempre serve sudo per l'analisi forense.

Dove l'ho usato
#

  • Lab Ubuntu — verifica porte aperte dopo configurazione SSH

Note personali
#

Warning

Se vedi una porta in ascolto che non riconosci, non fermarti a ss — usa sudo lsof -p PID per vedere tutti i file e le connessioni di quel processo, e ps -p PID -o pid,user,etime,cmd per capire da quanto gira.

Collegato a
#

  • system — categoria
  • lsof — alternativa con piu' dettagli sui file aperti
  • ip — mostra le interfacce, ss mostra le connessioni su quelle interfacce
  • linux-processes — ss collega porte a PID

Related