¿Cómo se usa el comando ss en Linux?

Hablamos sobre el uso del comando ss en Linux. Si no lo conoces te explico que tiene la intención de ser una navaja suiza, para ayudarnos a saber el estado de la red, buscando ser una reemplazo para herramientas clásicas como netstat.

Si consultamos su página de man, podemos leer que no es más que otra utilidad para investigar sockets y que se utiliza para volcar estadísticas de dichos sockets. Permite mostrar información similar a netstat (como hemos dicho antes)

Lo cierto es que yo soy más de herramientas clásicas como netstat, nslookup o ifconfig, pero es cierto que son herramientas que pronto quedarán obsoletas. En cambio otras como ip, dig o ss, serían su reemplazo.

La utilidad de línea de comandos ss puede mostrar estadísticas para sockets de dominio PACKET, TCP, UDP, DCCP, RAW y Unix. Podemos obtener información muy detallada sobre cómo nuestro servidor GNU/Linux se comunica con otras máquinas, redes y servicios; detalles sobre conexiones de red, estadísticas de protocolos de red y conexiones de socket. Con esta información en la mano, podemos solucionar varios problemas de red con mucha más facilidad.

La intención de esta entrada viene a raíz de un hilo de Twitter donde la compañera Érica Aguado nos hablaba de su experiencia con el trabajo de servidores con problemas y como utilizaba diferentes herramientas de línea de comandos:

A raíz de esto me picó la curiosidad y creí que era interesante hablar de esta herramienta llamada ss.

Uso de ss en Linux

Vamos a mostrar los usos más habituales de este comando.

1. Listar todas las conexiones

Primero de todo tenemos el uso sin parámetros, simplemente escribiendo el nombre del comando:

ss

Con un resultado similar al siguiente:

Uso de ss sin parámetros

De esta manera podemos ver todos las conexiones actuales en el host.

2. Listar todos los puertos

Podemos recuperar una lista de puertos de escucha y no escucha usando la opción -a como se muestra a continuación.

ss -a

Con un resultado en mi caso:

Mostrar todos los puertos

3. Listar únicamente los sockets que están escuchando

Con el parámetro -l nos muestra únicamente los sockets que están escuchando:

ss -l

Con el resultado:

Muestra los sockets que están escuchando en el host

4. Mostrar las conexiones TCP o UDP

Con el parámetro -t podemos listar todas las conexiones TCP y con -u todas las conexiones UDP.

ss -t

Con el resultado:

Muestra de todas las conexiones TCP

5. Listar todas las conexiones TCP o UDP

También podemos combinar el parámetro -l, que como hemos visto nos muestra los sockets, con los parámetros -t y -u, para que nos muestren las conexiones TCP o UDP

Por ejemplo:

ss -lt

Con el resultado:

Lista de todas las conexiones TCP

6. Mostrar los PID de los procesos

Podemos mostrar los PID de los procesos utilizando el parámetro -p

como sigue:

ss -p

Con el resultado:

Muestra los PID de los procesos

7. Mostrar un resumen de las estadísticas

Podemos ver un resumen de la lista de conexiones. Puede ser útil cuando la cantidad de datos es tan grande que analizar los datos puede ser como un dolor de muelas.

ss -s

Con un resultado similar a este:

Resumen de las estadísticas

8. Mostrar las conexiones IPv4 o IPv6

Podemos ver únicamnete las conexiones IPv4 con el parámetro -4 o las conexiones IPv6 con el parámetro -6, como sigue:

ss -4

Con un resultado:

Muestra de las conexiones IPv4

9. Mostras conexiones TCP sin resolución de nombres

Una de los usos más habituales que hago en netstat es con el parámetro -tn, que me mostrará las conexiones TCP sin intentar la resolución de nombres. Con ss los parámetros son los mismos, bueno, como la mayoría, la verdad. De esta manera podemos ver tanto la dirección local como la remota, en la conexión:

ss -tn

Una muestra de su uso:

Muestra de conexiones con la resolución de nombres

10. Filtrar conexiones por el número de puerto

El comando ss también nos permite filtrar el número de puerto del socket o la dirección. En este ejemplo vemos como mostrar todas las conexiones de socket con un puerto de origen o destino de ssh, como sigue:

ss -at '( dport = :22 or sport = :22 )'

Con el resultado:

Filtrar conexiones por el número de puerto

Y esto es todo, espero que esta entrada os sirva de utilidad de algún momento. Nos vamos leyendo.