Estoy probando una aplicación que abre sus propios puertos (actúa como un servidor para estos puertos, por lo tanto, escucha en esos puertos) y donde la misma aplicación se conecta a los puertos vinculados por otras aplicaciones (actúa como cliente para estos puertos).
Me gustaría obtener una visión general de qué puertos crea la aplicación y a qué aplicaciones y puertos se conecta.
A menudo uso los parámetros -putan(porque son fáciles de recordar).
-p: muestra los PID de la aplicación / proceso
-u: muestra los puertos / conexiones udp
-t: muestra los puertos / conexiones TCP
-a: muestra los enchufes de escucha y de no escucha
-n: salida numérica (no haga búsquedas de DNS para nombres de host, etc.)
En el resultado anterior, verá que hay un proceso ssh daemon ( sshd) con PID 1725escuchando en el puerto 22en todas las interfaces de red ( 0.0.0.0). También hay un proceso de cliente ssh (PID 2491) conectado a la dirección IP 1.2.3.5en el número de puerto 22, mi dirección IP es 1.2.3.4y mi puerto externo es 45734. Usted ve que la conexión está establecida. Por lo tanto, estoy conectado vía ssh.
Una conexión TCP establecida en el puerto 22 no indica una autenticación exitosa. TCP debe establecerse antes de que pueda ocurrir la autenticación en cualquier dirección.
jamesbtate
@Puddingfox sí, es cierto, podríamos decir mejor "Estoy conectado a ese puerto", pero por comprensión dije "estoy conectado", porque es más ilustrativo.
caos
1
jeje ... '-putan' Estoy tan tentado a corregir este error de ortografía menor;)
James Mertz
¿Por qué utilizar utilidades obsoletas cuando hay modernas disponibles? ss -lntp es la utilidad proporcionada por la suite iproute2 .
# lsof -i -a -p 1981
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:22 (LISTEN)
#
Las opciones utilizadas son las siguientes:
-i imprimir puertos de internet abiertos por un proceso
-a para hacer que todas las opciones sean AND-ed
-p 1981 para mostrar salida para el proceso 1981
-n para inhibir la búsqueda de nombre de host y mostrar IP en su lugar
-P para inhibir la búsqueda de servicio y mostrar el número de puerto en su lugar
lsoftiene la ventaja de que puede especificar el proceso para verificar en lugar de tener que extraerlo de una salida más grande. netstatestá disponible de manera más confiable en los sistemas, aunque se lsofestá volviendo más estándar de lo que solía ser.
Me gustaría ejecutar este comando antes de iniciar la aplicación que deseo monitorear, pero ¿puedo establecer qué pid obtendrá una aplicación antes de iniciarla?
Baz
@Baz, si desea monitorear una aplicación cuando se inicia (por ejemplo, antes de stracedarse cuenta de que es PID), debe probar la solución que @olivecoder sugirió.
Supongo que está hablando de IPv4 ... Si no, puede reemplazar el 4 en el comando anterior por 6. El parámetro -a es mostrar todos los puertos (de escucha y no). Puede agregar -n a los parámetros si no desea resolver los nombres en la pantalla.
Otra herramienta que puede hacer esto es
lsof
:Las opciones utilizadas son las siguientes:
-i
imprimir puertos de internet abiertos por un proceso-a
para hacer que todas las opciones sean AND-ed-p 1981
para mostrar salida para el proceso 1981-n
para inhibir la búsqueda de nombre de host y mostrar IP en su lugar-P
para inhibir la búsqueda de servicio y mostrar el número de puerto en su lugarlsof
tiene la ventaja de que puede especificar el proceso para verificar en lugar de tener que extraerlo de una salida más grande.netstat
está disponible de manera más confiable en los sistemas, aunque selsof
está volviendo más estándar de lo que solía ser.fuente
strace
darse cuenta de que es PID), debe probar la solución que @olivecoder sugirió.ss
utilidad del paquete iproute para Linuxfuente
Ya tenemos buenas respuestas, pero solo enumeran los puertos que están abiertos en el momento en que se ejecuta el comando.
strace
es la herramienta adecuada para monitorear las conexiones abiertas durante la vida útil de la aplicación:El resultado le mostrará información adicional como solicitudes UDP y conexiones abiertas pero cerradas.
fuente
ss -a4 | less
Supongo que está hablando de IPv4 ... Si no, puede reemplazar el 4 en el comando anterior por 6. El parámetro -a es mostrar todos los puertos (de escucha y no). Puede agregar -n a los parámetros si no desea resolver los nombres en la pantalla.
fuente