Androide

Cómo verificar los puertos de escucha en Linux (puertos en uso)

Como utilizar NETSTAT para listar puertos abiertos en Windows

Como utilizar NETSTAT para listar puertos abiertos en Windows

Tabla de contenido:

Anonim

Al solucionar problemas de conectividad de red o problemas específicos de la aplicación, una de las primeras cosas que debe verificar debe ser qué puertos están realmente en uso en su sistema y qué aplicación está escuchando en un puerto específico.

Este artículo explica cómo averiguar qué servicios están escuchando en qué puertos utilizando los comandos netstat , ss y lsof . Las instrucciones son aplicables para todos los sistemas operativos basados ​​en Linux y Unix como macOS.

¿Qué es el puerto de escucha?

El puerto de red se identifica por su número, la dirección IP asociada y el tipo de protocolo de comunicación como TCP o UDP.

El puerto de escucha es un puerto de red en el que escucha una aplicación o proceso, que actúa como un punto final de comunicación.

Cada puerto de escucha puede abrirse o cerrarse (filtrarse) usando un firewall. En términos generales, un puerto abierto es un puerto de red que acepta paquetes entrantes de ubicaciones remotas.

No puede tener dos servicios escuchando el mismo puerto en la misma dirección IP.

Por ejemplo, si está ejecutando un servidor web Apache que escucha en los puertos 80 y 443 e intenta instalar Nginx, el último no se iniciará porque los puertos HTTP y HTTPS ya están en uso.

Verifique los puertos de escucha con netstat

netstat es una herramienta de línea de comandos que puede proporcionar información sobre conexiones de red.

Para enumerar todos los puertos TCP o UDP que se están escuchando, incluidos los servicios que utilizan los puertos y el estado del socket, use el siguiente comando:

sudo netstat -tunlp

Las opciones utilizadas en este comando tienen el siguiente significado:

  • -t : muestra los puertos TCP. -u : muestra los puertos UDP. -n : muestra direcciones numéricas en lugar de resolver hosts. -l : muestra solo los puertos de escucha. -p : muestra el PID y el nombre del proceso del oyente. Esta información se muestra solo si ejecuta el comando como usuario root o sudo.

La salida se verá más o menos así:

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 929/master tcp6 0 0:::3306:::* LISTEN 534/mysqld tcp6 0 0:::80:::* LISTEN 515/apache2 tcp6 0 0:::22:::* LISTEN 445/sshd tcp6 0 0:::25:::* LISTEN 929/master tcp6 0 0:::33060:::* LISTEN 534/mysqld udp 0 0 0.0.0.0:68 0.0.0.0:* 966/dhclient

Las columnas importantes en nuestro caso son:

  • Proto : el protocolo utilizado por el socket. Local Address : la dirección IP y el número de puerto en el que escucha el proceso. PID/Program name : el PID y el nombre del proceso.

sudo netstat -tnlp | grep:22

El resultado muestra que en esta máquina, el servidor SSH utiliza el puerto 22:

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd tcp6 0 0:::22:::* LISTEN 445/sshd

Si la salida está vacía, significa que nada está escuchando en el puerto.

También puede filtrar la lista en función de criterios, por ejemplo, PID, protocolo, estado, etc.

netstat es obsoleto y se reemplaza por ss e ip , pero aún así es uno de los comandos más utilizados para verificar las conexiones de red.

Verifique los puertos de escucha con ss

ss es nuevo netstat . Carece de algunas de las funciones de netstat , pero expone más estados TCP y es un poco más rápido. Las opciones de comando son en su mayoría las mismas, por lo que la transición de netstat a ss no es difícil.

Para obtener una lista de todos los puertos de escucha con ss , escriba:

sudo ss -tunlp

La salida es casi la misma que la informada por netstat :

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=445, fd=3)) LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master", pid=929, fd=13)) LISTEN 0 128 *:3306 *:* users:(("mysqld", pid=534, fd=30)) LISTEN 0 128 *:80 *:* users:(("apache2", pid=765, fd=4), ("apache2", pid=764, fd=4), ("apache2", pid=515, fd=4)) LISTEN 0 128:22:* users:(("sshd", pid=445, fd=4)) LISTEN 0 100:25:* users:(("master", pid=929, fd=14)) LISTEN 0 70 *:33060 *:* users:(("mysqld", pid=534, fd=33))

Verifique los puertos de escucha con lsof

lsof es una potente utilidad de línea de comandos que proporciona información sobre archivos abiertos por procesos.

En Linux, todo es un archivo. Puede pensar en un socket como un archivo que escribe en la red.

Para obtener una lista de todos los puertos TCP que escuchan con el tipo lsof :

sudo lsof -nP -iTCP -sTCP:LISTEN

Las opciones utilizadas son las siguientes:

  • -n : no convierte números de puerto a nombres de puerto. -p : no resuelve los nombres de host, muestra las direcciones numéricas. -iTCP -sTCP:LISTEN - Muestra solo archivos de red con estado TCP LISTEN.

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 445 root 3u IPv4 16434 0t0 TCP *:22 (LISTEN) sshd 445 root 4u IPv6 16445 0t0 TCP *:22 (LISTEN) apache2 515 root 4u IPv6 16590 0t0 TCP *:80 (LISTEN) mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN) mysqld 534 mysql 33u IPv6 19973 0t0 TCP *:33060 (LISTEN) apache2 764 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN) apache2 765 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN) master 929 root 13u IPv4 19637 0t0 TCP *:25 (LISTEN) master 929 root 14u IPv6 19638 0t0 TCP *:25 (LISTEN)

La mayoría de los nombres de las columnas de salida se explican por sí mismos:

  • COMMAND , PID , USER : el nombre, el pid y el usuario que ejecuta el programa asociado con el puerto. NAME : el número de puerto.

Para encontrar qué proceso está escuchando en un puerto en particular, por ejemplo, el puerto 3306 usaría:

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

El resultado muestra que el servidor MySQL usa el puerto 3306 :

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)

Para obtener más información, visite la página de manual de lsof y lea sobre todas las otras opciones poderosas de esta herramienta.

Conclusión

Le hemos mostrado varios comandos que puede usar para verificar qué puertos están en uso en su sistema y cómo encontrar qué proceso escucha en un puerto específico.

terminal