БЕЗ використання мережевих командних рядків у Linux, як знати список відкритих портів та процес, який їм належить?


11

Хочу знати, які порти використовуються, за допомогою яких процесів вбудовується Linux. Оскільки це простий вбудований Linux, немає мережевих командних рядків, таких як netstat, lsof. (існують лише основні командні рядки, такі як cat, cp, echo тощо).

Частковим рішенням здається використання командних рядків "cat / proc / net / tcp" та "cat / proc / net / udp". Однак я не впевнений, що надрукований список із цих командних рядків показує всі використовувані порти , і в списку не відображається, який процес прив’язаний до певного порту .

Будь-які коментарі будуть вдячні.


Я думаю, що це питання краще підходить для Unix & Linux

Відповіді:


15

Ви повинні мати можливість знайти усі відкриті порти у /proc/net/tcpта /proc/net/udp. У кожному з цих файлів є inodeстовпець, за допомогою якого можна знайти процес, що володіє цим сокетом.

Після того, як у вас є номер inode, ви можете запустити команду ls, таку як ls -l /proc/*/fd/* | grep socket:.$INODEзнайти процеси за допомогою цього сокета. У разі, якщо для різних потоків був налаштований процес з різними дескрипторами файлів, вам, можливо, знадобиться розширити команду ls -l /proc/*/task/*/fd/* | grep socket:.$INODE, щоб знайти їх усіх.


1
find /proc -lname "socket:\[$INODE\]" 2> /dev/null
Саммітч

0

Щоб знайти INODES для будь-якого порту, виконайте команду нижче

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

Використовуйте будь-який вивід команди INODE зверху для пошуку пов'язаного PID, як показано нижче

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

тут $ INODE - значення будь-якого INODE

У команді одного рядка ми можемо перевірити, чи будь-який порт відкритий та пов'язаний з будь-яким PID, як показано нижче

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}'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.