SENZA utilizzare le righe di comando di rete in Linux, come conoscere l'elenco delle porte aperte e il processo che le possiede?


11

Voglio sapere quali porte sono utilizzate da quali processi in embedded-linux. Dato che è un semplice embedded-linux, non ci sono righe di comando di rete come netstat, lsof. (esistono solo righe di comando di base come cat, cp, echo, ecc.).

Una soluzione parziale sembra essere quella di utilizzare le righe di comando "cat / proc / net / tcp" e "cat / proc / net / udp". Tuttavia, non sono sicuro che l'elenco stampato da quelle righe di comando mostri tutte le porte in uso e l'elenco non mostra quale processo è associato a una determinata porta .

Qualsiasi commento sarebbe apprezzato.


Penso che questa domanda sia più adatta a Unix e Linux

Risposte:


15

Dovresti essere in grado di trovare tutte le porte aperte in /proc/net/tcpe /proc/net/udp. Ognuno di questi file ha una inodecolonna, che può essere usata per trovare il processo che possiede quel socket.

Una volta che hai un numero di inode, puoi eseguire un comando ls tale da ls -l /proc/*/fd/* | grep socket:.$INODEtrovare i processi usando quel socket. Nel caso in cui sia stato impostato un processo con descrittori di file diversi per thread diversi, potrebbe essere necessario estendere il comando a ls -l /proc/*/task/*/fd/* | grep socket:.$INODEper trovarli tutti.


1
find /proc -lname "socket:\[$INODE\]" 2> /dev/null
Sammitch,

0

Per trovare gli INODI per qualsiasi porta, eseguire il comando seguente

PORT=8080;cat /proc/net/* | awk -F " " '{print $2 ":" $10 }' | grep -i `printf "%x:" $PORT` | awk -F ":" '{print "PORT=" $2 ", INODE=" $3 }'

Utilizzare qualsiasi INODO dall'output del comando sopra per trovare il PID associato come di seguito

find /proc -lname "socket:\[$INODE\]" 2> /dev/null | head -n 1 | awk -F "/" '{print "PID="$3}'

qui $ INODE è il valore di qualsiasi INODO

In un comando a riga singola, possiamo verificare se una porta è aperta e associata a un PID come di seguito

PORT=8080;find /proc -lname "socket:\[$(cat /proc/net/* | awk -F " " '{print $2 ":" $10 }' | grep -i `printf "%x:" $PORT` | head -n 1 | awk -F ":" '{print $3}')\]" 2> /dev/null | head -n 1 | awk -F "/" '{print "PID="$3}'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.