Busybox, netstat, no -p
Solution 1:
You can find the equivalent information in slightly uglier form (a.k.a. hexadecimal) in /proc/net/tcp
. There, you can find the inode of the connection, which you can look up under /proc/$pid/fd/
.
For example:
$ 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
...
(In normal netstat, but not in busybox netstat, the -e
option also gives you that extra information.)
You can find the process which corresponds to the inode with the following command:
# 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]
You need root access for the second step.
Not as convenient as the -p
option, obviously, but works in a bind. Could be scripted, if necessary.
Solution 2:
This may not help, if you don't have the opportunity to rebuild Busybox, but in case it helps anyone...
Busybox does have a configuration option to support the -p
switch of Busybox netstat
. See option CONFIG_FEATURE_NETSTAT_PRG
, selected in busybox menuconfig via Networking Utilities → netstat → Enable PID/Program name output.
Solution 3:
If you have or can get ss
on your device it can show you the PID too:
ss -ltp # for TCP
ss -lup # for UDP