GNU/Linux >> Belajar Linux >  >> Linux

Opsi soket tampilan

Saya memiliki masalah yang sama hari ini; sayangnya, di sistem saya, -T pilihan lsof tidak menerima f bendera, dan saya juga tidak ingin membuat knetstat modul kernel.

Untungnya, saya berada di posisi yang bisa strace aplikasi saat menyiapkan soket, seperti ini:

strace -e trace=setsockopt -f -o /tmp/log ./program arg1 arg2

Ini melacak ./program arg1 arg2 , menulis jejak ke /tmp/log . Kami hanya melacak setsockopt() panggilan sistem, yang digunakan untuk mengatur opsi soket. Opsi -f membuat strace lacak juga setiap proses turunan yang dibuat oleh program yang dilacak.

Jika Anda beruntung, /tmp/log akan berisi baris seperti ini:

18806 setsockopt(60, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0

Ini menunjukkan bahwa proses 18806 disebut setsockopt() pada FD 60 untuk mengatur SO_KEEPALIVE ke 1 (mengaktifkannya), dan panggilan sistem berhasil dengan mengembalikan kode 0 .

Anda juga dapat melampirkan ke proses yang ada:

strace -e trace=setsockopt -f -o /tmp/log -p PID

Anda dapat melepaskan diri dari proses menggunakan CTRL-C , dan hilangkan -o opsi dan argumennya untuk mengirim pelacakan ke stderr .


Di Linux, Anda dapat menggunakan modul kernel knetstat untuk memeriksa opsi soket, termasuk SO_BROADCAST .


Anda dapat menggunakan lsof(8) . Jika PID adalah ID proses dan FD adalah nomor deskriptor file dari soket yang Anda minati, Anda dapat melakukan ini:

lsof -a -p PID -d FD -T f

Untuk mendaftar semua soket IPv4 dari suatu proses:

lsof -a -p PID -i 4 -T f

Ini akan mencetak opsi soket dengan SO= , antara lain informasi. Perhatikan bahwa jika tidak ada opsi yang disetel, Anda akan mendapatkan string kosong, jadi Anda akan melihat sesuatu seperti SO=PQLEN=0 dll. Untuk menguji SO_BROADCAST , cukup ambil string SO_BROADCAST setelah SO= , mis.

if lsof -a -p PID -d FD -T f | grep -q 'SO=[^=]*SO_BROADCAST'; then
    # socket has SO_BROADCAST
else
    # it doesn't
fi

Linux
  1. 6 opsi pemformatan tcpdump tingkat lanjut

  2. Tampilkan tipe database MySQL di bash

  3. Soket Tmux Api?

  1. Cara:Pemrograman Socket dengan Python

  2. Pengaruh SO_SNDBUF

  3. Cara menampilkan deskriptor file terbuka tetapi tidak menggunakan perintah lsof

  1. 6 opsi filter lalu lintas jaringan tcpdump

  2. Opsi ps yang berguna

  3. 7 Contoh Perintah lsof di Linux