Compruebe qué proceso está usando un puerto en Linux

¿Qué es un puerto?

En las redes informáticas, un puerto representa un punto lógico de entrada y salida para una conexión. Los puertos se basan en software y son completamente virtuales. Estos puertos en una computadora son administrados por el sistema operativo.

¿De qué hablaremos?

Este breve tutorial demuestra los diversos métodos para determinar qué proceso o servicio de Linux está escuchando actualmente en un puerto específico. Hablemos de los puertos y su propósito.

¿Cómo son los puertos análogos a los puertos físicos?

Así como los puertos físicos ayudan a interactuar con varios dispositivos periféricos conectados a una computadora, los puertos ayudan a los diferentes servicios a comunicarse entre sí. Estos servicios pueden estar en la misma computadora o en diferentes computadoras.

Un poco sobre el puerto de un servicio

Para escuchar las solicitudes de conexión entrantes, un proceso se asocia con un número de puerto. La mayoría de los procesos están configurados con un puerto predeterminado y tienen que usar ese puerto según su especificación. No cambian automáticamente al otro puerto a menos que su configuración se modifique explícitamente.

Algunos ejemplos de protocolos y sus puertos predeterminados asociados incluyen el protocolo Secure Shell (SSH) (puerto 22), Apache HTTP (puerto 80), el servidor de base de datos MySQL (puerto 3306), etc. Puede utilizar esta información para descubrir qué puerto predeterminado utiliza un servicio.

El archivo de configuración de estos servicios también se puede editar para usar algún otro puerto.

Comprobando los puertos en Linux

Veamos ahora cómo verificar qué puerto/puertos está usando un proceso en Linux. Aquí, le mostraremos los diferentes comandos para este propósito.

1. Comando Lsof

La utilidad lsof es útil para obtener una lista de los puertos que utiliza su sistema. Consideremos el siguiente ejemplo para obtener información sobre un proceso (procesos) utilizando el puerto TCP 22:

$ sudo lsof -i TCP: 22

El comando lsof brinda más información, como el nombre del usuario y qué ID de proceso están vinculados a cada proceso. Funciona con puertos TCP y UDP.

2. Comando SS

El comando ss es otra forma de averiguar qué procesos están vinculados a un determinado puerto. Aunque lsof es la abreviatura más común, algunas personas pueden encontrar que ss es más útil.

Busquemos los procesos o servicios que escuchan en el puerto 3306:

$ sudo ss -tunap | grep : 3306

Analicemos este comando:

1. t : le dice al comando ss que muestre los paquetes TCP.

2. u : le dice al comando ss que muestre los paquetes UDP.

3. n : se utiliza para mostrar los números de puerto en lugar de sus traducciones.

4. a : Se utiliza para mostrar los enchufes de escucha y de no escucha de todo tipo.

5. p : Se utiliza para mostrar los procesos que utilizan un socket.

El resultado del comando anterior muestra qué proceso está utilizando qué puerto. También puede emitir el siguiente comando:

$ sudo ss -tup -a sport = : 80

Aquí, el deporte significa el puerto de origen.

Estos dos enfoques pueden ayudarlo a encontrar los ID de los procesos que están conectados a diferentes puertos.

3. Comando Netstat

El comando netstat muestra la información sobre su red y puede usarse para solucionar problemas o cambiar la forma en que está configurada su red. También puede vigilar de cerca sus conexiones de red.

Este comando se usa a menudo para ver información sobre conexiones entrantes y salientes, tablas de enrutamiento, escucha de puertos y estadísticas de uso. Aunque se ha vuelto obsoleto en los últimos años, netstat sigue siendo una herramienta útil para analizar redes.

Con el comando grep, netstat puede determinar qué proceso o servicio está usando un determinado puerto (mencionando el puerto):

$ sudo netstat -ltnp | grep -w ‘:80’

Las opciones utilizadas aquí se pueden clasificar de la siguiente manera:

1. t : Solo muestra la conexión TCP.

2. l : Se utiliza para mostrar los resultados en una lista.

3. n : Muestra direcciones y números de puerto en formato numérico.

4. p : Muestra el PID y el nombre del programa que están asociados con cada socket.

4. Comando del fusor

El comando fuser determina los procesos que utilizan los archivos o sockets. Puede usarlo para enumerar los servicios que se ejecutan en un puerto específico. Tomemos el ejemplo del puerto 3306 y veamos qué servicios se están ejecutando aquí:

$ sudo fuser 3306 / tcp

Esto nos proporciona los números de proceso que utilizan este puerto. Puede utilizar este número de proceso para encontrar los nombres de proceso correspondientes. Por ejemplo, si el número de proceso es 15809, el comando a usar aquí es el siguiente:

$ ps -p 15809 -o com =

Sin embargo, se requieren ciertas herramientas para identificar los procesos que utilizan un puerto no estándar. “LSOF” es una herramienta para descubrir qué servicios están disponibles en una red y qué puertos utilizan. Considere el siguiente ejemplo. Esto muestra cómo enumerar los puertos de escucha UDP y TCP:

$ sudo lsof -Pni | egrep «(UDP|ESCUCHAR)»

La siguiente es una descripción de las opciones que se utilizan aquí:

1. P : Suprime la búsqueda de nombre de servicio de puerto.

2. n : Muestra las direcciones de red numéricas.

3. i : Lista los sockets IP.

Tanto los puertos como los procesos asociados se muestran en el resultado mencionado anteriormente. Esta forma es particularmente útil para procesos con puertos no predeterminados.

Conclusión

En este artículo, hablamos sobre cuatro posibles herramientas de línea de comandos de Linux y brindamos ejemplos sobre cómo usarlas para averiguar qué proceso está escuchando en un determinado puerto.