
Estoy probando una aplicación que abre sus propios puertos (actúa como servidor para estos puertos, por lo tanto escucha en esos puertos) y donde la misma aplicación se conecta a puertos vinculados por otras aplicaciones (actúa como cliente para estos puertos).
Me gustaría obtener una descripción general de qué puertos crea la aplicación y a qué aplicaciones y puertos se conecta.
¿Cómo puedo hacer esto?
Respuesta1
Puedes usar netstat
para esto. Vea el ejemplo (busqué 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 utilizo los parámetros -putan
(porque son fáciles de recordar).
-p
: muestra los PID de la aplicación/proceso-u
: muestra puertos/conexiones udp-t
: muestra puertos/conexiones tcp-a
: muestra tanto los enchufes de escucha como los de no escucha-n
: salida numérica (no realice búsquedas DNS para nombres de host, etc.)
En el resultado anterior, verá que hay un proceso de demonio ssh ( sshd
) con PID 1725
escuchando en el puerto 22
en 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.5
en el número de puerto 22
, mi dirección IP es 1.2.3.4
y mi puerto externo es 45734
. Verás que la conexión está establecida. Por lo tanto, inicié sesión a través de ssh
.
Respuesta2
Otra herramienta que puede hacer esto eslsof
:
# 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 los puertos de Internet abiertos por un proceso-a
para hacer que todas las opciones sean AND-ed-p 1981
para mostrar el resultado del proceso 1981-n
para inhibir la búsqueda de nombres de host y mostrar IP en su lugar-P
para inhibir la búsqueda de servicios y mostrar el número de puerto en su lugar
lsof
tiene la ventaja de que puede especificar el proceso a verificar en lugar de tener que extraerlo de una salida mayor. netstat
está disponible de manera más confiable en los sistemas, aunque lsof
se está volviendo más estándar de lo que solía ser.
Respuesta3
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.
Respuesta4
ss -a4 | less
Supongo que estás hablando de IPv4... Si no, puedes reemplazar el 4 en el comando anterior con 6. El parámetro -a es para mostrar todos los puertos (de escucha y no). Puede agregar -n a los parámetros si no desea resolver nombres en la pantalla.