Qué puertos utiliza una aplicación [duplicado]

11

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.

¿Cómo puedo hacer esto?

Baz
fuente

Respuestas:

17

Puedes usar netstatpara esto. Vea el ejemplo (que me encantó ssh):

netstat -putan | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1725/sshd
tcp        0      0 1.2.3.4:45734           1.2.3.5:22              ESTABLISHED 2491/ssh
tcp6       0      0 :::22                   :::*                    LISTEN      1725/sshd

Explicación:

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.

caos
fuente
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 .
MariusMatutiae
7

Otra herramienta que puede hacer esto es lsof:

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

gowenfawr
fuente
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ó.
gowenfawr
3

ssutilidad del paquete iproute para Linux

Serge Chirik
fuente
3

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:

strace -e socket,connect,close -f -o hipchat.strace.txt hipchat

El resultado le mostrará información adicional como solicitudes UDP y conexiones abiertas pero cerradas.

Olivecoder
fuente
0

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.

rotten777
fuente