Il comando ss è 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.
Sommario:
Il comando ss contro netstat
Un sostituto per il deprecato comando netstat, ss fornisce informazioni dettagliate su come il tuo computer comunica con altri computer, reti e servizi.
ss visualizza le statistiche per Protocollo di controllo della trasmissione (TCP), Protocollo datagramma utente (UDP), Unix (interprocesso)e prese prime. Prese grezze operare presso il livello OSI di rete, il che significa che le intestazioni TCP e UDP devono essere gestite dal software applicativo, non dal livello di trasporto. Internet Control Message Protocol (ICMP) e i messaggi ping entrambi utilizzano socket raw.
Utilizzando ss
Non è necessario 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 ottenuti, poiché non si adatterebbero in uno screenshot. Li abbiamo tagliati per renderli più gestibili.
Elenco delle connessioni di rete
L’utilizzo di 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 vederlo, 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 socket. Nel nostro esempio, abbiamo “u_str”, uno stream Unix, un “udp” e “icmp6”, un socket ICMP IP versione 6. Puoi trovare ulteriori descrizioni di 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: l’indirizzo e la porta locali (o valori equivalenti per i socket Unix).
Indirizzo peer: Porta: l’indirizzo e la porta remoti (o valori equivalenti per i 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-RECEIVED: 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 di un riconoscimento di una richiesta di terminazione della connessione inviata in precedenza 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.
TIME-WAIT: 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. È ora in attesa di assicurarsi che il riconoscimento sia stato ricevuto.
CHIUSO: non c’è connessione, quindi il socket è stato terminato.
Elenco dei socket di ascolto
Per vedere i socket di ascolto aggiungeremo l’opzione -l (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 l’opzione -a (all):
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 l’opzione -t (TCP), quindi verranno elencati solo i socket TCP:
ss -a -t
Elenco dei socket UDP
L’opzione -u (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 l’opzione -x (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 i socket raw è l’opzione -w (raw):
ss -a -w
Elenco dei socket IP versione 4
I socket che utilizzano il protocollo TCP / IP versione 4 possono essere elencati utilizzando l’opzione -4 (IPV4):
ss -a -4
Elenco dei socket IP versione 6
Puoi attivare il filtro IP versione 6 corrispondente con l’opzione -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’opzione state. Funziona con stati stabiliti, in ascolto o chiusi. Useremo anche l’opzione di risoluzione (-r), che cerca di risolvere gli indirizzi di rete in nomi e le porte in protocolli.
Il seguente comando 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 protocollo particolare con le opzioni dport e sport, che rappresentano rispettivamente le porte di destinazione e di origine.
Digitiamo quanto segue per elencare i socket utilizzando il protocollo HTTPS su una connessione stabilita (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 Shell sicuro (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 l’opzione 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 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 comando ss fornisce le stesse informazioni fornite in precedenza da netstat, ma in un modo più semplice e accessibile. Puoi controllare il file pagina man per ulteriori opzioni e suggerimenti.