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
… Y la alternativa es usar en su logar el comando ss:
ss -a
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.
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.
Aunque, si necesitamos un mayor nivel de detalle, podemos añadir el argumento -e a la sintaxis de netstat:
netstat -A inet -e
El mismo argumento funciona de forma similar con el comando ss:
ss -f inet -e
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.
También podemos usar el argumento -l con el comando ss:
ss -l
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.
Lo mismo podemos hacer con el comando ss:
ss -p
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
Y en le caso de que necesitemos utilizar el comando ss…
ss -t
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
Y lo mismo haremos con el comando ss:
ss -u
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
En el caso del comando ss también disponemos del argumento -s, pero en este caso es bastante menos detallado:
ss -s
Y esto es todo por hoy. Espero que te resulte útil.