
Il ss
command è un moderno sostituto del classico netstat
. Puoi usarlo su Linux per ottenere statistiche sulle tue connessioni di rete. Ecco come lavorare con questo pratico strumento.
Il comando ss contro netstat
Un sostituto per il deprecato netstat
comando, ss
fornisce informazioni dettagliate su come il computer comunica con altri computer, reti e servizi.
ss
visualizza le statistiche per TCP (Transmission Control Protocol), UDP (User Datagram Protocol), Unix (interprocesso) e socket non elaborati. I raw socket operano a livello di rete OSI, il che significa che le intestazioni TCP e UDP devono essere gestite dal software applicativo, non dal livello di trasporto. I messaggi ICMP (Internet Control Message Protocol) e l’utilità ping utilizzano entrambi socket non elaborati.
Utilizzando ss
Non devi installare ss
, poiché fa già parte di una distribuzione Linux aggiornata. Il suo output, tuttavia, può essere molto lungo: abbiamo avuto risultati contenenti oltre 630 righe. Anche i risultati sono molto ampi.
Per questo motivo, abbiamo incluso rappresentazioni testuali dei risultati che abbiamo ottenuto, poiché non rientrerebbero in uno screenshot. Li abbiamo tagliati per renderli più gestibili.
Elenco delle connessioni di rete
utilizzando ss
senza opzioni della riga di comando elenca i socket che non sono in ascolto. Cioè, elenca i socket che non sono nello stato di ascolto.
Per visualizzarlo, digita quanto segue:
ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688 u_str ESTAB 0 0 * 35550 * 35551 ... u_str ESTAB 0 0 * 38127 * 38128 u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242 u_str ESTAB 0 0 * 19039 * 19040 u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306 icmp6 UNCONN 0 0 *:ipv6-icmp *:* udp ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps
Le colonne sono le seguenti:
- NETID: Il tipo di presa. Nel nostro esempio, abbiamo “u_str”, uno stream Unix, un “udp” e “icmp6”, un socket ICMP IP versione 6. È possibile trovare ulteriori descrizioni dei tipi di socket Linux nelle pagine man di Linux.
- Stato: Lo stato in cui si trova il socket.
- Recv-Q: Il numero di pacchetti ricevuti.
- Send-Q: Il numero di pacchetti inviati.
- Indirizzo locale: porta: Indirizzo e porta locali (o valori equivalenti per socket Unix).
- Indirizzo peer: Porta: Indirizzo e porta remoti (o valori equivalenti per socket Unix).
Per i socket UDP, la colonna “Stato” è generalmente vuota. Per i socket TCP può essere uno dei seguenti:
- ASCOLTA: Solo lato server. Il socket è in attesa di una richiesta di connessione.
- SYN-SENT: Solo lato client. Questo socket ha effettuato una richiesta di connessione ed è in attesa di vedere se è stato accettato.
- SYN-RICEVUTE: Solo lato server. Questo socket è in attesa di un riconoscimento di connessione dopo aver accettato una richiesta di connessione.
- STABILITO: Server e client. È stata stabilita una connessione funzionante tra il server e il client, consentendo il trasferimento dei dati tra i due.
- FIN-WAIT-1: Server e client. Questo socket è in attesa di una richiesta di terminazione della connessione dal socket remoto o un riconoscimento di una richiesta di terminazione della connessione precedentemente inviata da questo socket.
- FIN-WAIT-2: Server e client. Questo socket è in attesa di una richiesta di terminazione della connessione dal socket remoto.
- CLOSE-WAIT: Server e client. Questo socket è in attesa di una richiesta di terminazione della connessione da parte dell’utente locale.
- CHIUSURA: Server e client. Questo socket è in attesa di una conferma della richiesta di terminazione della connessione dal socket remoto.
- LAST-ACK: Server e client. Questo socket è in attesa di un riconoscimento della richiesta di terminazione della connessione inviata al socket remoto.
- TEMPO DI ATTESA: Server e client. Questo socket ha inviato un riconoscimento al socket remoto per fargli sapere che ha ricevuto la richiesta di terminazione del socket remoto. Sta ora aspettando per assicurarsi che il riconoscimento sia stato ricevuto.
- CHIUSO: Non c’è connessione, quindi il socket è stato terminato.
Elenco dei socket di ascolto
Per vedere le prese di ascolto aggiungeremo il file -l
opzione (ascolto), in questo modo:
ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:evolution-addre/2987 * ... u_str LISTEN 0 4096 /run/systemd/private 13349 * 0 u_seq LISTEN 0 4096 /run/udev/control 13376 * 0 u_str LISTEN 0 4096 /tmp/.X11-unix/X0 33071 * 0 u_dgr UNCONN 0 0 /run/systemd/journal/syslog 13360 * 0 u_str LISTEN 0 4096 /run/systemd/fsck.progress 13362 * 0 u_dgr UNCONN 0 0 /run/user/1000/systemd/notify 32303 * 0
Queste prese sono tutte scollegate e in ascolto. “Rtnl” significa routing netlink, che viene utilizzato per trasferire informazioni tra il kernel e i processi dello spazio utente.
Elenco di tutti i socket
Per elencare tutti i socket, puoi usare il -a
(tutti) opzione:
ss -a
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:evolution-addre/2987 * ... u_str LISTEN 0 100 public/showq 23222 * 0 u_str LISTEN 0 100 private/error 23225 * 0 u_str LISTEN 0 100 private/retry 23228 * 0 ... udp UNCONN 0 0 0.0.0.0:631 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* ... tcp LISTEN 0 128 [::]:ssh [::]:* tcp LISTEN 0 5 [::1]:ipp [::]:* tcp LISTEN 0 100 [::1]:smtp [::]:*
L’output contiene tutti i socket, indipendentemente dallo stato.
Elenco dei socket TCP
È inoltre possibile applicare un filtro in modo che vengano visualizzati solo i socket corrispondenti. Useremo il file -t
Opzione (TCP), quindi verranno elencati solo i socket TCP:
ss -a -t
Elenco dei socket UDP
Il -u
L’opzione (UDP) esegue lo stesso tipo di azione di filtro. Questa volta vedremo solo socket UDP:
ss -a -u
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process UNCONN 0 0 0.0.0.0:631 0.0.0.0:* UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* UNCONN 0 0 0.0.0.0:60734 0.0.0.0:* UNCONN 0 0 127.0.0.53%lo:domain 0.0.0.0:* ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps UNCONN 0 0 [::]:mdns [::]:* UNCONN 0 0 [::]:51193 [::]:*
Elenco dei socket Unix
Per vedere solo i socket Unix, puoi includere il file -x
Opzione (Unix), come mostrato di seguito:
ss -a -x
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 * 23183 * 23184 u_str ESTAB 28 0 @/tmp/.X11-unix/X0 52640 * 52639 ... u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306
Elenco raw socket
Il filtro per prese raw è il -w
opzione (raw):
ss -a -w
Elenco dei socket IP versione 4
I socket che utilizzano il protocollo TCP / IP versione 4 possono essere elencati utilizzando il -4
Opzione (IPV4):
ss -a -4
Elenco dei socket IP versione 6
È possibile attivare il filtro IP versione 6 corrispondente con l’estensione -6
(IPV6), in questo modo:
ss -a -6
Elenco dei socket per stato
Puoi elencare i socket in base allo stato in cui si trovano con l’estensione state
opzione. Funziona con stati stabiliti, in ascolto o chiusi. Useremo anche l’opzione di risoluzione (-r
), che tenta di risolvere gli indirizzi di rete in nomi e le porte in protocolli.
Il comando seguente cercherà le connessioni TCP stabilite e ss
proverà a risolvere i nomi:
ss -t -r state established
Sono elencate quattro connessioni che si trovano nello stato stabilito. Il nome host, ubuntu20-04, è stato risolto e “ssh” viene mostrato invece di 22 per la connessione SSH sulla seconda riga.
Possiamo ripetere questo per cercare i socket nello stato di ascolto:
ss -t -r state listening
Recv-Q Send-Q Local Address:Port Peer Address:Port Process 0 128 localhost:5939 0.0.0.0:* 0 4096 localhost%lo:domain 0.0.0.0:* 0 128 0.0.0.0:ssh 0.0.0.0:* 0 5 localhost:ipp 0.0.0.0:* 0 100 localhost:smtp 0.0.0.0:* 0 128 [::]:ssh [::]:* 0 5 ip6-localhost:ipp [::]:* 0 100 ip6-localhost:smtp [::]:*
Elenco dei socket per protocollo
È possibile elencare i socket utilizzando un particolare protocollo con l’estensione dport
e sport
opzioni, che rappresentano rispettivamente le porte di destinazione e di origine.
Digitiamo quanto segue per elencare i socket che utilizzano il protocollo HTTPS su un file established
connessione (notare lo spazio dopo la parentesi di apertura e prima di quella di chiusura):
ss -a state established ‘( dport = :https or sport = :https )’
Possiamo usare il nome del protocollo o la porta solitamente associata a quel protocollo. La porta predefinita per Secure Shell (SSH) è la porta 22.
Useremo il nome del protocollo in un comando, quindi lo ripeteremo utilizzando il numero di porta:
ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’
Come previsto, otteniamo gli stessi risultati.
Elenco delle connessioni a un indirizzo IP specifico
Con il dst
(destinazione), possiamo elencare le connessioni a un particolare indirizzo IP di destinazione.
Digitiamo quanto segue:
ss -a dst 192.168.4.25
Identificazione dei processi
Per vedere quali processi stanno usando i socket, puoi usare l’opzione dei processi (-p
), come mostrato di seguito (nota che devi usare sudo
):
sudo ss -t -p
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process ESTAB 0 0 192.168.4.28:57650 54.218.19.119:https users:(("firefox",pid=3378,fd=151)) ESTAB 0 0 192.168.4.28:ssh 192.168.4.25:43946 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))
Questo ci mostra che le due connessioni stabilite sui socket TCP vengono utilizzate dal demone SSH e da Firefox.
Un degno successore
Il ss
Il comando fornisce le stesse informazioni precedentemente fornite da netstat
, ma in un modo più semplice e accessibile. Puoi controllare la pagina man per ulteriori opzioni e suggerimenti.