Ya, Anda bisa melakukan ini. Yang Anda butuhkan hanyalah ketukan sistem.
Pertimbangkan salah satu contoh skrip systemtap yang akan mencetak PID dan nama proses dari program apa pun yang membaca atau menulis inode tertentu (dan soket domain Unix Anda adalah hal semacam itu).
Anda dapat dengan mudah memodifikasi skrip ini untuk mencetak data aktual yang sedang dibaca/ditulis; Saya akan berhenti melakukannya sebagai latihan untuk pembaca.
Jawaban singkatnya adalah tidak dan tidak mudah.
Di Linux lsof bergantung pada /proc/net/unix
untuk mengambil informasi tentang soket domain UNIX. Antarmuka ini mencantumkan semua soket terikat, tetapi tidak melacak titik akhir. Jadi Anda bisa lihat soket apa yang ada, tetapi Anda tidak dapat melihat apa yang terhubung dengannya. Di suatu tempat informasi ini adalah dilacak, itu harus dilacak atau koneksi soket tidak akan berfungsi. Saya belum menemukan mekanisme apa pun untuk mengambil informasi koneksi.
Pertanyaan mengendus sedikit lebih menarik, tetapi tidak kalah mengecewakan. Yang saya maksud dengan "tidak mudah" adalah bahwa tidak ada pengait untuk menyelinap masuk dan mengambil data itu. Analog terdekat menggunakan tcpdump atau Wireshark, keduanya menggunakan libpcap untuk benar-benar melakukan pekerjaan berat. Sementara jaringan (AF_INET) dan domain UNIX (AF_UNIX) keduanya dibuat menggunakan socket()
panggilan fungsi, keduanya menggunakan connect()
untuk terhubung, keduanya menggunakan read()
dan write()
untuk memproses data, mereka ditangani oleh subsistem kernel yang berbeda. Ini memiliki efek samping yang disayangkan bahwa libpcap tidak dirancang untuk bekerja dengan soket domain UNIX.
Ada sisi yang sedikit kurang redup dari masalah ini. Lihatlah halaman manual untuk recv(2)
. Ini adalah panggilan sistem tingkat rendah yaitu read()
memanfaatkan. Ada tanda untuk recv()
disebut MSG_PEEK
. Ini akan memungkinkan Anda untuk mengendus lalu lintas yang melewati soket domain UNIX. Jadi itulah sisi baiknya, sisi gelapnya adalah sepengetahuan saya tidak ada aplikasi saat ini yang dirancang untuk melakukan ini. Jadi, Anda sedang melihat beberapa upaya pengembangan.
Saya benar-benar berharap ada adalah jawaban sederhana yang bagus dari F'YEAH untuk kedua bagian pertanyaan Anda.
Saya tahu ini tidak menjawab pertanyaan utama, tetapi saya berakhir di sini, mencari hanya untuk mengendus komunikasi pada soket. Saya telah memutuskan untuk memposting untuk orang lain seperti saya. Begini cara saya melakukannya:
$> sudo socat -t100 -x -v UNIX-LISTEN:/var/run/php5-fpm.sock.socat,mode=777,reuseaddr,fork UNIX-CONNECT:/var/run/php5-fpm.sock
Anda dapat menghapus -x dan biarkan -v untuk komunikasi ascii. Semoga itu membantu seseorang.