¿Quién está escuchando en un puerto TCP dado en Mac OS X?
1382
En Linux, puedo usar netstat -pntl | grep $PORTo fuser -n tcp $PORTpara averiguar qué proceso (PID) está escuchando en el puerto TCP especificado. ¿Cómo obtengo la misma información en Mac OS X?
Sustituya $PORTcon el número de puerto o una lista separada por comas de números de puerto.
Anteponga sudo(seguido de un espacio) si necesita información sobre puertos inferiores al # 1024.
La -nbandera 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 -Pindicador se utiliza para mostrar los números de puerto RAW en lugar de nombres resueltos como http, ftpo nombres de servicios más esotéricos como dpserve, socalia.
Vea los comentarios para más opciones.
Para completar, porque frecuentemente se usan juntos:
Prefije esto con sudopara ver los procesos que no le pertenecen.
Gordon Davisson
30
en león, trabajó con un cambiosudo lsof -i TCP:$PORT | grep LISTEN
dhaval
58
En Mountain Lion, no necesitas grep:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Siu Ching Pong -Asuka Kenji-
16
Después de tantas búsquedas, esta es la mejor. las personas que desean copiar directamente el comando deben reemplazar $ PORT con el número de puerto real o definir la variable PORT y eso también para múltiples puertos como: export PORT = 8080,4433; lsof -n -i4TCP: $ PORT
siddhusingh
2
Uno no necesita sudo si el puerto para investigar está por encima de 1024.
stigkj
626
Desde Snow Leopard (10.6), hasta Mojave (10.14) y Catalina (10,15) , cada versión de macOS admite esto:
sudo lsof -iTCP -sTCP:LISTEN -n -P
Personalmente, terminé con esta función simple en mi ~/.bash_profile:
listening() {
if [ $# -eq 0 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P
elif [ $# -eq 1 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
else
echo "Usage: listening [pattern]"
fi
}
Luego, el listeningcomando le brinda una lista de los procesos que escuchan en algún puerto y listening smthajusta esto para algún patrón.
Teniendo esto, es bastante fácil preguntar sobre un proceso particular, por ejemplo listening dropbox, o puerto, por ejemplo listening 22.
lsofEl comando tiene algunas opciones especializadas para preguntar sobre puerto, protocolo, proceso, etc. pero personalmente he encontrado que la función anterior es mucho más útil, ya que no necesito recordar todas estas opciones de bajo nivel. lsofes una herramienta bastante poderosa, pero desafortunadamente no es tan cómoda de usar.
Esto va en mis archivos de puntos. Busco cada pocos meses y siempre encuentro esta respuesta.
danemacmillan
1
Siento que esta respuesta debería aceptarse como OP dijo que lo hace -pntl, lo que enumeraría todos los servicios. La respuesta aceptada pide que se especifique uno o más números de puerto, que no es remotamente el mismo.
Esto es genial. Prefiero saber qué hay allí antes de matarlo, así que (basado en esto) acabo de agregar a mi bashrc:, whatsonport() { ps -ef | grep `lsof -t -i :$1` }entonces:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
Sigfried
1
Gracias, lsof -i :PORT_NUMBERhizo un trabajo para mí.
También debe agregar grep LISTENpara mostrar solo a los oyentes.
pts
3
¡Esto es lo que necesitaba! lsofNo pude encontrar el puerto. pero netstatmostró que estaba abierto. -vfue la salsa secreta que me faltaba.
Aaron McMillin
32
En macOS, aquí hay una manera fácil de obtener la ID del proceso que está escuchando en un puerto específico con netstat . Este ejemplo busca un proceso que sirve contenido en el puerto 80:
encontrar 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 anterior, es 715 .
opciones
-a - muestra todos los puertos, incluidos los utilizados por los servidores
-n- Mostrar números, no buscar nombres. Esto hace que el comando sea mucho más rápido
-v - salida detallada, para obtener las ID de proceso
-w- palabras de búsqueda. De lo contrario, el comando devolverá información para los puertos 8000 y 8001, no solo "80"
LISTEN - proporcione información solo para puertos en modo ESCUCHAR, es decir, servidores
En Snow Leopard (OS X 10.6.8), ejecutar 'man lsof' produce:
lsof -i 4 -a
(la entrada manual real es 'lsof -i 4 -a -p 1234')
Las respuestas anteriores no funcionaban en Snow Leopard, pero estaba tratando de usar 'netstat -nlp' hasta que vi el uso de 'lsof' en la respuesta de pts.
Soy un chico de Linux. En Linux es extremadamente fácil con netstat -ltpno cualquier combinación de esas letras. Pero en Mac OS X netstat -an | grep LISTENes el más humano. Otros son muy feos y muy difíciles de recordar al solucionar problemas.
Su respuesta no es mala, pero está en una pregunta con varias respuestas altamente votadas, y una aceptada, de hace varios años. En el futuro, trate de concentrarse en las preguntas más recientes, especialmente las que aún no han sido respondidas.
¿Este comando muestra también los puertos que no son TCP y los que no escuchan? La pregunta pregunta explícitamente por escuchas en puertos TCP solamente.
pts
Según la página de manual de lsof (8): If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
Misha Tavkhelidze
@Misha Tavkhelidze: Por lo tanto, también muestra a los no oyentes, por lo que no responde a la pregunta.
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! ;-)
Para macOS, uso dos comandos juntos para mostrar información sobre los procesos que escuchan en la máquina y el proceso de conexión a servidores remotos. En otras palabras, para verificar los puertos de escucha y las conexiones actuales (TCP) en un host, puede usar los dos comandos siguientes juntos
1. netstat -p tcp -p udp
2. lsof -n -i4TCP -i4UDP
Pensé que agregaría mi opinión, espero que pueda terminar ayudando a alguien.
netstat -p tcp | grep $PORT
no muestra PID ya que netstat en Mac OS X no puede mostrar PID.netstat -anv
muestra el puerto en Mac OS X (fuente: solución a continuación por @SeanHamiliton)Respuestas:
En macOS High Sierra y posterior, use este comando:
o solo para ver solo IPv4:
En versiones anteriores, use uno de los siguientes formularios:
Sustituya
$PORT
con el número de puerto o una lista separada por comas de números de puerto.Anteponga
sudo
(seguido de un espacio) si necesita información sobre puertos inferiores al # 1024.La
-n
bandera 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
-P
indicador se utiliza para mostrar los números de puerto RAW en lugar de nombres resueltos comohttp
,ftp
o nombres de servicios más esotéricos comodpserve
,socalia
.Vea los comentarios para más opciones.
Para completar, porque frecuentemente se usan juntos:
Para matar el PID:
fuente
sudo
para ver los procesos que no le pertenecen.sudo lsof -i TCP:$PORT | grep LISTEN
grep
:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Desde Snow Leopard (10.6), hasta Mojave (10.14) y Catalina (10,15) , cada versión de macOS admite esto:
sudo lsof -iTCP -sTCP:LISTEN -n -P
Personalmente, terminé con esta función simple en mi
~/.bash_profile
:Luego, el
listening
comando le brinda una lista de los procesos que escuchan en algún puerto ylistening smth
ajusta esto para algún patrón.Teniendo esto, es bastante fácil preguntar sobre un proceso particular, por ejemplo
listening dropbox
, o puerto, por ejemplolistening 22
.lsof
El comando tiene algunas opciones especializadas para preguntar sobre puerto, protocolo, proceso, etc. pero personalmente he encontrado que la función anterior es mucho más útil, ya que no necesito recordar todas estas opciones de bajo nivel.lsof
es una herramienta bastante poderosa, pero desafortunadamente no es tan cómoda de usar.fuente
-pntl
, lo que enumeraría todos los servicios. La respuesta aceptada pide que se especifique uno o más números de puerto, que no es remotamente el mismo.También puedes usar:
Esto funciona en Mavericks.
fuente
-i
opción lo hace significativamente más rápido. 0.02 segundos vs 2 segundos. En mi solicitud, esto marcó la diferencia.Actualización enero 2016
Realmente sorprendido, nadie ha sugerido:
para obtener la información básica requerida. Por ejemplo, comprobando en el puerto 1337:
Otras variaciones, según las circunstancias:
Puede construir fácilmente sobre esto para extraer el PID en sí. Por ejemplo:
que también es equivalente (en resultado) a este comando:
Ilustración rápida
Para completar, porque frecuentemente se usan juntos:
Para matar el PID:
o como un trazador de líneas:
fuente
lsof -t -i :1338
.-t
devolverá la identificación del proceso, por lo que no tendrá que awk / head.kill -9 $(lsof -t -i :5000)
en el capitanwhatsonport() { ps -ef | grep `lsof -t -i :$1` }
entonces:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
lsof -i :PORT_NUMBER
hizo un trabajo para mí.Esto funciona en Mavericks (OSX 10.9.2).
fuente
Para los puertos ESCUCHAR, ESTABLECIDO y CERRADO
Solo para los puertos LISTEN
Para un puerto LISTEN específico, por ejemplo: puerto 80
O si solo desea un resumen compacto [sin servicio / aplicaciones descritas], vaya a NETSTAT. El lado bueno aquí es que no se necesita sudo
Explicando los artículos utilizados:
-n suprime el nombre de host
-i para protocolos IPv4 e IPv6
-P omita los nombres de puerto
-a [sobre netstat] para todos los enchufes
-norte [sobre netstat] no resuelve nombres, muestra las direcciones de red como números
fuente
en OS X puede usar la opción -v para netstat para dar el pid asociado.
tipo:
la salida se verá así:
El PID es el número antes de la última columna, 3105 para este caso
fuente
grep LISTEN
para mostrar solo a los oyentes.lsof
No pude encontrar el puerto. peronetstat
mostró que estaba abierto.-v
fue la salsa secreta que me faltaba.En macOS, aquí hay una manera fácil de obtener la ID del proceso que está escuchando en un puerto específico con netstat . Este ejemplo busca un proceso que sirve contenido en el puerto 80:
encontrar el servidor que se ejecuta en el puerto 80
salida de muestra
El segundo de la última columna es el PID. En lo anterior, es 715 .
opciones
-a
- muestra todos los puertos, incluidos los utilizados por los servidores-n
- Mostrar números, no buscar nombres. Esto hace que el comando sea mucho más rápido-v
- salida detallada, para obtener las ID de proceso-w
- palabras de búsqueda. De lo contrario, el comando devolverá información para los puertos 8000 y 8001, no solo "80"LISTEN
- proporcione información solo para puertos en modo ESCUCHAR, es decir, servidoresfuente
En la última versión de macOS puede usar este comando:
Si le resulta difícil recordar, entonces tal vez debería crear una
bash
función y exportarla con un nombre más amigable como estey luego agregue las siguientes líneas a ese archivo y guárdelo.
Ahora puede escribir
listening_on 80
su Terminal y ver qué proceso está escuchando en el puerto80
.fuente
En Snow Leopard (OS X 10.6.8), ejecutar 'man lsof' produce:
(la entrada manual real es 'lsof -i 4 -a -p 1234')
Las respuestas anteriores no funcionaban en Snow Leopard, pero estaba tratando de usar 'netstat -nlp' hasta que vi el uso de 'lsof' en la respuesta de pts.
fuente
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 Xnetstat -an | grep LISTEN
es el más humano. Otros son muy feos y muy difíciles de recordar al solucionar problemas.fuente
Esto muestra quién está haciendo qué. Elimine -n para ver los nombres de host (un poco más lento).
fuente
If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
-sTCP:LISTEN
alsof
Esto hizo lo que necesitaba.
fuente
Hice un pequeño guión para ver no solo quién escucha dónde sino también para mostrar las conexiones establecidas y a qué países. Funciona en OSX Siera
¡Esto puede ser útil para verificar si está conectado a Corea del Norte! ;-)
fuente
Esta es una buena manera en macOS High Sierra:
fuente
Inspirado por el usuario Brent Self:
lsof -i 4 -a | grep LISTEN
fuente
Para macOS, uso dos comandos juntos para mostrar información sobre los procesos que escuchan en la máquina y el proceso de conexión a servidores remotos. En otras palabras, para verificar los puertos de escucha y las conexiones actuales (TCP) en un host, puede usar los dos comandos siguientes juntos
Pensé que agregaría mi opinión, espero que pueda terminar ayudando a alguien.
fuente