GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo encontrar qué servicio está escuchando en un puerto en particular

Esta guía explica algunas formas diferentes de encontrar qué servicio está escuchando en un puerto particular en Linux. La mayoría de ustedes conoce el puerto predeterminado de servicios o procesos populares. Por ejemplo, el puerto predeterminado de Apache es 80, el puerto predeterminado de FTP es 21 y el puerto predeterminado de SSH es 22. Puede encontrar los nombres y números de puerto en Linux como se describe en esta guía. . Los números de puerto predeterminados también se pueden cambiar a cualquier puerto personalizado para asegurar un servidor Linux. Por ejemplo, las siguientes guías describen cómo cambiar el puerto predeterminado de Apache, FTP y SSH a un puerto diferente.

  • Cómo cambiar el puerto predeterminado de Apache a un puerto personalizado
  • Cómo cambiar el puerto FTP predeterminado a un puerto personalizado
  • Cómo cambiar el puerto predeterminado de SSH a un puerto personalizado

Si se cambia el número de puerto predeterminado, ¿cómo encontraría qué servicio está escuchando en qué puerto? ¡Eso es lo que vamos a averiguar ahora!

Encuentre qué servicio está escuchando en un puerto particular en Linux

He enumerado cuatro métodos a continuación para verificar qué servicio se está ejecutando en un número de puerto en particular. Seguiré actualizando esta lista si encuentro nuevos métodos en el futuro. Por lo tanto, márquelo como favorito y revíselo de vez en cuando.

Método 1:uso de netstat

Esta es la forma más utilizada para encontrar qué servicio está escuchando en qué puerto. Netstat es una utilidad de línea de comandos que se utiliza para imprimir conexiones de red, tablas de enrutamiento, estadísticas de interfaz, conexiones enmascaradas y membresías de multidifusión.

Netstat está disponible en los repositorios predeterminados de la mayoría de las distribuciones de Linux.

Para instalarlo en Arch Linux y sus variantes, haga:

$ sudo pacman -S net-tools

En CentOS, RHEL:

$ sudo yum install net-tools

En Fedora:

$ sudo dnf install net-tools

En Debian, Ubuntu:

$ sudo apt install net-tools

Una vez instalado, ejecute el siguiente comando para encontrar qué servicios están escuchando en qué puertos:

$ sudo netstat -tulpn

Salida de muestra:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      665/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1026/sshd           
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      2068/python3        
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1072/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1026/sshd           
tcp6       0      0 :::80                   :::*                    LISTEN      1062/apache2        
udp        0      0 127.0.0.53:53           0.0.0.0:*                           665/systemd-resolve 
udp        0      0 192.168.225.22:68       0.0.0.0:*                           647/systemd-network 
udp        0      0 192.168.225.53:68       0.0.0.0:*                           647/systemd-network 
udp6       0      0 fe80::a00:27ff:feff:546 :::*                                647/systemd-network 
udp6       0      0 fe80::a00:27ff:fe7e:546 :::*                                647/systemd-network

Como puede ver, un servicio de python (simpleHTTPserver en este caso) está escuchando en el puerto número 8000, el servicio mysqld está escuchando en el puerto 3306, el servicio ssh está funcionando en el puerto número 22, apache2 está funcionando en el puerto 80 y así sucesivamente.

Aquí,

  • -t bandera muestra conexiones tcp.
  • -u la bandera muestra conexiones UDP.
  • -l la bandera muestra los enchufes de escucha.
  • -p El indicador muestra el ID del proceso (PID) y el nombre del proceso de lo que sea que esté usando ese puerto.
  • -n La bandera muestra las direcciones numéricas.

El comando anterior enumera todos los servicios y los números de puerto que están escuchando. ¿Qué sucede si desea encontrar qué servicio está escuchando en un puerto en particular? Aquí es donde comando grep ¡Viene muy bien! Podemos combinar netstat y grep Comando para filtrar la salida de un servicio específico, por ejemplo mysqld , como a continuación.

$ sudo netstat -tulpn | grep mysqld
[sudo] password for sk: 
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld

¿Ver? El servicio mysqld está escuchando en el número de puerto 3306.

Si ya conoce el número de puerto, pero no sabe qué servicio lo está utilizando actualmente, simplemente reemplace el nombre del servicio con el número de puerto como se muestra a continuación.

$ sudo netstat -tulpn | grep -w 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld

Aquí, -w flag muestra solo aquellas líneas que contienen coincidencias que forman palabras completas. En otras palabras, -w opción muestra la coincidencia exacta de la cadena dada.

También puede usar -i para ignorar las distinciones entre mayúsculas y minúsculas, de modo que los caracteres que difieren solo en mayúsculas y minúsculas coincidan entre sí

$ sudo netstat -tulpn | grep -i 3306

Es así de simple.

Para obtener más detalles, consulte las páginas man.

$ man netstat

Netstat es en su mayoría obsoleto. La alternativa a netstat es "ss".

Método 2:usar el comando "ss"

ss es una utilidad de línea de comandos para investigar sockets. Es una alternativa a netstat y el uso de "ss" es casi el mismo que "netstat". Viene preinstalado en Ubuntu y sus variantes.

Para encontrar qué servicios están escuchando en qué puertos, ejecute:

$ sudo ss -tulpn

Salida de muestra:

