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 lsofpara 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, netstatno Linux netstat. Linux netstattiene la -popción de mostrar PID, BSD netstatutiliza -ppara especificar el puerto y no tiene opción para mostrar PID.
networking
osx
bsd
shau-kote
fuente
fuente

netstatpuede hacer esto por ti Puedegrepen el PID si desea filtrar la salida denetstatlsofuso no es solo de una manera. usted puede hacer algo asílsof|grep ${PID}. que volcará todo groseramente ygrepseleccionará 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 nulasnetstatno 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:
-ppara especificar el número PID;-ipara mostrar solo dispositivos de red;-aa Y dos condiciones anteriores (de lo contrario serán ORed);-Ppara mostrar los números de puerto (en su lugar, los nombres de puerto de forma predeterminada).Además, uno puede usar
lsof -aPi4 -p 555olsof -aPi6 -p 55para direcciones IPv4 o IP6 solo en consecuencia.Si la salida será analizada por otra
-Fnopció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 555generará 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
lsofproporciona 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 -iUDPenumera los procesos que tienen un socket UDP abierto.lsof -ienumera 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-ppara especificar el puerto TCP / IP, y no tiene la opción de mostrar PID.En FreeBSD, puede usar
sockstatpara 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 -4fuente
sockstatcomando 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