Bagaimana saya bisa berkomunikasi dengan soket domain Unix melalui shell di Debian Squeeze?

99

Saya menjalankan server web Debian Squeeze. Saya telah menginstal memcached di dalamnya, dan mengkonfigurasi memcached untuk mendengarkan pada soket domain Unix (at /tmp/memcached.sock), karena hanya perlu menerima pesan dari situs web, yang hidup di server yang sama.

Tampaknya berfungsi dengan baik, tetapi saya juga ingin berkomunikasi dengan memcached melalui shell, untuk memeriksa apakah itu melakukan apa yang saya pikir sedang dilakukan.

memcached menerima pesan melalui protokol ASCII sederhana (jika saya mengerti dengan benar). Jika sedang mendengarkan pada TCP / IP, saya bisa mengirim pesan kepadanya melalui mis nc:

$ echo "stats settings" | nc localhost 11211

Tetapi saya tidak tahu bagaimana cara mengirim teks itu ke soket domain.

Di laptop saya (yang menjalankan OS X Lion), keduanya ncdan telnetmemiliki opsi ( -Udan -umasing - masing) untuk menggunakan soket domain. Namun, pada server web Debian Squeeze saya, opsi ini tidak ada.

Paul D. Waite
sumber

Jawaban:

72

Dengan netcat-openbsd, ada -Uopsi. Jika Anda tidak memilikinya, Anda mungkin telah netcat-traditionalmenginstalnya; Saya sarankan beralih.

Contoh perintah: nc -U /var/run/socket

derobert
sumber
jadi netcat akan membuat file baru di /var/run/socket? Apakah ada cara untuk menggunakan kembali file yang ada?
Alexander Mills
1
@AlexanderMills Jika Anda menyuruhnya mendengarkan ( -l), itu akan membuat file. Kalau tidak, ia mengharapkan soket sudah ada (dan sudah ada sesuatu yang mendengarkannya). Jadi, contoh perintah dalam jawaban tidak membuat file.
derobert
94

Dengan socat('relai data dua arah antara dua saluran data') Anda dapat terhubung ke soket domain unix seperti ini:

$ socat - UNIX-CONNECT:/tmp/memcached.sock
maxschlepzig
sumber
19

netcat-openbsdmendukung koneksi ke soket domain UNIX. Dengan ini, Anda dapat terhubung ke soket aliran domain-UNIX atau soket datagram domain-UNIX , dan karena itu Anda harus memberi tahu jenis soket itu ke netcat.

misalnya, /dev/logfile di Linux adalah soket soket datagram domain-UNIX , sehingga nc -U /dev/log tidak akan berfungsi . Sebaliknya gunakan nc -uU /dev/log. Menggunakan -u bersama -U memberitahu netcat bahwa itu adalah soket datagram domain-UNIX.

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


Demikian pula, saat menggunakan socat, gunakan opsi UNIX-CLIENT. Menggunakan opsi ini Anda dapat terhubung ke kedua aliran UNIX-domain dan UNIX-domain datagram socket. Dari halaman manualnya (man socat) , " Pertama kali mencoba untuk terhubung dan, jika gagal, menganggap itu adalah soket datagram, sehingga mendukung kedua jenis ".

socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type
Sahil Singh
sumber
1
Ini adalah alat yang sangat fleksibel dan baik parametrizable.
user259412
15

Anda dapat menggunakan socat di Debian. Untuk menginstalnya:

# apt-get install socat
sendmoreinfo
sumber
Itu terlihat cukup bagus. Sepertinya saya belum socatmenginstal di server saya, tetapi sudah pasti tersedia: packages.debian.org/squeeze/socat
Paul D. Waite