Wie kann man die Liste der offenen Ports und den Prozess, dem sie gehören, kennen, ohne Netzwerkbefehlszeilen unter Linux zu verwenden?

11

Ich möchte wissen, welche Ports von welchen Prozessen in Embedded-Linux verwendet werden. Da es sich um einfaches Embedded-Linux handelt, gibt es keine Netzwerkbefehlszeilen wie netstat, lsof. (Es gibt nur grundlegende Befehlszeilen wie cat, cp, echo usw.).

Eine Teillösung scheint darin zu bestehen, die Befehlszeilen "cat / proc / net / tcp" und "cat / proc / net / udp" zu verwenden. Aber ich bin nicht sicher , ob die gedruckte Liste von diesen Befehlszeilen zeigen alle Ports im Einsatz , und die Liste nicht angezeigt , welcher Prozess zu bestimmt Port binded wird .

Kommentare sind willkommen.

Freddy
quelle
Ich denke, diese Frage ist besser für Unix & Linux

Antworten:

15

Sie sollten in der Lage sein, alle offenen Ports in /proc/net/tcpund zu finden /proc/net/udp. Jede dieser Dateien verfügt über eine inodeSpalte, in der der Prozess gefunden werden kann, dem dieser Socket gehört.

Sobald Sie eine Inode-Nummer haben, können Sie einen ls-Befehl ausführen ls -l /proc/*/fd/* | grep socket:.$INODE, um die Prozesse zu finden, die diesen Socket verwenden. Wenn ein Prozess mit unterschiedlichen Dateideskriptoren für unterschiedliche Threads eingerichtet wurde, müssen Sie möglicherweise den Befehl auf ls -l /proc/*/task/*/fd/* | grep socket:.$INODEerweitern, um alle zu finden.

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

Um die INODES für einen Port zu finden, führen Sie den folgenden Befehl aus

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

Verwenden Sie eine beliebige INODE-Ausgabe von oben, um die zugehörige PID wie folgt zu ermitteln

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

hier ist $ INODE der Wert eines INODE

In einem einzeiligen Befehl können wir überprüfen, ob ein Port offen ist und einer PID zugeordnet ist (siehe unten)

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
quelle