Назад | Перейти на главную страницу

Busybox, netstat, без -p

У меня ультра старый (не спрашивайте зачем) 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