У меня ультра старый (не спрашивайте зачем) BusyBox (BusyBox v1.01 (2008.12.19-21: 31 + 0000) Встроенная оболочка (ясень)) на моем DreamBox. Я хотел бы узнать, какой процесс какое соединение открыл с помощью netstat. Но я обнаружил, что netstat BusyBox не содержит -п вариант. Какие еще возможности у меня есть, чтобы узнать, какой процесс открыл (и использует) соответствующий сокет?
Вы можете найти эквивалентную информацию в несколько уродливой форме (также известной как шестнадцатеричный) в /proc/net/tcp
. Там вы можете найти inode соединения, который вы можете найти в /proc/$pid/fd/
.
Например:
$ cat /proc/net/tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 6115 1 f5adc4c0 300 0 0 2 -1
...
(В обычном netstat, но не в netstat busybox, -e
вариант также дает вам эту дополнительную информацию.)
Вы можете найти процесс, соответствующий inode, с помощью следующей команды:
# for x in $(find /proc/ | grep /fd/); do ls -la $x 2>/dev/null done | grep 6115
...
lrwx------ 1 root root 64 7 jan 22.50 /proc/2560/fd/3 -> socket:[6115]
Для второго шага вам понадобится root-доступ.
Не так удобно, как -p
вариант, очевидно, но работает в привязке. При необходимости можно написать сценарий.
Это может не помочь, если у вас нет возможности пересобрать Busybox, но если это кому-то поможет ...
У Busybox есть опция конфигурации для поддержки -p
переключатель Busybox netstat
. См. Вариант CONFIG_FEATURE_NETSTAT_PRG
, выбранный в настройках меню busybox через Сетевые утилиты → netstat → Включить вывод имени PID / программы.
Если у вас есть или вы можете получить ss
на вашем устройстве он также может показать вам PID:
ss -ltp # for TCP
ss -lup # for UDP