ss es otra herramienta para investigar sockets. Permite volcar estadísticas de sockets, mostrando información similar a netstat. Sin embargo puede mostrar más información de estado de conexiones TCP que otras herramientas.



Cuando se corre sin parámetros, ss muestra un listado de todos los sockets que tienen conexiones establecidas. En esta lista no se incluyen los puertos abiertos escuchando peticiones (estado listening). Más allá de esta salida por defecto, ss cuenta con un gran número de opciones y permite filtrar la salida.

Veamos ejemplos prácticos de uso.

Listar puertos TCP abiertos

Para listar todos los puertos TCP en estado listening en formato numérico (sin convertir puertos a nombres de protocolos), utilizar las opciones -tln:

root@hal9000:~# ss -tln
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port    
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*       
LISTEN    0         5                127.0.0.1:631              0.0.0.0:*       
LISTEN    0         128                   [::]:22                  [::]:*       
LISTEN    0         5                    [::1]:631                 [::]:*       
LISTEN    0         1                        *:6566                   *:*

Mostrar información extendida

La opción -e permite mostrar información detallada de cada socket:

root@hal9000:~# ss -tlne
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port                                                                                    
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*        ino:15526 sk:56 <->                                                            
LISTEN    0         5                127.0.0.1:631              0.0.0.0:*        ino:43472 sk:57 <->                                                            
LISTEN    0         128                   [::]:22                  [::]:*        ino:15528 sk:58 v6only:1 <->                                                   
LISTEN    0         5                    [::1]:631                 [::]:*        ino:43471 sk:59 v6only:1 <->                                                   
LISTEN    0         1                        *:6566                   *:*        ino:13697 sk:5a v6only:0 <->

En esta salida "ino" indica el número de inodo del socket y "sk" el uuid del socket.

Obtener timers de TCP

La opción -o puede ser útil para depurar firewalls y servicios ya que permite mostrar los timers asociados a un socket, como por ejemplo los keepalives de TCP:

root@hal9000:~# ss -o | grep timer
tcp    ESTAB       0       0                             192.168.56.134:45300             104.208.156.39:https            timer:(keepalive,6min2sec,0)          
tcp    ESTAB       0       0                                 10.10.50.1:59388               10.10.50.101:ssh              timer:(keepalive,88min,0)             
tcp    ESTAB       0       0                             192.168.56.134:56600             20.185.212.106:https            timer:(keepalive,4.776ms,0)           
tcp    ESTAB       0       0                             192.168.56.134:34016            173.194.161.234:https            timer:(keepalive,2.328ms,0)           
tcp    ESTAB       0       0                               10.100.100.6:54252                10.10.10.40:https            timer:(keepalive,4min59sec,0)         
tcp    ESTAB       0       0                             192.168.56.134:50572             192.168.28.183:https            timer:(keepalive,32min,0)             
tcp    ESTAB       0       0                             192.168.56.134:33516              192.168.28.60:2626             timer:(keepalive,34min,0)             
tcp    ESTAB       0       0                             192.168.56.134:34014            173.194.161.234:https            timer:(keepalive,4.436ms,0)           
tcp    ESTAB       0       0                             192.168.56.134:36880              157.240.14.52:https            timer:(keepalive,5min41sec,0)         
tcp    ESTAB       0       0                             192.168.56.134:37910              192.168.28.37:2626             timer:(keepalive,106min,0)            
tcp    ESTAB       0       0                               10.100.100.6:54254                10.10.10.40:https            timer:(keepalive,4min43sec,0)         
tcp    ESTAB       0       0                               10.100.100.6:35802                10.10.10.51:9443             timer:(keepalive,484ms,0)

Mostrar el proceso asociado al socket

Se obtiene la misma salida que netstat -tlpn:

root@hal9000:~# ss -tlpn
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port                                                                                    
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=1945,fd=3))                                                 
LISTEN    0         5                127.0.0.1:631              0.0.0.0:*        users:(("cupsd",pid=3544,fd=6))                                                
LISTEN    0         128                   [::]:22                  [::]:*        users:(("sshd",pid=1945,fd=4))                                                 
LISTEN    0         5                    [::1]:631                 [::]:*        users:(("cupsd",pid=3544,fd=5))                                                
LISTEN    0         1                        *:6566                   *:*        users:(("saned",pid=1885,fd=4))

Uso de filtros

ss permite filtrar la salida utilizando la sintaxis del comando ip route (remitirse a la página de manual ip-route(8) para entender el formato). Por ejemplo, para listar sólo sockets cuya dirección IP destino sea hacia la red 172.0.0.0/8:

