TANPA menggunakan baris perintah jaringan di linux, bagaimana cara mengetahui daftar port terbuka dan proses yang memilikinya?

11

Saya ingin tahu port mana yang digunakan oleh proses mana dalam embedded-linux. Karena sederhana embedded-linux, tidak ada baris perintah jaringan seperti netstat, lsof. (hanya baris perintah dasar seperti cat, cp, echo, dll yang ada).

Solusi parsial tampaknya menggunakan baris perintah "cat / proc / net / tcp" dan "cat / proc / net / udp". Namun, saya tidak yakin daftar yang dicetak dari baris perintah itu menunjukkan semua port yang digunakan , dan daftar tidak menunjukkan proses mana yang diikat ke port tertentu .

Setiap komentar akan dihargai.

freddy
sumber
Saya pikir pertanyaan ini lebih cocok untuk Unix & Linux

Jawaban:

15

Anda harus dapat menemukan semua port terbuka di /proc/net/tcpdan /proc/net/udp. Masing-masing file memiliki inodekolom, yang dapat digunakan untuk menemukan proses memiliki soket itu.

Setelah Anda memiliki nomor inode, Anda dapat menjalankan perintah ls seperti ls -l /proc/*/fd/* | grep socket:.$INODEuntuk menemukan proses menggunakan soket itu. Jika suatu proses telah diatur dengan deskriptor file yang berbeda untuk utas berbeda, Anda mungkin perlu memperluas perintah ls -l /proc/*/task/*/fd/* | grep socket:.$INODEuntuk menemukan semuanya.

kasperd
sumber
1
find /proc -lname "socket:\[$INODE\]" 2> /dev/null
Sammitch
0

Untuk menemukan INODES untuk setiap port, jalankan perintah di bawah ini

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

Gunakan INODE apa pun dari output perintah di atas untuk menemukan PID terkait seperti di bawah ini

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

di sini $ INODE adalah nilai dari setiap INODE

Dalam satu perintah baris, kita dapat memeriksa, apakah ada port terbuka dan terkait dengan PID seperti di bawah ini

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}'
Anil Agrawal
sumber