Cómo usar netstat para mostrar qué proceso está escuchando en un puerto

27

Estoy en una computadora portátil OS X Mountain Lion y tengo un par de cajas Vagrant. Estoy tratando de averiguar qué proceso está escuchando en el puerto 8080. Mis variaciones producen como cien líneas pero ninguna con un número de puerto específico. Estoy asumiendo algo como:

netstat -XXX | grep 8080
timpone
fuente
¿Está esto en un entorno hogareño o profesional?
Lucas Kauffman
bueno, recreando un servidor enviro localmente. si quieres mudarte a un sitio diferente, está bien. Las diferentes versiones de netstat admiten diferentes argumentos.
timpone
Bien, señor, todo parece estar en orden aquí, por favor continúe y que tenga un buen día.
Lucas Kauffman

Respuestas:

52

Desafortunadamente, en OSX estás atascado con el BSD netstatque no te mostrará la ID del proceso que está conectada a un puerto determinado. Lo que tienes que hacer es usar lsof. La sintaxis que necesitará usar es:

lsof -i :8080

Esto imprimirá grandes cantidades de información, la mayoría de las cuales no le interesan, pero los campos están bien etiquetados. Por ejemplo, mira este ejemplo de salida.

lsof -i :53237
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GoogleTal 927 guest   29u  IPv4 0x2c3f7f95244855c3      0t0  TCP localhost:53237 (LISTEN)

Esto me dice que el puerto 53237 está en uso por el ID de proceso 927. Al leer el campo COMANDO, tenga en cuenta que esta salida está truncada, en realidad el nombre completo del binario es GoogleTalkPlugin.

Scott Pack
fuente
Gracias, esto me acerca mucho, va a ser bastante genérico VBoxHeadl: ¿hay alguna forma de ver qué instancia de VirtualBox (tengo dos en este momento) o estoy preguntando demasiado (probablemente el último). thx
timpone
@timpone: No sé lo suficiente sobre VirtualBox para ayudarte en ese camino Puede verificar la línea de comando del proceso para ver si está listada allí, o usar lsof -p PIDy examinar la lista de archivos abiertos hasta que la encuentre.
Scott Pack
genial, gracias por ayuda
timpone
8

Esto es lo que me gusta usar cuando busco el PID de un puerto de escucha. Para uso de Linux:netstat -tunlp

  • n red
  • l puertos de escucha
  • proceso p
  • t tcp
  • tu udp

Se puede encontrar información adicional en las páginas del manual.

CDSU
fuente
-pno enumera los argumentos para el programa. ¿Cómo veo esto?
jameshfisher
44
OP preguntó sobre OSX. -p no es una opción en la versión OSX de netstat.
Ted Bigham
-pen OSX es port. Odio las decisiones de los desarrolladores de hacer diferentes argumentos para OSX y Linux ...
Daniel W.
5

Estaba en el proceso de modificación netstaten OS X para proporcionar esta función y me topé con el hecho de que -vle dará el pid asociado con un socket.

Sean Hamilton
fuente
La -vincrementa el nivel de detalle y está documentado. developer.apple.com/library/mac/documentation/Darwin/Reference/…
Leathe
1
lo siento, quise decir que el hecho de que imprima el PID no está documentado, no es que exista la opción.
Sean Hamilton
4

Para mí, las siguientes dos líneas funcionan mejor para mostrar qué aplicaciones tienen abiertos los puertos de escucha y el túnel, lsof es totalmente multiplataforma:

netstat -Watn | grep LISTEN
lsof -Pnl +M -i -cmd | grep LISTEN
Tomachi
fuente
1

Para averiguar el puerto específico, utilice el siguiente comando netstat

  netstat -an | grep ':8080'

fuente
3
OP preguntó sobre cómo obtener el proceso. Esto no muestra la identificación del proceso.
Ted Bigham el
1

Del hombre netstat

-p, --program Muestra el PID y el nombre del programa al que pertenece cada socket.

Normalmente solo hago esto: netstat -antup | grep 8080

Hermes Conrad
fuente
hmm ... esto suena como lo que me gustaría pero me da diferentes opciones en OS X para -p-p protocol Show statistics about protocol, which is either a well-known name
timpone
@timpone: -ppara mostrar el PID es un comando GNU netstat, mientras que OSX usa BSD netstat.
Scott Pack
-pno enumera los argumentos para el programa. ¿Cómo veo esto?
jameshfisher
1
OP preguntó sobre OSX. -p no es una opción en la versión OSX de netstat.
Ted Bigham
-pen OSX es port. Odio las decisiones de los desarrolladores de hacer diferentes argumentos para OSX y Linux ...
Daniel W.
0

El siguiente comando muestra la conexión:

netstat -antop | grep :8080

Para ver el flujo completo en tiempo real, puede usar watch:

watch -d -t -n 1 'lsof -n -i :8080'
suhas
fuente