Come usare il comando ss su Linux

Pubblicato: 2022-01-29
Una finestra del terminale su un sistema laptop Linux.
Fatmawati Achmad Zaenuri/Shutterstock

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.

Il comando SS contro netstat

In sostituzione del deprecato comando netstat , ss fornisce informazioni dettagliate su come il tuo 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 grezzi. I socket grezzi 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 i socket non elaborati.

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 a uno screenshot. Li abbiamo tagliati per renderli più gestibili.

Elenco delle connessioni di rete

L'uso 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 

 Stato Netid Recv-Q Send-Q Indirizzo locale:Porta 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", un flusso Unix, un "udp" e "icmp6", un socket ICMP IP versione 6. Puoi 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 : l'indirizzo e la porta locali (o valori equivalenti per i socket Unix).
  • Peer Address:Port : l'indirizzo remoto e la porta (o valori equivalenti per i socket Unix).
Annuncio pubblicitario

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 è stata accettata.
  • SYN-RECEIVED: solo lato server. Questo socket è in attesa di un riconoscimento della connessione dopo aver accettato una richiesta di connessione.
  • COSTITUITO: 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. Questa presa è in attesa di una richiesta di terminazione della connessione dalla presa remota.
  • 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 un riconoscimento 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 che ha inviato al socket remoto.
  • TIME-WAIT: Server e client. Questo socket ha inviato un riconoscimento al socket remoto per informarlo di aver 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 delle prese di ascolto

Per vedere i socket di ascolto aggiungeremo l'opzione -l (ascolto), in questo modo:

 ss -l 

 Stato Netid Recv-Q Send-Q Indirizzo locale:Porta Peer Address:Port Process 
nl UNCONN 0 0 rtnl:NetworkManager/535 * 
nl UNCONN 0 0 rtnl:evolution-addre/2987 * 
...
u_str ASCOLTA 0 4096 /run/systemd/private 13349 * 0 
u_seq ASCOLTA 0 4096 /run/udev/control 13376 * 0 
u_str ASCOLTA 0 4096 /tmp/.X11-unix/X0 33071 * 0 
u_dgr UNCONN 0 0 /run/systemd/journal/syslog 13360 * 0 
u_str ASCOLTA 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. Il "rtnl" significa routing netlink, che viene utilizzato per trasferire informazioni tra i processi del kernel e dello spazio utente.

Elenco di tutte le prese

Per elencare tutti i socket, puoi usare l'opzione -a (all):

 ss -a 

 Stato Netid Recv-Q Send-Q Indirizzo locale:Porta Peer Address:Port Process 
nl UNCONN 0 0 rtnl:NetworkManager/535 * 
nl UNCONN 0 0 rtnl:evolution-addre/2987 * 
...
u_str ASCOLTA 0 100 public/showq 23222 * 0 
u_str ASCOLTA 0 100 privato/errore 23225 * 0 
u_str ASCOLTA 0 100 privato/riprova 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 ASCOLTA 0 128 [::]:ssh [::]:* 
tcp ASCOLTA 0 5 [::1]:ipp [::]:* 
tcp ASCOLTA 0 100 [::1]:smtp [::]:*

L'uscita contiene tutti i socket, indipendentemente dallo stato.

Elenco dei socket TCP

Puoi anche applicare un filtro in modo che vengano visualizzate solo le prese 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 i socket UDP:

 ss -a -u 

 Stato Recv-Q Send-Q Indirizzo locale: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:dominio 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 

 Stato Netid Recv-Q Send-Q Indirizzo locale:Porta 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 dei socket grezzi

Il filtro per i socket raw è l' -w (raw):

 ss -a -w 

Elenco prese 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 prese 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. Utilizzeremo anche l'opzione di risoluzione ( -r ), che tenta di risolvere gli indirizzi di rete in nomi e porte in protocolli.

Annuncio pubblicitario

Il comando seguente cercherà le connessioni TCP stabilite e ss proverà a risolvere i nomi:

 ss -t -r stato stabilito 

Sono elencate quattro connessioni che si trovano nello stato stabilito. Il nome host, ubuntu20-04, è stato risolto e sulla seconda riga viene visualizzato "ssh" invece di 22 per la connessione SSH.

Possiamo ripetere questo per cercare i socket nello stato di ascolto:

 ss -t -r stato in ascolto 

 Recv-Q Send-Q Indirizzo locale:Port Peer Address:Port Process 
0 128 localhost:5939 0.0.0.0:* 
0 4096 localhost%lo:dominio 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 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 che utilizzano il protocollo HTTPS su una connessione established (notare lo spazio dopo la parentesi di apertura e prima di quella di chiusura):

 ss -a stato stabilito '( dport = :https o 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.

Annuncio pubblicitario

Useremo il nome del protocollo in un comando, quindi lo ripeteremo utilizzando il numero di porta:

 ss -a '( dport = :ssh o sport = :ssh )'
 ss -a '( dport = :22 o 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 process ( -p ), come mostrato di seguito (nota che devi usare sudo ):

 sudo ss -t -p 

 Stato Recv-Q Send-Q Indirizzo locale:Port Peer Address:Port Process 
ESTAB 0 0 192.168.4.28:57650 54.218.19.119:https utenti:(("firefox",pid=3378,fd=151)) 
ESTAB 0 0 192.168.4.28:ssh 192.168.4.25:43946 utenti:(("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 precedentemente fornite da netstat , ma in un modo più semplice e accessibile. Puoi controllare la pagina man per ulteriori opzioni e suggerimenti.

CORRELATI: I migliori laptop Linux per sviluppatori e appassionati