GNU/Linux >> Linux Esercitazione >  >> Linux

10 esempi di comando Linux ss per monitorare le connessioni di rete

ss - statistiche socket

In un tutorial precedente abbiamo visto come utilizzare il comando netstat per ottenere dettagli sulle connessioni di rete/socket. Tuttavia il comando netstat è stato a lungo deprecato e sostituito dal comando ss della suite di strumenti iproute.

Il comando ss è in grado di mostrare dettagli sulle connessioni di rete con più informazioni rispetto al comando netstat ed è più veloce. Il comando netstat legge vari file /proc per raccogliere informazioni. Tuttavia questo approccio è più lento quando ci sono molte connessioni da visualizzare.

Il comando ss ottiene le sue informazioni direttamente dallo spazio del kernel. Le opzioni utilizzate con i comandi ss sono molto simili a netstat, rendendolo un facile sostituto.

Quindi in questo tutorial vedremo alcuni esempi di come utilizzare il comando ss per controllare le connessioni di rete e le statistiche sui socket.

1. Elenca tutte le connessioni

Il comando più semplice è elencare tutte le connessioni.

$ ss | lessNetid State Recv-Q Send-Q Local Address:Port Peer Address:Portu_str ESTAB 0 0 * 15545 * 15544u_str ESTAB 0 0 * 12240 * 12241u_str ESTAB 0 0 @/tmp/dbus-2hQdRvvg49 12726 * 12159u_str ESTAB 0 0 * 11808u_str ESTAB 0 0 * 15204 * 15205.....

Stiamo convogliando l'output su less in modo che l'output sia scorrevole. L'output conterrà tutti i dettagli di connessione socket TCP, udp e unix.

2. Filtra le connessioni TCP, UDP o Unix

Per visualizzare solo le connessioni tcp o udp o unix, utilizzare l'opzione t, u o x.

$ ss -tState Recv-Q Send-Q Indirizzo locale:Port Peer Address:PortESTAB 0 0 192.168.1.2:43839 108.160.162.37:httpESTAB 0 0 192.168.1.2:43622 199.59.149.201:httpsESTAB 0 0 192.168.1. :33141 83.170.73.249:ircdESTAB 0 0 192.168.1.2:54028 74.125.135.125:xmpp-client
$ ss -tOR$ ss -A tcp

Per impostazione predefinita, l'opzione "t" da sola riporterà solo quelle connessioni che sono "stabilite" o CONNESSE. Non riporta i socket TCP che stanno "ASCOLTO". Utilizzare l'opzione '-a' insieme a t, per segnalare tutto in una volta.

Elenca tutte le connessioni udp

$ ss -uaState Recv-Q Send-Q Indirizzo locale:Port Peer Address:PortUNCONN 0 0 192.168.1.2:48268 *:*UNCONN 0 0 192.168.1.2:56575 *:*UNCONN 0 0 *:40309 *:*UNCONN 0 0 192.168.1.2:56879 *:*UNCONN 0 0 *:49014 *:*UNCONN 0 0 192.168.1.2:53124 *:*UNCONN 0 0 127.0.1.1:domain *:*
$ ss -a -A udp
L'opzione a dice a ss di segnalare entrambi i socket "CONNECTED" e "LISTENING". Poiché UDP è un protocollo senza connessione, solo "ss -u" non riporterà nulla nella maggior parte dei casi. Pertanto utilizziamo l'opzione "a" per segnalare tutte le connessioni UDP (connesse e in ascolto).

Allo stesso modo usa l'opzione x per elencare tutte le connessioni socket Unix.

3. Non risolvere il nome host

Per ottenere l'output più velocemente, utilizzare l'opzione "n" per impedire a ss di risolvere gli indirizzi IP in nomi host. Ma ciò impedirà anche la risoluzione dei numeri di porta.

$ ss -ntState Recv-Q Send-Q Indirizzo locale:Port Peer Address:PortESTAB 0 0 192.168.1.2:43839 108.160.162.37:80ESTAB 0 0 192.168.1.2:51350 74.125.200.84:443ESTAB 0 0 192.168.1.2 :33141 83.170.73.249:6667ESTAB 0 0 192.168.1.2:54028 74.125.135.125:5222ESTAB 0 0 192.168.1.2:48156 66.196.120.44:5050

