Una finestra del terminale su un sistema portatile Linux.
Fatmawati Achmad Zaenuri/

Il comando ss è un sostituto moderno del classico netstat. Puoi usarlo su Linux per ottenere statistiche sulle tue connessioni di rete. Ecco come lavorare con questo comodo strumento.

Il comando ss contro netstat

Un sostituto del deprecato comando netstat, ss ti dà informazioni dettagliate su come il tuo computer comunica con altri computer, reti e servizi.

ss visualizza le statistiche per Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Unix (interprocesso) e raw socket. I socket grezzi operano al livello OSI della rete, 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 usano entrambi i socket grezzi.

Utilizzando ss

Non è necessario installare ss, in quanto è già parte di una distribuzione Linux aggiornata. Il suo output, tuttavia, può essere molto lungo: abbiamo avuto risultati contenenti oltre 630 linee. I risultati sono anche molto ampi.

A causa di questo, abbiamo incluso rappresentazioni testuali dei risultati che abbiamo ottenuto, poiché non ci starebbero in uno screenshot. Li abbiamo tagliati per renderli più gestibili.

Elenco delle connessioni di rete

Utilizzando ss senza opzioni della riga di comando si elencano i socket che non sono in ascolto. Cioè, elenca i socket che non sono in ascolto.

Per vedere questo, digitate quanto segue:

ss

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Processu_str ESTAB 0 0 * 41826 * 41827u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688u_str ESTAB 0 0 * 35550 * 35551...u_str ESTAB 0 0 * 38127 * 38128u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242u_str ESTAB 0 0 * 19039 * 19040u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306icmp6 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”, un flusso Unix, un “udp” e “icmp6”, un socket IP versione 6 ICMP. Potete trovare ulteriori descrizioni dei tipi di socket di 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.
  • Local Address:Port: L’indirizzo locale e la porta (o valori equivalenti per i socket Unix).
  • Peer Address:Port: L’indirizzo remoto e la porta (o valori equivalenti per i socket Unix).

Per i socket UDP la colonna “State” è solitamente vuota. Per i socket TCP può essere uno dei seguenti:

  • LISTEN: Solo lato server. Il socket è in attesa di una richiesta di connessione.
  • SYN-SENT: Solo lato client. Questo socket ha fatto una richiesta di connessione e sta aspettando di vedere se viene accettata.
  • SYN-RECEIVED: Solo lato server. Questo socket è in attesa di un riconoscimento di connessione dopo aver accettato una richiesta di connessione.
  • ESTABLISHED: Server e client. Una connessione funzionante è stata stabilita tra il server e il client, consentendo il trasferimento di 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 che è stato precedentemente inviato 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 dall’utente locale.
  • CHIUSURA: Server e client. Questo socket è in attesa di un riconoscimento di 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 acknowledgment al socket remoto per fargli sapere che ha ricevuto la richiesta di terminazione del socket remoto. Ora è in attesa di assicurarsi che tale riconoscimento sia stato ricevuto.
  • CHIUSO: Non c’è connessione, quindi il socket è stato terminato.

Elenco dei socket in ascolto

Per vedere i socket in ascolto aggiungeremo l’opzione -l (in ascolto), così:

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

Questi socket sono tutti non connessi e in ascolto. Il “rtnl” significa routing netlink, che è usato per trasferire informazioni tra il kernel e i processi userspace.

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 :ipp :* tcp LISTEN 0 100 :smtp :*

L’output contiene tutti i socket, indipendentemente dallo stato.

Elenco dei socket TCP

Puoi anche applicare un filtro in modo da visualizzare solo i socket corrispondenti. Useremo l’opzione -t (TCP), così solo i socket TCP saranno elencati:

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

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 :*

Listing Unix Sockets

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 dei socket grezzi

Il filtro per i socket grezzi è l’opzione -w (raw):

ss -a -w

Elenco delle prese IP versione 4

Le prese che usano il protocollo TCP/IP versione 4 possono essere elencate usando 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), così:

ss -a -6

Elenco dei socket per stato

Puoi elencare i socket per lo stato in cui si trovano con l’opzione state. Questo funziona con gli stati stabiliti, in ascolto o chiusi. Useremo anche l’opzione resolve (-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 cercherà di risolvere i nomi:

ss -t -r state established

Sono elencate quattro connessioni che sono nello stato stabilito. L’hostname, ubuntu20-04, è stato risolto e “ssh” è mostrato al posto di 22 per la connessione SSH sulla seconda linea.

Possiamo ripetere questa operazione per cercare i socket in 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

Puoi elencare i socket che utilizzano un particolare protocollo con le opzioni dport e sport, che rappresentano rispettivamente le porte di destinazione e sorgente.

Scriviamo 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 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.

Utilizzeremo il nome del protocollo in un comando, e poi lo ripeteremo usando il numero della 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.

Scriviamo quanto segue:

ss -a dst 192.168.4.25

Identificare i processi

Per vedere quali processi stanno usando i socket, potete usare l’opzione processes (-p), come mostrato qui sotto (notate che dovete 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 su socket TCP sono 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.

Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.