used open mac active macos tcp netstat listen

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



netstat command mac terminal (14)

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


Desde Yosemite (10.10), hasta Mojave (10.14) , todas las versiones de macOS son compatibles con esto:

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


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 de pts.


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

lsof -nP -i4TCP:$PORT | grep LISTEN

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

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 .


En macOS High Sierra, use este comando:

lsof -nP -i4TCP:$PORT | grep LISTEN

En versiones anteriores, use uno de los siguientes formularios:

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.

Prependa sudo (seguido de un espacio) si necesita información sobre los puertos debajo de # 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 de 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 procesar 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.


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

Encuentra el servidor que se ejecuta en el puerto 80

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

salida de muestra

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

El segundo de la última columna es el PID. En lo de arriba, es 715 .

opciones

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

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

-v - salida detallada, para obtener los ID de proceso

-w - buscar palabras De lo contrario, el comando devolverá información para los puertos 8000 y 8001, no solo "80"

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


Esta es una buena manera en macOS High Sierra:

netstat -an |grep -i listen


Esto funciona en Mavericks (OSX 10.9.2).

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


Esto hizo lo que necesitaba.

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


Hice un pequeño script 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 OSX 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 comprobar si está conectado a Corea del Norte! ;-)


Soy un chico de 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 el más humano. Otros son muy feos y muy difíciles de recordar al solucionar problemas.


También puedes usar:

sudo lsof -i -n -P | grep TCP

Esto funciona en Mavericks.


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 anterior a la última columna, 3105 para este caso


Actualización enero 2016

Realmente sorprendido, nadie ha sugerido:

lsof -i :PORT_NUMBER

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

lsof -i :1337

Otras variaciones, dependiendo de las circunstancias:

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

Usted puede construir fácilmente en esto para extraer el PID en sí. 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:

Para completar, porque frecuentemente se usan juntos:

Para matar el PID:

kill -9 <PID> # kill -9 60401

o como una sola línea:

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


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

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