БЕЗ использования сетевых командных строк в 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столбец, который можно использовать для поиска процесса, владеющего этим сокетом.

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

kasperd
источник
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}'
Анил Агравал
источник