root@hal9000:~# ss -a dst 172.0.0.0/8
Netid  State      Recv-Q  Send-Q    Local Address:Port       Peer Address:Port  
tcp    TIME-WAIT  0       0        192.168.56.134:58770    172.217.15.197:https 
tcp    ESTAB      0       0        192.168.56.134:38302    172.217.30.238:https 
tcp    ESTAB      0       0        192.168.56.134:34010      172.217.3.86:https 
tcp    ESTAB      0       0        192.168.56.134:57466     172.217.0.163:https 
tcp    ESTAB      0       0        192.168.56.134:34112   172.217.192.189:https

Obtener información de uso de memoria

Mediante la opción -m es posible visualizar el uso de memoria de cada socket:

root@hal9000:~# ss -am dst 172.0.0.0/8
Netid  State  Recv-Q  Send-Q     Local Address:Port         Peer Address:Port                                                                                   
tcp    ESTAB  0       0         192.168.56.134:38302      172.217.30.238:https  
	 skmem:(r0,rb6291456,t0,tb46080,f4096,w0,o0,bl0,d0)                           
tcp    ESTAB  0       0         192.168.56.134:48742     172.217.172.101:https  
	 skmem:(r0,rb372480,t0,tb46080,f0,w0,o0,bl0,d0)                               
tcp    ESTAB  0       0         192.168.56.134:49242       172.217.8.138:https  
	 skmem:(r0,rb372480,t0,tb46080,f0,w0,o0,bl0,d0)                               
tcp    ESTAB  0       0         192.168.56.134:34010        172.217.3.86:https  
	 skmem:(r0,rb522368,t0,tb46080,f0,w0,o0,bl0,d0)                               
tcp    ESTAB  0       0         192.168.56.134:57466       172.217.0.163:https  
	 skmem:(r0,rb372480,t0,tb46080,f0,w0,o0,bl0,d0)                               
tcp    ESTAB  0       0         192.168.56.134:34112     172.217.192.189:https  
	 skmem:(r0,rb372480,t0,tb87040,f4096,w0,o0,bl0,d0)       

Entre paréntesis (luego de "skmem:") se encuentra la siguiente información (en orden):

  1. rX: memoria reservada para el paquete entrante.
  2. rbX: memoria total que puede ser reservada para el paquete entrante.
  3. tX: memoria usada para el paquete saliente.
  4. tbX: memoria total que puede ser reservada para el paquete saliente.
  5. fX: memoria reservada como cache.
  6. wX: memoria reservada para el paquete saliente.
  7. oX: memoria reservada para opciones del paquete.
  8. blX: memoria reservada para el backlog.

Obtener información avanzada de TCP

La opción -i permite volcar información interna de TCP como round-trip-time, tamaño máximo de segmento, tiempo de retransmisión, algoritmo de congestión y un largo etcétera:

root@hal9000:~# ss -ai dst 172.217.172.101
Netid  State  Recv-Q  Send-Q     Local Address:Port         Peer Address:Port   
tcp    ESTAB  0       0         192.168.56.134:48958     172.217.172.101:https  
	 cubic wscale:8,7 rto:216 rtt:13.99/1.25 ato:40 mss:1368 pmtu:1500 rcvmss:580 advmss:1448 cwnd:10 bytes_sent:4066 bytes_acked:4067 bytes_received:1738 segs_out:20 segs_in:16 data_segs_out:10 data_segs_in:9 send 7.8Mbps lastsnd:26520 lastrcv:26504 lastack:26504 pacing_rate 15.6Mbps delivery_rate 3.8Mbps delivered:11 app_limited busy:84ms rcv_rtt:14 rcv_space:29200 rcv_ssthresh:34912 minrtt:13.588

Consultar el manual de ss para entender cómo se interpreta cada valor.

Estadísticas de sockets

La opción -s muestra un resumen estadístico:

root@hal9000:~# ss -s
Total: 1656
TCP:   1033 (estab 93, closed 924, orphaned 0, timewait 1)

Transport Total     IP        IPv6
RAW	  2         2         0        
UDP	  17        10        7        
TCP	  109       106       3        
INET	  128       118       10       
FRAG	  0         0         0        

Otras opciones

-t, -u, -x y -w (al igual que netstat seleccionan sockets TCP, UDP, Unix y RAW respectivamente.

-4 y -6 filtran IPv4 e IPv6 respectivamente.

Referencias

  • man ss
  • man ip-route


Tal vez pueda interesarte


Compartí este artículo