¿Quién está escuchando en un puerto TCP dado en Mac OS X?

En Linux, puedo usar netstat -pntl | grep $PORT netstat -pntl | grep $PORT o fuser -n tcp $PORT para saber qué proceso (PID) está escuchando en el puerto TCP especificado. ¿Cómo obtengo la misma información en Mac OS X?

En macOS High Sierra, use este comando:

 lsof -nP -i4TCP:$PORT | grep LISTEN 

En versiones anteriores, use una de las siguientes formas:

 lsof -nP -iTCP:$PORT | grep LISTEN lsof -nP -i:$PORT | grep LISTEN 

Sustituya $PORT con el número de puerto o una lista de números de puerto separados por comas.

Anteponga sudo (seguido de un espacio) si necesita información sobre los puertos a continuación # 1024.

El -n es para mostrar direcciones IP en lugar de nombres de host. Esto hace que el comando se ejecute mucho más rápido, porque las búsquedas DNS para obtener los nombres de host pueden ser lentas (varios segundos o un minuto para muchos hosts).

El indicador -P es para mostrar números de puerto sin formato en lugar de nombres resueltos como http , ftp o más nombres de servicios esotéricos como dpserve , socalia .

Vea los comentarios para más opciones.

También puedes usar:

 sudo lsof -i -n -P | grep TCP 

Esto funciona en Mavericks.

Desde Yosemite (10.10), hasta High Sierra (10.13) , cada versión de macOS admite esto:

 sudo lsof -iTCP -sTCP:LISTEN -n -P 

Actualización enero de 2016

Realmente sorprendido de que nadie haya sugerido:

 lsof -i :PORT_NUMBER 

para obtener la información básica requerida. Por ejemplo, verificar en el puerto 1337:

 lsof -i :1337 

Otras variaciones, dependiendo de las circunstancias:

 sudo lsof -i :1337 lsof -i tcp:1337 

Puedes construir fácilmente sobre esto para extraer el PID mismo. Por ejemplo:

 lsof -t -i :1337 

que también es equivalente (en resultado) a este comando:

 lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID 

Ilustración rápida:

enter image description here

Para completar, porque se usan con frecuencia juntos:

Para matar el PID:

 kill -9  # kill -9 60401 

o como un trazador de líneas:

 kill -9 $(lsof -t -i :1337) 

Esto funciona en Mavericks (OSX 10.9.2).

 sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN 

en OS X puede usar la opción -v para netstat para dar el pid asociado.

tipo:

 netstat -anv | grep [.]PORT 

la salida se verá así:

 tcp46 0 0 *.8080 *.* LISTEN 131072 131072 3105 0 

El PID es el número antes de la última columna, 3105 para este caso

En macOS, aquí hay una manera fácil de obtener la identificación del proceso que está escuchando en un puerto específico con netstat . Este ejemplo busca un proceso que sirva contenido en el puerto 80:

encontrar servidor ejecutándose en el puerto 80

 netstat -anv | egrep -w [.]80.*LISTEN 

muestra de salida

 tcp4 0 0 *.80 *.* LISTEN 131072 131072 715 0 

El 2 ° de la última columna es el PID. En arriba, es 715 .

opciones

-a : muestra todos los puertos, incluidos los utilizados por los servidores

-n – muestra números, no busca nombres. Esto hace que el comando sea mucho más rápido

-v – salida detallada, para obtener los ID del proceso

-w – palabras de búsqueda. De lo contrario, el comando devolverá información para los puertos 8000 y 8001, no solo para “80”

LISTEN : brinde información solo para los puertos en modo LISTEN, es decir, servidores

En Snow Leopard (OS X 10.6.8), ejecutando ‘man lsof’ produce:

 lsof -i 4 -a 

(la entrada manual real es ‘lsof -i 4 -a -p 1234’)

Las respuestas anteriores no funcionaron en Snow Leopard, pero estaba tratando de usar ‘netstat -nlp’ hasta que vi el uso de ‘lsof’ en la respuesta por puntos.

Soy un tipo Linux. En Linux es extremadamente fácil con netstat -ltpn o cualquier combinación de esas letras. Pero en Mac OS X netstat -an | grep LISTEN netstat -an | grep LISTEN es lo más humano. Otros son muy feos y muy difíciles de recordar cuando se solucionan problemas.

 lsof -n -i | awk '{ print $1,$9; }' | sort -u 

Esto muestra quién está haciendo qué. Elimina -n para ver nombres de host (un poco más lento).

En la última versión de macOS puedes usar este comando:

 lsof -nP -i4TCP:$PORT | grep LISTEN 

Si le resulta difícil recordar, entonces tal vez debería crear una función bash y exportarla con un nombre más amigable como tal

 vi ~/.bash_profile 

y luego agregue las siguientes líneas a ese archivo y guárdelo.

 function listening_on() { lsof -nP -i4TCP:"$1" | grep LISTEN } 

Ahora puede escribir listening_on 80 en su Terminal y ver qué proceso está escuchando en el puerto 80 .

Esto hizo lo que necesitaba.

 ps -eaf | grep `lsof -t -i:$PORT` 

Hice un pequeño guión para ver no solo quién está escuchando dónde, sino también para mostrar las conexiones establecidas y a qué países. Funciona en OSI Siera

 #!/bin/bash printf "\nchecking established connections\n\n" for i in $(sudo lsof -i -n -P | grep TCP | grep ESTABLISHED | grep -v IPv6 | grep -v 127.0.0.1 | cut -d ">" -f2 | cut -d " " -f1 | cut -d ":" -f1); do printf "$i : " & curl freegeoip.net/xml/$i -s -S | grep CountryName | cut -d ">" -f2 | cut -d"< " -f1 done printf "\ndisplaying listening ports\n\n" sudo lsof -i -n -P | grep TCP | grep LISTEN | cut -d " " -f 1,32-35 #EOF 

 Sample output checking established connections 107.178.244.155 : United States 17.188.136.186 : United States 17.252.76.19 : United States 17.252.76.19 : United States 17.188.136.186 : United States 5.45.62.118 : Netherlands 40.101.42.66 : Ireland 151.101.1.69 : United States 173.194.69.188 : United States 104.25.170.11 : United States 5.45.62.49 : Netherlands 198.252.206.25 : United States 151.101.1.69 : United States 34.198.53.220 : United States 198.252.206.25 : United States 151.101.129.69 : United States 91.225.248.133 : Ireland 216.58.212.234 : United States displaying listening ports mysqld TCP *:3306 (LISTEN) com.avast TCP 127.0.0.1:12080 (LISTEN) com.avast TCP [::1]:12080 (LISTEN) com.avast TCP 127.0.0.1:12110 (LISTEN) com.avast TCP [::1]:12110 (LISTEN) com.avast TCP 127.0.0.1:12143 (LISTEN) com.avast TCP [::1]:12143 (LISTEN) com.avast TCP 127.0.0.1:12995 (LISTEN) com.avast [::1]:12995 (LISTEN) com.avast 127.0.0.1:12993 (LISTEN) com.avast [::1]:12993 (LISTEN) Google TCP 127.0.0.1:34013 (LISTEN) 

¡Esto puede ser útil para verificar si está conectado a Corea del Norte! 😉

Esta es una buena forma en macOS High Sierra:

 netstat -an |grep -i listen