4. Mostra solo prese di ascolto

Questo elencherà tutte le prese di ascolto. Ad esempio, il server Web Apache apre una connessione socket sulla porta 80 per ascoltare le connessioni in entrata.

$ ss -ltnState Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 5 127.0.1.1:53 *:*LISTEN 0 128 127.0.0.1:631 *:*LISTEN 0 128 ::1:631 :::*

Il comando precedente elenca tutte le connessioni "in ascolto" "tcp". L'opzione n disabilita la risoluzione del nome host degli indirizzi IP fornendo un output più veloce.

Per elencare tutte le connessioni udp in ascolto, sostituire t con u

$ ss -lunState Recv-Q Send-Q Indirizzo locale:Port Peer Address:PortUNCONN 0 0 127.0.1.1:53 *:*UNCONN 0 0 *:68 *:*UNCONN 0 0 192.168.1.2:123 *:*UNCONN 0 0 127.0.0.1:123 *:*UNCONN 0 0 *:123 *:*UNCONN 0 0 *:5353 *:*UNCONN 0 0 *:47799 *:*UNCONN 0 0 *:25322 *:*UNCONN 0 0 :::54310 :::*.....

5. Stampa il nome del processo e il pid

Per stampare il nome del processo/pid proprietario della connessione, utilizzare l'opzione p

$ ss -ltpState Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 100 127.0.0.1:smtp *:*LISTEN 0 128 127.0.0.1:9050 *:*LISTEN 0 128 *:90 *:*LISTEN 0 128 *:db-lsp *:* users:(("dropbox",3566,32))LISTEN 0 5 127.0.0.1:6600 *:*LISTEN 0 128 127.0.0.1:9000 *:* users:( ("php5-fpm",1620,0),("php5-fpm",1619,0))

Nell'output sopra l'ultima colonna contiene il nome del processo e il pid. In questo esempio dnsmasq è il nome del processo e 1299 è il pid.

$ sudo ss -ltp[sudo] password per illuminato:State Recv-Q Send-Q Indirizzo locale:Port Peer Address:PortLISTEN 0 100 127.0.0.1:smtp *:* users:(("master",2051, 12)) ASCOLTA 0 128 *:90 *:* utenti:(("nginx",1701,6),("nginx",1700,6),("nginx",1699,6),("nginx", 1697,6),("nginx",1696,6))ASCOLTA 0 5 127.0.0.1:6600 *:* utenti:(("mpd",2392,5))ASCOLTA 0 128 127.0.0.1:9000 *:* utenti:(("php5-fpm",1620,0),("php5-fpm",1619,0),("php5-fpm",1616,7))ASCOLTA 0 16 *:2633 *:* utenti:(("oned",1853,16))ASCOLTA 0 50 127.0.0.1:mysql *:* utenti:(("mysqld",1095,10))ASCOLTA 0 5 127.0.1.1:dominio *:* utenti:(( "dnsmasq",1347,5)) ASCOLTA 0 32 *:ftp *:* utenti:(("vsftpd",1051,3))ASCOLTA 0 128 *:ssh *:* utenti:(("sshd",1015,3))ASCOLTA 0 128 127.0.0.1:ipp *:* utenti :(("cupsd",688,11))ASCOLTA 0 128 :::http :::* utenti:(("apache2",5322,4),("apache2",5321,4),("apache2" ,5317,4),("apache2",5316,4),("apache2",5313,4),("apache2",2505,4))ASCOLTA 0 128 :::ssh :::* utenti:( ("sshd",1015,4))ASCOLTA 0 128 ::1:ipp :::* utenti:(("cupsd",688,10))

6. Stampa statistiche riassuntive

L'opzione s stampa le statistiche.

$ ss -sTotal:526 (kernel 0)TCP:10 (estab 7, chiuso 0, orfano 0, synrecv 0, timewait 0/0), porte 0Trasporto IP totale IPv6* 0 - -RAW 0 0 0UDP 15 9 6TCP 10 9 1INET 25 18 7FRAG 0 0 0

