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):
- rX: memoria reservada para el paquete entrante.
- rbX: memoria total que puede ser reservada para el paquete entrante.
- tX: memoria usada para el paquete saliente.
- tbX: memoria total que puede ser reservada para el paquete saliente.
- fX: memoria reservada como cache.
- wX: memoria reservada para el paquete saliente.
- oX: memoria reservada para opciones del paquete.
- 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