Bagaimana cara memindahkan soket domain unix memungkinkan socat untuk memantau lalu lintas?

12

socat dapat digunakan untuk memantau lalu lintas di soket domain Unix:

sudo mv /path/to/sock /path/to/sock.original
sudo socat -t100 -x -v UNIX-LISTEN:/path/to/sock,mode=777,reuseaddr,fork UNIX-CONNECT:/path/to/sock.original

Saya tidak begitu mengerti bagaimana mekanisme ini bekerja, berharap seseorang bisa menjelaskannya sedikit. Secara khusus, bagaimana cara memindahkan file socket bekerja jika suatu proses sudah mendengarkannya? Juga, setelah pindah: tidak lsof /path/to/sockjuga /path/to/sock.originalmengembalikan hasil.

Matt R
sumber

Jawaban:

11

Perintah-perintah itu harus dijalankan ketika server yang ingin Anda pantau sedang mendengarkan /path/to/sock. Kemudian, jika Anda mengganti nama /path/to/sock, server tidak akan terpengaruh.

The socatperintah menyisipkan man-in-the-middle. Ia mendengarkan /path/to/socksdan meneruskan semua lalu lintas oleh klien untuk /path/to/socks.original(dan mencatatnya dalam proses dengan -v).

Itu hanya berfungsi untuk jenis aliran soket (gunakan UNIX-RECVFROM/ UNIX-RECVuntuk soket datagram ) dan hanya jika klien hanya untuk read/write/send/recvsoket itu, tidak sendmsg()dengan data tambahan dan hal-hal mewah lainnya.

lsofhanya akan melaporkan proses mendengarkan ( socatdan server untuk soket mendengarkan dan diterima). Umumnya tidak mungkin untuk menautkan soket yang tersambung pada klien ke jalur soket.

Jika Anda melakukannya sebelum memulai server, maka itu tidak akan bekerja sebagai server akan mencoba untuk mendengarkan pada /path/to/socksdan gagal sebagai socatsudah mendengarkan itu. Atau Anda harus memberi tahu server untuk mendengarkan /path/to/sock.original.

Stéphane Chazelas
sumber