7. Visualizza le informazioni sul timer

Con l'opzione '-o', verrebbero visualizzate le informazioni sull'ora di ogni connessione. Le informazioni sul timer indicano quanto tempo con

$ ss -tn -oState Recv-Q Send-Q Indirizzo locale:Port Peer Address:PortESTAB 0 0 192.168.1.2:43839 108.160.162.37:80ESTAB 0 0 192.168.1.2:36335 204.144.140.26:80 timer:( keepalive,26sec,0)ESTAB 0 0 192.168.1.2:33141 83.170.73.249:6667ESTAB 0 0 192.168.1.2:58857 74.121.141.84:80 timer:(keepalive,23sec,0)ESTAB 0 0 192.168.1.4:3:3 40.239:80 timer:(keepalive,32sec,0)

8. Visualizza solo connessioni socket IPv4 o IPv6

Per visualizzare solo le connessioni socket IPv4, utilizzare l'opzione '-finet' o '-4'.

$ ss -tl -f inetState Recv-Q Send-Q Indirizzo locale:Port Peer Address:PortLISTEN 0 100 127.0.0.1:smtp *:*LISTEN 0 128 127.0.0.1:9050 *:*LISTEN 0 128 *:90 *:*ASCOLTA 0 128 *:db-lsp *:*ASCOLTA 0 5 127.0.0.1:6600 *:*

Per visualizzare solo le connessioni IPv6, utilizzare l'opzione '-finet6' o '-6'.

$ ss -tl6State Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 100 ::1:smtp :::*LISTEN 0 128 :::12865 :::*LISTEN 0 128 :::http :::*ASCOLTA 0 128 :::ssh :::*ASCOLTA 0 128 ::1:ipp :::*

9. Filtraggio delle connessioni per stato TCP

Il comando ss supporta filtri che possono essere utilizzati per visualizzare solo connessioni specifiche. L'espressione del filtro deve avere un suffisso dopo tutte le opzioni. Il comando ss accetta il filtro nel seguente formato.

$ ss [ OPZIONI ] [ FILTRO STATO ] [ FILTRO INDIRIZZO ]

Ora ecco alcuni esempi di come filtrare le connessioni dei socket in base agli stati dei socket.
Per visualizzare tutti i socket TCP IPv4 che sono nello stato "connesso".

$ ss -t4 stato stabilitoRecv-Q Send-Q Local Address:Port Peer Address:Port0 0 192.168.1.2:54436 165.193.246.23:https0 0 192.168.1.2:43386 173.194.72.125:xmpp-client0 0 192.168.1.2 :38355 199.59.150.46:https0 0 192.168.1.2:56198 108.160.162.37:http

Display prese con stato time-wait

$ ss -t4 stato time-waitRecv-Q Send-Q Indirizzo locale:Port Peer Address:Port0 0 192.168.1.2:42261 199.59.150.39:https0 0 127.0.0.1:43541 127.0.0.1:2633

Lo stato può essere uno dei seguenti

1. stabilito2. syn-sent3. syn-recv4. fin-aspetta-15. fin-aspetta-26. tempo-attesa7. chiuso8. attesa ravvicinata9. last-ack10. chiusura11. tutti - Tutti gli stati di cui sopra12. connesso - Tutti gli stati tranne listen e closed13. sincronizzato - Tutti gli stati connessi tranne syn-sent14. bucket - Mostra gli stati, che vengono mantenuti come minisocket, ovvero time-wait e syn-recv.15. big - Opposto allo stato del bucket.

Nota che molti stati come syn-sent, syn-recv non mostrerebbero alcun socket per la maggior parte del tempo, poiché i socket rimangono in tali stati per un tempo molto breve. Sarebbe l'ideale utilizzare il comando watch per rilevare tali stati di socket in tempo reale.

Ecco un esempio

$ watch -n 1 "ss -t4 state syn-sent"

Dopo aver eseguito il comando precedente, prova ad aprire un sito Web in un browser o scarica qualcosa da un URL. Immediatamente dovresti vedere le connessioni socket apparire nell'output, ma per un periodo molto breve.

