UNIX alan soketini kokla


9

Bazı işlemlerin belirli bir unix etki alanı soketine ( /var/run/asterisk/asterisk.ctl) yazdığını biliyorum , ancak gönderenin pidini bilmiyorum. Sokete kimin yazdığını nasıl öğrenebilirim? Ben denedim:

sudo lsof /var/run/asterisk/asterisk.ctl

ancak soketin sahibini listeler. Bu sokete kimin yazdığını / okuduğunu bilmek istiyorum ve ayrıca verileri koklamak istiyorum. Mümkün mü?

Yanıtlar:


4

Kısa cevaplar hayırdır ve kolay değildir.

Linux'ta lsof /proc/net/unix, UNIX etki alanı yuvalarıyla ilgili bilgileri almaya dayanır . Bu arayüz listeleri bağlı prizler her ama yok değil uç noktaları takip edin. Yani yapabilirsiniz prizler mevcut olduğunu görmek, ancak bunlara bağlı ne göremez. Bu bilgilerin izlendiği bir yerde , izlenmesi gerekir, aksi takdirde soket bağlantıları çalışmaz. Bağlantı bilgilerini almak için henüz bir mekanizma bulamadım.

Koklama sorusu biraz daha ilginç, ama daha az hayal kırıklığı yok. Demek istediğim "kolay değil" demek, gizlice içeri girmek ve bu verileri yakalamak için herhangi bir kanca yok olmasıdır. En yakın analog tcpdump veya Wireshark kullanıyor, her ikisi de ağır kaldırma yapmak için libpcap kullanıyor. Ağ (AF_INET) ve UNIX alanı (AF_UNIX) ikisini de kullanarak oluşturulur iken socket()işlev çağrısı, hem kullanım connect(), kullanım hem bağlanmak read()ve write()işlem verilerine, farklı çekirdek alt sistemleri tarafından işlenir. Bunun, libpcap'in UNIX etki alanı yuvalarıyla çalışmak üzere tasarlanmadığı talihsiz yan etkisi vardır.

Sorunun biraz daha az loş tarafı var. İçin man sayfasına bir göz atın recv(2). Bu, daha düşük seviyeli bir sistem çağrısıdır read(). recv()Aranan bir bayrak var MSG_PEEK. Bu, bir UNIX etki alanı soketinden geçen trafiği koklamanızı sağlar. Yani bu parlak taraf, karanlık taraf, bildiklerime göre, bunu yapmak için tasarlanmış herhangi bir mevcut uygulama yok. Yani bazı geliştirme çabalarına bakıyorsunuz.

Gerçekten orada dilek oldu F'YEAH güzel basit bir cevabı Sorunuzun iki parçasına da.



4

Bunun ana soruyu cevaplamadığını biliyorum, ama burada bir soket üzerinde sadece koklama iletişimi aramaya başladım. Benim gibi başkaları için posta göndermeye karar verdim. İşte böyle yaptım:

$> sudo socat -t100 -x -v UNIX-LISTEN: /var/run/php5-fpm.sock.socat,mode=777,reuseaddr,fork UNIX-CONNECT: /var/run/php5-fpm.sock

-X'i kaldırabilir ve ascii iletişimi için -v'yi bırakabilirsiniz. Umarım birine yardım eder.


mükemmel çalışıyor
JSmyth

-1

socat -t100 UNIX-LISTEN: /tmp/file.sock,mode=777,reuseaddr,fork STDOUT

Çıktının tekrarı yoktur, döngüsel çıktı yoktur. Önceki yorum hatası ".sock.socat"


2
Bu yararlı bir komut olsa da, lütfen biraz açıklama / açıklama ekleyin (ve bu cevaptan farkı nedir?)
HBruijn

Üzgünüm. Çıktının tekrarı yoktur, döngüsel çıktı yoktur. Önceki yorum hatası ".sock.socat"
srvf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.