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).