Debian Squeeze'deki bir Unix alan soketi ile nasıl kabuk iletişim kurabilirim?


99

Debian Squeeze web sunucusu kullanıyorum. Üzerine memcached yükledim ve /tmp/memcached.sockyalnızca aynı sunucuda yaşayan web sitesinden mesaj alması gerektiğinden, bir Unix alan soketinde (at ) dinlemek için memcached yapılandırdım .

İyi çalışıyor gibi gözüküyor, fakat aynı zamanda benim yaptığımı düşündüğümü yaptığını kontrol etmek için kabuklu memcached ile iletişim kurmak istiyorum.

memcached mesajları basit bir ASCII protokolü ile kabul eder (doğru anlıyorsam). TCP / IP'yi dinliyorsa, örneğin nc:

$ echo "stats settings" | nc localhost 11211

Ancak bu metni bunun yerine etki alanı soketine nasıl göndereceğimi bilemiyorum.

Dizüstü bilgisayarımda (OS X Lion çalıştıran), her ikisi de ncve etki alanı soketleri kullanma telnetseçeneklerine ( -Uve -usırasıyla) sahip. Ancak, Debian Squeeze web sunucumda bu seçenekler mevcut değil.

Yanıtlar:


72

İle netcat-openbsdbir -Useçenek var. Eğer sahip değilseniz, büyük olasılıkla netcat-traditionalbunun yerine kurdunuz; Geçiş öneririm.

Örnek komut: nc -U /var/run/socket


netcat adresinde yeni bir dosya oluşturacak /var/run/socketmı? Mevcut bir dosyayı tekrar kullanmanın bir yolu var mı?
Alexander Mills,

1
@AlexanderMills Dinlemesini söylerseniz ( -l), dosyayı oluşturur. Aksi halde soketin zaten var olmasını bekler (ve üzerinde dinleyen bir şey vardır). Yani cevaptaki example komutu dosyayı oluşturmuyor.
derobert

94

İle socat(a 'iki veri kanalları arasındaki iki yönlü veri rölesi') böyle Unix alan soketi bağlanabilir:

$ socat - UNIX-CONNECT:/tmp/memcached.sock

19

netcat-openbsdUNIX etki alanı soketlerine bağlanmayı destekler. Bunu kullanarak bir UNIX etki alanı akış soketine veya UNIX etki alanı verigram soketine bağlanabilirsiniz ve bu nedenle soketin türünü netcat'e bildirmeniz gerekir.

örneğin, /dev/logLinux'taki dosya bir UNIX etki alanı datagramı soket soketidir, bu nedenle nc -U /dev/log çalışmaz . Bunun yerine kullanın nc -uU /dev/log. -U ile -u kullanmak, netcat'e bir UNIX etki alanı datagramı soketi olduğunu söyler.

nc -U /tmp/socket  #Connect to UNIX-domain stream socket
nc -uU /tmp/socket #Connect to UNIX-domain datagram socket


Benzer şekilde, kullanırken socat, UNIX-CLIENT seçeneğini kullanın. Bu seçeneği kullanarak hem UNIX-domain stream hem de UNIX-domain datagram soketlerine bağlanabilirsiniz . Man sayfasından (man socat) , " İlk önce bağlanmaya çalışır ve bu başarısız olursa, bunun bir datagram soketi olduğunu varsayar, böylece her iki türü de destekler ".

socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type

1
Şaşırtıcı derecede esnek, iyi parametrelenebilir bir araçtır.
user259412 28:16

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.