Quiero saber qué puertos utilizan los procesos en Linux incorporado. Como es simple embedded-linux, no hay líneas de comando de red como netstat, lsof. (solo existen líneas de comando básicas como cat, cp, echo, etc.).
Una solución parcial parece ser usar las líneas de comando "cat / proc / net / tcp" y "cat / proc / net / udp". Sin embargo, no estoy seguro de que la lista impresa de esas líneas de comando muestre todos los puertos en uso , y la lista no muestra qué proceso está vinculado a cierto puerto .
Cualquier comentario será bienvenido.
linux
networking
process
tcp
freddy
fuente
fuente
Respuestas:
Debería poder encontrar todos los puertos abiertos en
/proc/net/tcp
y/proc/net/udp
. Cada uno de esos archivos tiene unainode
columna, que se puede utilizar para encontrar el proceso que posee ese socket.Una vez que tenga un número de inodo, puede ejecutar un comando ls como
ls -l /proc/*/fd/* | grep socket:.$INODE
para encontrar los procesos utilizando ese socket. En caso de que se haya configurado un proceso con diferentes descriptores de archivo para diferentes subprocesos, es posible que deba extender el comandols -l /proc/*/task/*/fd/* | grep socket:.$INODE
para encontrarlos a todos.fuente
find /proc -lname "socket:\[$INODE\]" 2> /dev/null
Para encontrar los INODOS para cualquier puerto, ejecute el siguiente comando
Use cualquier INODE de la salida del comando anterior para encontrar el PID asociado como se muestra a continuación
aquí $ INODE es el valor de cualquier INODE
En un comando de una sola línea, podemos verificar si algún puerto está abierto y asociado a algún PID como se muestra a continuación
fuente