Comprobar puertos en Ubuntu con netstat y sus alternativas (Parte 1)

El comando netstat (network statistics) es muy usado en el mundo GNU/Linux para consultar información relativa a las conexiones de red, tablas de enrutamiento, estadísticas por separado de cada uno de los adaptadores de red que tengamos, etc. Además, es multiplataforma, y podemos encontrarlo también en otros sistemas operativos, como macOS, Solaris, BSD e, incluso, Windows.

Sin embargo, lo cierto es que está considerado como un comando obsoleto desde hace algunos años y, en el caso de GNU/Linux, su funcionalidad ha sido asumida por otros dos comandos: ss e ip.

Esto no quiere decir que no podamos seguir usando netstat, al menos mientras esté disponible, pero pienso que es interesante conocer los métodos alternativos que nos ofrece GNU/Linux para obtener los mismos resultados. Así, cuando netstat falte no lo echaremos tanto de menos.

Por este motivo, en SomeBooks.es  le dedicaremos un par de artículos para comparar algunos de los usos más comunes de netstat y su equivalencia con los comandos ss e ip. Hoy comenzaremos por el primero de ellos.

Si no encuentras el comando netstat en tu sistema, puede que no se haya instalado de forma predeterminada. En ese caso, es probable que aún se encuentre en los repositorios y únicamente tendrías que instalarlo. Para lograrlo, debes recordar que netstat forma parte del paquete net-tools, por lo que habría que usar el siguiente comando:

sudo apt install net-tools

Usos frecuentes de netstat y sus equivalencias con ss

Listar todos los puertos del sistema

Cuando necesitamos consultar todas las conexiones relacionadas con los puertos activos en el sistema, independientemente de que se estén escuchando o no, podemos utilizar netstat con la siguiente sintaxis:

netstat -a

Este es el principio de la salida del comando netstat, que es mucho más extensa.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-001

… Y la alternativa es usar en su logar el comando ss:

ss -a

Y aquí puedes ver el resultado del comando ss, que no es idéntico, pero sí equivalente.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-002

Conexiones para una familia de direcciones

Como la opción anterior es demasiado genérica, puede que necesitemos especificar la familia de direcciones que nos interesan. Por ejemplo, para consultar las conexiones para el protocolo TCP/IPv4, bastaría con escribir lo siguiente:

netstat -A inet

Las opciones que tenemos son: inet, unix, ipx, ax25, netrom y ddp. Obviamente, inet hace referencia a TCP/IPv4.

En este caso, la salida del comando será como en la imagen.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-003

Si queremos utilizar en su lugar el comando ss, bastaría con escribir lo siguiente:

ss -f inet

En este caso, las opciones son: unix, inet, inet6, link, netlink. Como ves, hemos perdido algunas de las opciones más antiguas, pero hemos ganado inet6, que representa las conexiones para el protocolo TCP/IPv6.

De nuevo, el resultado no es idéntico, pero resulta equivalente.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-004

Aunque, si necesitamos un mayor nivel de detalle, podemos añadir el argumento -e a la sintaxis de netstat:

netstat -A inet -e

De nuevo, es fácil que la salida del comando no quepa en la pantalla

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-005

El mismo argumento funciona de forma similar con el comando ss:

ss -f inet -e

… Y también en este caso es muy probable que debas desplazarte por la salida para leerla completa.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-006

Mostrar únicamente los puertos que están escuchando

Es muy frecuente que sólo nos interesen los puertos de nuestro sistema que estén escuchando en un momento concreto. Para consultarlos con netstat sólo tenemos que usar el argumento -l:

netstat -l

La salida del comando será parecida a las anteriores, pero conteniendo únicamente la información que nos interesa.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-007

También podemos usar el argumento -l con el comando ss:

ss -l

Y el resultado obtenido será como en la imagen.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-008

Consultar el nombre y el PID de los programas que usan cada puerto

Si lo que necesitamos es relacionar los puertos que se están usando con los procesos que los utilizan, podemos usar netstat con el argumento -p que, además del nombre de cada proceso, nos ofrecerá su PID:

netstat -p

Observa que para obtener información sobre todos los procesos, deberás ejecutar netstat como administrador.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-009

Lo mismo podemos hacer con el comando ss:

ss -p

…Aunque en este caso no necesitaremos privilegios administrativos.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-010

Mostrar únicamente los resultados relacionados con TCP

Si queremos filtrar los resultados para que aparezcan únicamente aquellos que estén relacionados con el protocolo TCP, podemos utilizar el comando netstat con el argumento -t:

netstat -t

Como cabe esperar, la salida se reduce a los datos esperados.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-013

Y en le caso de que necesitemos utilizar el comando ss

ss -t

… Y lo mismo ocurre con el comando ss.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-014

Mostrar únicamente los resultados relacionados con UDP

De igual modo, si lo que quisiéramos filtrar fuesen los resultados relacionados con el protocolo UDP, podemos utilizar el comando netstat con el argumento -u:

netstat -u

… Aunque en este caso no hemos obtenido ningún resultado.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-015

Y lo mismo haremos con el comando ss:

ss -u

… Y, como cabe esperar, tampoco obtenemos resultados.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-016

Mostrar un resumen estadístico del uso de la red

Cuando necesitamos conocer el número de conexiones activas, los intentos de conexión fallidos, el número de paquetes erróneos que se han recibido, etc., podemos hacer uso de netstat con el argumento -s:

netstat -s

La salida aparece agrupada por tipo de conexión.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-011

En el caso del comando ss también disponemos del argumento -s, pero en este caso es bastante menos detallado:

ss -s

Aquí, la salida es más escueta.

Comprobar-puertos-en-Ubuntu-con-netstat-y-otras-alternativas-012

Y esto es todo por hoy. Espero que te resulte útil.