Jawaban singkatnya adalah tidak dan tidak mudah.
Di Linux, ia bergantung /proc/net/unix
untuk mengambil informasi mengenai soket domain UNIX. Antarmuka ini mencantumkan semua soket terikat, tetapi tidak melacak titik akhir. Jadi Anda bisa melihat soket apa yang ada, tetapi Anda tidak bisa melihat apa yang terhubung dengannya. Di suatu tempat informasi ini dilacak, itu harus dilacak atau koneksi soket tidak berfungsi. Saya belum menemukan mekanisme untuk mengambil informasi koneksi.
Pertanyaan mengendus sedikit lebih menarik, tapi tidak kalah mengecewakan. Yang saya maksud dengan "tidak mudah" adalah tidak ada kait untuk menyelinap masuk dan mengambil data itu. Analog terdekat menggunakan tcpdump atau Wireshark, keduanya menggunakan libpcap untuk benar-benar melakukan pengangkatan berat. Sementara jaringan (AF_INET) dan domain UNIX (AF_UNIX) keduanya dibuat menggunakan socket()
panggilan fungsi, keduanya digunakan connect()
untuk menyambung ke, keduanya menggunakan read()
dan write()
untuk memproses data, mereka ditangani oleh berbagai subsistem kernel. Ini memiliki efek samping yang disayangkan bahwa libpcap tidak dirancang untuk bekerja dengan soket domain UNIX.
Ada sisi yang sedikit kurang redup untuk masalah tersebut. Lihatlah halaman manual untuk recv(2)
. Ini adalah panggilan sistem tingkat bawah yang read()
memanfaatkan. Ada bendera untuk recv()
dipanggil MSG_PEEK
. Ini akan memungkinkan Anda untuk mengendus lalu lintas yang melewati soket domain UNIX. Jadi itulah sisi baiknya, sisi gelapnya adalah setahu 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 bagus F'YEAH untuk kedua bagian dari pertanyaan Anda.
socat -t100 UNIX-LISTEN: /tmp/file.sock,mode=777,reuseaddr,fork STDOUT
Tidak ada duplikasi output, tidak ada output siklik. Kesalahan komentar sebelumnya ".sock.socat"
sumber