Netid          State             Recv-Q            Send-Q                                            Local Address:Port                       Peer Address:Port                                                                                                                                                                                     
udp            UNCONN            0                 0                                                 127.0.0.53%lo:53                              0.0.0.0:*               users:(("systemd-resolve",pid=671,fd=12))                                                                                                                                
udp            UNCONN            0                 0                                         192.168.225.22%enp0s3:68                              0.0.0.0:*               users:(("systemd-network",pid=653,fd=17))                                                                                                                                
udp            UNCONN            0                 0                                         192.168.225.53%enp0s8:68                              0.0.0.0:*               users:(("systemd-network",pid=653,fd=25))                                                                                                                                
udp            UNCONN            0                 0                             [fe80::a00:27ff:fe7e:8a9c]%enp0s8:546                                [::]:*               users:(("systemd-network",pid=653,fd=24))                                                                                                                                
udp            UNCONN            0                 0                             [fe80::a00:27ff:feff:d2e0]%enp0s3:546                                [::]:*               users:(("systemd-network",pid=653,fd=22))                                                                                                                                
tcp            LISTEN            0                 80                                                    127.0.0.1:3306                            0.0.0.0:*               users:(("mysqld",pid=1076,fd=32))                                                                                                                                        
tcp            LISTEN            0                 128                                               127.0.0.53%lo:53                              0.0.0.0:*               users:(("systemd-resolve",pid=671,fd=13))                                                                                                                                
tcp            LISTEN            0                 128                                                     0.0.0.0:22                              0.0.0.0:*               users:(("sshd",pid=1015,fd=3))                                                                                                                                           
tcp            LISTEN            0                 128                                                           *:80                                    *:*               users:(("apache2",pid=1094,fd=4),("apache2",pid=1090,fd=4),("apache2",pid=1089,fd=4),("apache2",pid=1088,fd=4),("apache2",pid=1087,fd=4),("apache2",pid=1062,fd=4))      
tcp            LISTEN            0                 128                                                        [::]:22                                 [::]:*               users:(("sshd",pid=1015,fd=4))

Para filtrar la salida de un servicio en particular (por ejemplo, mysqld), use:

$ sudo ss -tulpn | grep -w mysqld
tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32))

Para obtener más detalles, consulte las páginas man.

$ man ss

Método 3:usar lsof

Como su nombre lo dice, lsof es una utilidad de línea de comandos para enumerar todos los archivos abiertos que pertenecen a todos los procesos activos.

Para instalarlo en Linux, use los siguientes comandos según el tipo de distribución que use.

En Arch Linux:

$ sudo pacman -S lsof

En Debian, Ubuntu:

$ sudo apt install lsof

En CentOS, RHEL:

$ sudo yum install lsof

En Fedora:

$ sudo dnf install lsof

Para encontrar qué procesos se están ejecutando en qué puertos, simplemente especifique el número de puerto como se muestra en el siguiente comando:

$ sudo lsof -i :80

Salida de muestra:

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2 1062     root    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1087 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1088 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1089 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1090 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1094 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)

Para obtener más detalles, consulte las páginas man.

$ man lsof

Método 4:usar el comando del fusor

fusor es otra utilidad de línea de comandos para identificar procesos usando archivos o sockets. Muestra los PID de los procesos que utilizan los archivos o sistemas de archivos especificados.

También está disponible en los repositorios predeterminados de la mayoría de las distribuciones de Linux.

Para instalarlo en Arch Linux, ejecute:

$ sudo pacman -S psmisc

En Debian, Ubuntu:

$ sudo apt install psmisc

En CentOS, RHEL:

$ sudo yum install psmisc

En Fedora:

$ sudo dnf install psmisc

Primero necesitamos encontrar el PID de un servicio o proceso escuchando en un puerto en particular. Por ejemplo, voy a encontrar el PID de un proceso que escucha en el puerto 3306 usando el comando:

$ sudo fuser 3306/tcp

Verá una salida como la siguiente.

3306/tcp: 1076

Aquí, 1076 es el PID.

Y luego descubra el proceso real usando el PID usando el comando:

$ ps -p 1076 -o comm=
mysqld

Alternativamente, puede usar -v bandera para ver los detalles completos en un solo comando.

$ sudo fuser -v 3306/tcp
                     USER        PID ACCESS COMMAND
3306/tcp:            mysql      1076 F.... mysqld

Para obtener más detalles, consulte las páginas man.

$ man fuser

Ahora conoce cuatro herramientas diferentes para encontrar qué procesos están escuchando en qué puertos. Los cuatro son fáciles de usar y están disponibles en la mayoría de las distribuciones de Linux. Si conoce otras herramientas, háganoslo saber en la sección de comentarios a continuación. Comprobaré y actualizaré esta lista en consecuencia.


Linux
  1. Verifique qué servicio está escuchando en un puerto Linux dado

  2. Shell - ¿Cómo encontrar el directorio de algún comando?

  3. ¿Cómo verificar qué zona horaria en Linux?

  4. ¿Cómo averiguar el espacio de nombres de un proceso en particular?

  5. ¿Cómo puedo averiguar qué sistema operativo de servidor está ejecutando un sitio en particular?

Cómo encontrar el número de puerto de un servicio en Linux

Cómo saber a qué grupos pertenece un usuario en Linux

Averigüe qué procesos están escuchando en un puerto particular en Linux

Debian:averigüe en qué número de puerto está escuchando un proceso

Cómo matar el proceso de ejecución de Linux en un puerto particular

Linux:averigüe en qué número de puerto está escuchando un proceso