SANS utiliser les lignes de commande réseau sous linux, comment connaître la liste des ports ouverts et le processus qui les possède?

11

Je veux savoir quels ports sont utilisés par quels processus dans Embedded-Linux. Puisqu'il s'agit d'un simple Linux intégré, il n'y a pas de lignes de commande réseau telles que netstat, lsof. (seules les lignes de commande de base telles que cat, cp, echo, etc. existent).

Une solution partielle semble être d'utiliser les lignes de commande "cat / proc / net / tcp" et "cat / proc / net / udp". Cependant, je ne suis pas sûr que la liste imprimée de ces lignes de commande affiche tous les ports utilisés et la liste ne montre pas quel processus est lié à certains ports .

Tous les commentaires seraient appréciés.

freddy
la source
Je pense que cette question est mieux adaptée à Unix et Linux

Réponses:

15

Vous devriez pouvoir trouver tous les ports ouverts dans /proc/net/tcpet /proc/net/udp. Chacun de ces fichiers a une inodecolonne, qui peut être utilisée pour trouver le processus propriétaire de ce socket.

Une fois que vous avez un numéro d'inode, vous pouvez exécuter une commande ls telle que ls -l /proc/*/fd/* | grep socket:.$INODEpour trouver les processus utilisant ce socket. Dans le cas où un processus a été configuré avec différents descripteurs de fichiers pour différents threads, vous devrez peut-être étendre la commande à ls -l /proc/*/task/*/fd/* | grep socket:.$INODEafin de les trouver tous.

kasperd
la source
1
find /proc -lname "socket:\[$INODE\]" 2> /dev/null
Sammitch
0

Pour trouver les INODES pour n'importe quel port, exécutez la commande ci-dessous

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

Utilisez n'importe quel INODE de la sortie de commande ci-dessus pour trouver le PID associé comme ci-dessous

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

ici $ INODE est la valeur de tout INODE

Dans une commande sur une seule ligne, nous pouvons vérifier si un port est ouvert et associé à un PID comme ci-dessous

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}'
Anil Agrawal
la source