Como todos sabemos, un puerto solo lo utiliza un proceso o servicio a la vez. El puerto identifica un servicio en particular o un proceso que se ejecuta en el sistema. A veces, durante la resolución de problemas, necesitamos saber qué número de puerto está escuchando un determinado proceso. Todos los procesos que se ejecutan en un sistema están asociados con un número de identificación de proceso (PID) y un número de puerto. Para encontrar qué número de puerto está escuchando un proceso en particular, hay algunas formas de las que hablaremos en este artículo.
Antes de continuar con el artículo, asegúrese de tener privilegios de root. Le ayudará a obtener información completa sobre los procesos que se ejecutan en su sistema.
Tenga en cuenta que hemos utilizado Debian 10 para ejecutar los comandos y procedimientos mencionados en este artículo.
Método 1:usar el comando netstat
Netstat es una utilidad de línea de comandos más utilizada que se puede usar para mostrar información sobre conexiones de red, estadísticas de interfaz y tablas de enrutamiento. También se puede utilizar para encontrar qué número de puerto utiliza un determinado proceso. No tienes que instalarlo ya que ya está instalado en los repositorios de todas las distribuciones de Linux. Sin embargo, en caso de que aún no esté instalado en su sistema, use el siguiente comando para instalarlo:
$ sudo apt install net-tools
Para encontrar los números de puerto que están siendo escuchados por los procesos, ejecute el siguiente comando en la Terminal:
$ sudo netstat -ltnp
El siguiente resultado muestra los números de puerto que utilizan ciertos procesos junto con sus ID de proceso (PID).
Si no tiene privilegios de sudo y ejecuta el comando anterior sin sudo, no mostrará el nombre del programa y el PID como se ve en el siguiente resultado.
Ahora veamos qué significa ltnp en el comando anterior significa:
l – mostrar tomas de escucha
t – mostrar conexiones TCP
n- mostrar direcciones IP y números de puerto en forma numérica
p – mostrar PID/nombre del programa
Si observamos la salida de $ sudo netstat -ltnp , la cuarta columna es exactamente lo que estamos buscando:el número de puerto en el que está escuchando un proceso.
Para obtener información de puerto de un solo proceso, simplemente puede canalizar la salida de netstat con el comando grep.
Por ejemplo, para encontrar el número de puerto contra "sshd", use el siguiente comando:
$ sudo netstat –ltnp | grep ‘sshd’
De manera similar, si desea averiguar el nombre del proceso que está escuchando en un puerto específico, digamos el puerto 21, se utilizará el siguiente comando:
$ sudo netstat -ltnp | grep -w ':21'
Método 2:Usar el comando lsof
Con el comando lsof, puede ver la lista de todos los archivos abiertos por los procesos que se ejecutan en su sistema. Lsof puede actuar como una fuente única para obtener información que, de otro modo, implicaría un gran conjunto de herramientas de administración. Similar al comando netstat, necesitará privilegios sudo para obtener información detallada.
Si lsof aún no está instalado en su sistema, use el siguiente comando en Terminal para instalarlo:
$ sudo apt install lsof
Una vez instalado, puede usar la utilidad lsof para encontrar procesos que se ejecutan en puertos específicos. Si ejecuta la utilidad lsof sin ningún parámetro, devolverá mucha información que le resultará difícil de entender. Sin embargo, el uso de parámetros con lsof puede ayudarlo a filtrar y concentrarse en la salida deseada.
Ahora, para encontrar el proceso escuchando en un puerto específico, digamos el puerto 22, use el siguiente comando:
$ sudo lsof -i :22
Este comando devolverá todos los procesos que se ejecutan en el puerto 22.
Método 3:Usar el comando fuser
El fusor es un comando de Linux que se usa para encontrar qué ID de proceso está usando un archivo, directorio o sistema de archivos. Podemos usar este comando para encontrar el proceso que se ejecuta en un puerto específico.
Necesitará la utilidad pmisc para usar el comando fuser. Si aún no está instalado en su sistema, ejecute el siguiente comando para instalarlo:
$ sudo apt install psmisc
Para ver los procesos que se ejecutan en cualquier puerto, digamos el puerto TCP 22, ejecute el siguiente comando en la Terminal:
$ sudo fuser 22/tcp
El comando anterior ha devuelto el proceso escuchando en el puerto número 22. Ahora, para ver el nombre del proceso con cualquier ID de proceso, use la siguiente sintaxis de comando:
$ ps -p [processID] -o comm=
En nuestro caso sería
$ ps -p [5859] -o comm=
Del resultado anterior, podemos haber encontrado el nombre de proceso sshd contra el ID de proceso 5859. Esto implica que el sshd con el ID de proceso 5859 está escuchando en el puerto 22.
En este artículo, hemos aprendido algunas utilidades de línea de comandos que puede usar para ver en qué puertos está escuchando un proceso en particular.