Overview
todos sabemos que un puerto solo puede ser utilizado por una sola aplicación o servicio al mismo tiempo. A veces necesitamos saber qué proceso está escuchando en un puerto específico.
en este tutorial, veremos diferentes enfoques para encontrar el proceso que escucha en un puerto en particular en Linux.
root Permission
en Linux, solo el usuario root o el propietario del proceso puede obtener la información detallada del proceso.,
Cuando queremos comprobar un proceso escuchando en un puerto en particular, no sabemos a quién pertenece el proceso.
con el permiso root, podemos obtener toda la información necesaria sobre el proceso, por ejemplo, el identificador del proceso.
por lo tanto, es posible que necesitemos iniciar nuestras herramientas de red con el usuario root (o con sudo).
usando netstat
el comando netstat es miembro del paquete net-tools.
en el pasado, venía preinstalado en muchas distribuciones de Linux. Sin embargo, el paquete net-tools no se ha actualizado desde 2011.,
debido a su falta de soporte para las características modernas del kernel de Linux y otras razones, el paquete net-tools se ha vuelto obsoleto.
dicho esto, netstat en sí sigue siendo ampliamente utilizado, así que echemos un vistazo a cómo puede ayudar.
en primer lugar, veamos un ejemplo de salida del comando netstat:
con las opciones ltnup, netstat nos muestra todos los puertos en uso en el ejemplo anterior.,
echemos un vistazo a lo que significan las opciones:
- l – mostrar solo sockets de escucha
- t – mostrar conexiones TCP
- n – Mostrar direcciones en forma numérica
- u – mostrar conexiones UDP
- p – mostrar ID de proceso/nombre del programa
si revisamos la salida anterior, la última columna es exactamente lo que estamos buscando: un puerto en particular.
simplemente podemos canalizar la salida de netstat al comando grep para obtener la información del proceso en un puerto individual.,
por ejemplo, veamos qué proceso está escuchando en el puerto 22:
root# netstat -ltnup | grep ':22'tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 575/sshd
usando ss
en la sección anterior, discutimos que el paquete net-tools está obsoleto.
el comando ss es el reemplazo del comando netstat.
ahora veamos cómo usar el comando ss para ver qué proceso está escuchando en el puerto 22:
si comprobamos las opciones, encontramos que las opciones que pasamos al comando ss son las mismas que pasamos a netstat.,
la única diferencia es que estábamos haciendo uso del filtro de estado de la utilidad ss en lugar de un proceso grep adicional para filtrar la salida.
Similar a la salida del comando netstat, la información esperada del proceso también se encuentra en la última columna.
usando lsof
el comando lsof puede listar todos los archivos abiertos en un sistema Linux.,
Podemos usar el comando lsof para encontrar el proceso usando un puerto específico con la opción-I :port_number:
root# lsof -i :22COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 575 root 3u IPv4 19373 0t0 TCP *:ssh (LISTEN)
Las primeras cuatro columnas en la salida anterior nos dicen el nombre del proceso que escucha en el puerto 22 y su PID, propietario y el descriptor de archivo.
podemos pasar multiple-I :port al comando lsof para averiguar los procesos que escuchan en varios puertos:
root# lsof -i :22 -i :68COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 575 root 3u IPv4 19373 0t0 TCP *:ssh (LISTEN)dhcpcd 8822 root 10u IPv4 49601 0t0 UDP *:bootpc
usando fuser
la utilidad fuser muestra qué procesos están utilizando archivos, sockets o sistemas de archivos con nombre., Está incluido en el paquete psmisc y preinstalado en muchas distribuciones modernas de Linux por defecto.
Podemos usar esto para ver la información del proceso que se ejecuta en un puerto específico. Una vez más, averigüemos el PID del puerto TCP de escucha de procesamiento 22:
root# fuser 22/tcp22/tcp: 575
la salida anterior es bastante sencilla. Sabemos que el proceso con PID 575 está escuchando en el puerto TCP 22.
sin embargo, no nos da información detallada sobre el proceso, por ejemplo, ¿cuál es el nombre del proceso 575? ¿a quién pertenece el proceso? y así sucesivamente.,
si queremos obtener más detalles sobre el proceso, podemos pasar la opción «-v» al comando fuser para tener una salida detallada:
root# fuser -v 22/tcp USER PID ACCESS COMMAND22/tcp: root 575 F.... sshd
Usando el comando fuser, también podemos verificar la información del proceso en ejecución en múltiples puertos TCP o UDP de una sola vez:
root# fuser -v 22/tcp 68/udp USER PID ACCESS COMMAND22/tcp: root 575 F.... sshd68/udp: root 8822 F.... dhcpcd
conclusión
en este breve artículo, hemos aprendido cuatro utilidades de línea de comandos de Linux diferentes con ejemplos para averiguar la información del proceso que escucha en un puerto en particular.,
todas son herramientas muy potentes para tener en nuestro arsenal en la línea de comandos de Linux.