Cómo determinar qué proceso/pid está escuchando en un determinado puerto

Valoración del Usuario:  / 0
MaloBueno 

¿De qué forma se puede determinar qué proceso está escuchando en un determinado puerto? Supongamos que necesitamos ejecutar un programa que abre el puerto 6789 para aceptar conexiones. Pero al momento de crear el socket el programa finaliza con error debido a que el puerto está siendo utilizado por otro proceso. Esta situación se puede presentar, por ejemplo, cuando estamos desarrollando y probando un programa que abre conexiones y nos quedan instancias abiertas ocupando puertos.



Si deseamos determinar qué proceso está escuchando en un determinado puerto es posible utilizar el parámetro -p del comando netstat (en conjunto con n), el cual agrega la columna PID/Nombre de programa a la salida:

# netstat -np | grep 6789
tcp     0   0 0.0.0.0:6789     0.0.0.0:*     LISTEN   2421/miproceso

El parámetro n es necesario para que netstat no trate de convertir los valores numéricos a nombres de host/puerto/usuario amigables (por ejemplo convertiría 127.0.0.1:80 a localhost:HTTP).

En la última columna se observa el PID (2421) y el nombre de ejecutable (miproceso) del proceso escuachando en el puerto 6789.

Conociendo el PID del proceso es posible detenerlo (TERM) para poder ejecutar una nueva instancia que necesite abrir el mismo puerto:

# kill 2421

También es posible enviar la señal SIGKILL para matar el proceso, si éste no responde:

# kill -9 2421

Más ejemplos de netstat

Listar todos los puertos

Listar todos los sockets en estado listening y non-listening (established según el protocolo TCP):

# netstat -a | more

Listar todos los sockets, pero sólo el protocolo TCP:

# netstat -at | more

Listar todos los sockets, pero sólo el protocolo UDP:

# netstat -au | more

Listar puertos abiertos:

Listar sólo sockets en estado listening:

# netstat -l
# netstat -lt
# netstat -lu

Mostrar estadísticas

Mostrar estadísticas para cada protocolo:

# netstat -s
# netstat -st
# netstat -su

Mostrar información de forma contínua:

Actualizar contínuamente el estado de las conexiones:

# netstat -c

Mostrar información de ruteo

Mostrar la tabla de ruteo del kernel:

# netstat -r

Listar interfaces de red

Mostrar información de interfaces de red en el sistema:

# netstat -i

Incluir información extendida:

# netstat -ei



Suscribirse

    Registrate para recibir las novedades y artículos por correo electrónico.

Linuxito en G+