Tengo un PID de cierto proceso que escucha algunos puertos en mi OS X y necesito saber qué puerto escucha este proceso. ¿Cómo puedo hacerlo?
Sé que puedo usar lsof
para saber qué proceso está escuchando algún puerto, pero necesito realizar una operación inversa.
Gracias.
UPD
OS X usa utilidades BSD, así que tengo BSD, netstat
no Linux netstat
. Linux netstat
tiene la -p
opción de mostrar PID, BSD netstat
utiliza -p
para especificar el puerto y no tiene opción para mostrar PID.
networking
osx
bsd
shau-kote
fuente
fuente
netstat
puede hacer esto por ti Puedegrep
en el PID si desea filtrar la salida denetstat
lsof
uso no es solo de una manera. usted puede hacer algo asílsof|grep ${PID}
. que volcará todo groseramente ygrep
seleccionará las líneas con PID en ellas. En una remota posibilidad de, podría enumerar una línea irrelevante, debido al número PID emparejando por error algún otro valor pero las posibilidades son casi nulasnetstat
no puede mostrar PID.Respuestas:
He encontrado una solución por mi cuenta leyendo en profundidad
man lsof
. (Sí, RT * M todavía ayuda.) Gracias @Gilles por apuntar.Aquí está la solución:
lsof -aPi -p 555
(555 es el PID).Explicación:
-p
para especificar el número PID;-i
para mostrar solo dispositivos de red;-a
a Y dos condiciones anteriores (de lo contrario serán ORed);-P
para mostrar los números de puerto (en su lugar, los nombres de puerto de forma predeterminada).Además, uno puede usar
lsof -aPi4 -p 555
olsof -aPi6 -p 55
para direcciones IPv4 o IP6 solo en consecuencia.Si la salida será analizada por otra
-Fn
opción de programa , puede ser útil. Con esta opciónlsof
, producirá "salida para otro programa" en lugar de una salida con formato agradable.lsof -aPi4 -Fn -p 555
generará algo como esto:PD: todo lo he probado en mi OS X El Capitan, pero como puedo ver, también debería funcionar en Linux.
fuente
lsof
proporciona información sobre archivos abiertos por procesos, incluidos los puertos de red. Está disponible en casi todos los sistemas Unix, incluido OSX .La piedra de Rosetta para Unix no muestra ninguna otra herramienta para “proceso de emparejamiento de archivo o puerto” en OSX.
Para enumerar procesos que escuchan en un puerto TCP, puede usar
lsof -iUDP
enumera los procesos que tienen un socket UDP abierto.lsof -i
enumera todos los sockets de red abiertos (clientes TCP, servidores TCP y otros protocolos IP).fuente
si desea saber qué puerto está escuchando, puede usar la opción -p de netstat. Debe ser el superusuario:
si quieres saber más al respecto prueba este enlace
fuente
netstat
, tengo OS X y, por lo tanto, uso BSDnetstat
. Se utiliza-p
para especificar el puerto TCP / IP, y no tiene la opción de mostrar PID.En FreeBSD, puede usar
sockstat
para esta información. No estoy seguro de si OS X tienesockstat
, ya que no tengo una Mac.Por ejemplo, para ver todas las conexiones TCPv4:
sockstat -4
fuente
sockstat
comando en mi Mac. :(Puede concatenar netstat con grep, awk y sed para mostrar puertos con sus correspondientes pids en Linux y Cygwin:
Más detalles
fuente