it-swarm-es.tech

Determinar qué proceso está vinculado a un puerto

Sé que usando el comando:

lsof -i TCP 

(o alguna variante de parámetros con lsof) Puedo determinar qué proceso está vinculado a un puerto en particular. Esto es útil, por ejemplo, si estoy tratando de iniciar algo que quiera vincularse a 8080 y alguien más ya está usando ese puerto, pero no sé qué.

¿Hay una manera fácil de hacer esto sin usar lsof? Paso mucho tiempo trabajando en muchos sistemas y lsof a menudo no está instalado.

92
user5721

netstat -lnp enumerará el pid y el nombre del proceso al lado de cada puerto de escucha. Esto funcionará en Linux, pero no en todos los demás (como AIX). Agregue -t si quieres TCP solamente.

# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:24800           0.0.0.0:*               LISTEN      27899/synergys
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      3361/python
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2264/mysqld
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22964/Apache2
tcp        0      0 192.168.99.1:53         0.0.0.0:*               LISTEN      3389/named
tcp        0      0 192.168.88.1:53         0.0.0.0:*               LISTEN      3389/named

etc.

120
Cakemox

En AIX, netstat & rmsock se pueden utilizar para determinar el enlace del proceso:

[[email protected]] netstat -Ana|grep LISTEN|grep 80
f100070000280bb0 tcp4       0      0  *.37               *.*        LISTEN
f1000700025de3b0 tcp        0      0  *.80               *.*        LISTEN
f1000700002803b0 tcp4       0      0  *.111              *.*        LISTEN
f1000700021b33b0 tcp4       0      0  127.0.0.1.32780    *.*        LISTEN

# Port 80 maps to f1000700025de3b0 above, so we type:
[[email protected]] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (Java).
12
frielp

Otra herramienta disponible en Linux es ss. Desde la página de manual ss en Fedora:

NAME
       ss - another utility to investigate sockets
SYNOPSIS
       ss [options] [ FILTER ]
DESCRIPTION
       ss is used to dump socket statistics. It allows showing information 
       similar to netstat. It can display more TCP and state informations  
       than other tools.

Ejemplo de salida a continuación: la columna final muestra el enlace del proceso:

[[email protected]] ss -ap
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
LISTEN     0      128                    :::http                    :::*        users:(("httpd",20891,4),("httpd",20894,4),("httpd",20895,4),("httpd",20896,4)
LISTEN     0      128             127.0.0.1:munin                    *:*        users:(("munin-node",1278,5))
LISTEN     0      128                    :::ssh                     :::*        users:(("sshd",1175,4))
LISTEN     0      128                     *:ssh                      *:*        users:(("sshd",1175,3))
LISTEN     0      10              127.0.0.1:smtp                     *:*        users:(("sendmail",1199,4))
LISTEN     0      128             127.0.0.1:x11-ssh-offset                  *:*        users:(("sshd",25734,8))
LISTEN     0      128                   ::1:x11-ssh-offset                 :::*        users:(("sshd",25734,7))
8
frielp

Para Solaris puede usar pfiles y luego grep por sockname: o port:.

Una muestra (de aquí ):

pfiles `ptree | awk '{print $1}'` | egrep '^[0-9]|port:'
3

Una vez tuve que tratar de determinar qué proceso estaba detrás de un puerto en particular (esta vez era 8000). Probé una variedad de lsof y netstat, pero luego me arriesgué e intenté acceder al puerto a través de un navegador (es decir, http: // hostname: 8000 / ). Mira, una pantalla de bienvenida me saludó, y se hizo evidente cuál era el proceso (para el registro, fue Splunk ).

Un pensamiento más: "ps -e -o pid, args" (YMMV) a veces puede mostrar el número de puerto en la lista de argumentos. Grep es tu amigo!

2
rickumali