Ogni 1.0s:ss -t4 state syn-sent mar 1 aprile 10:07:33 2014Recv-Q Send-Q Indirizzo locale:Port Peer Address:Port0 1 192.168.1.2:55089 202.79.210.121:https0 1 192.168. 1.2:33733 203.84.220.80:https0 1 192.168.1.2:36240 106.10.198.33:https

10. Filtra le connessioni per indirizzo e numero di porta

Oltre agli stati del socket tcp, il comando ss supporta anche il filtraggio in base all'indirizzo e al numero di porta del socket. Gli esempi seguenti lo dimostrano.

Visualizza tutte le connessioni socket con porta di origine o destinazione di ssh.

$ ss -at '( dport =:ssh or sport =:ssh )'State Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 128 *:ssh *:*LISTEN 0 128 :::ssh :::*

Prese con porta di destinazione 443 o 80

$ ss -nt '( dst :443 o dst :80 )'Stato Recv-Q Send-Q Indirizzo locale:Port Peer Address:PortESTAB 0 0 192.168.1.2:58844 199.59.148.82:443ESTAB 0 0 192.168.1.2 :55320 165.193.246.23:443ESTAB 0 0 192.168.1.2:56198 108.160.162.37:80ESTAB 0 0 192.168.1.2:54889 192.241.177.148:443ESTAB 0 0 192.168.1.2:39893 173.255.230.5:80ESTAB 0 0 192.168.1.2:33440 38.127.167.38:443

Funzionerebbe anche la seguente sintassi

$ ss -nt dst :443 o dst :80

Altri esempi

# Filtra per indirizzo$ ss -nt dst 74.125.236.178# È supportata anche la notazione CIDR$ ss -nt dst 74.125.236.178/16# Indirizzo e porta combinati$ ss -nt dst 74.125.236.178:80

Le porte possono anche essere filtrate con le opzioni dport/sport. I numeri di porta devono essere preceduti da ":".

$ ss -nt dport =:80State Recv-Q Send-Q Local Address:Port Peer Address:PortESTAB 0 0 192.168.1.2:56198 108.160.162.37:80ESTAB 0 0 192.168.1.2:39893 173.255.230.5:80ESTAB 0 0 192.168.1.2:55043 74.125.236.178:80

Quanto sopra è uguale a> ss -nt dst :80

Alcuni altri esempi di filtraggio

# indirizzo di origine è 127.0.0.1 e la porta di origine è maggiore di 5000$ ss -nt src 127.0.0.1 sport gt :5000# socket smtp locale (porta 25)$ sudo ss -ntlp sport eq :smtp# numeri di porta maggiori di 25$ sudo ss -nt sport gt :1024# socket con porte remote inferiori a 100$ sudo ss -nt dport \<:100# connessioni alla porta remota 80$ sudo ss -nt state connesso dport =:80

I seguenti operatori sono supportati quando si confrontano i numeri di porta

<=o le :minore o uguale a port>=o ge :maggiore o uguale a port==o eq :uguale a port!=o ne :diverso da port o lt :maggiore di port

Riepilogo

Gli esempi precedenti coprono la maggior parte di ciò che supporta il comando ss. Per maggiori informazioni controlla le pagine man.

La documentazione della sintassi del filtro può essere trovata nel pacchetto iproute2-doc che può essere installato su sistemi debian/ubuntu

$ sudo apt-get install iproute2-doc

Il file /usr/share/doc/iproute2-doc/ss.html contiene dettagli sulla sintassi del filtro dei comandi ss.


Linux
  1. 10 esempi di base del comando Linux Netstat

  2. 7 Esempi di comandi Linux df

  3. Esempi di comandi rm in Linux

  4. ps Esempi di comandi in Linux

  5. Esempi di comandi dsniff in Linux

16 Esempi di comandi Echo in Linux

9 Esempi di comandi tee in Linux

Esempi di comandi da 20 ps per monitorare i processi Linux

Come usare ss Command (monitora connessioni di rete)

Esempi di comandi ifconfig di Linux

Esempi di comandi id in Linux