Come posso comunicare con un socket di dominio Unix tramite la shell su Debian Squeeze?


99

Sto eseguendo un web server Debian Squeeze. Ho installato memcached su di esso e configurato memcached per l'ascolto su un socket di dominio Unix (at /tmp/memcached.sock), poiché deve solo ricevere messaggi dal sito Web, che vive sullo stesso server.

Sembra funzionare bene, ma mi piacerebbe anche comunicare con memcached tramite la shell, per verificare che stia facendo quello che penso stia facendo.

memcached accetta messaggi tramite un semplice protocollo ASCII (se ho capito bene). Se fosse in ascolto su TCP / IP, potrei inviargli messaggi tramite ad esempio nc:

$ echo "stats settings" | nc localhost 11211

Ma non riesco a capire come inviare quel testo al socket del dominio.

Sul mio laptop (che esegue OS X Lion), entrambi nce telnethanno opzioni ( -Ue -urispettivamente) per usare i socket di dominio. Tuttavia, sul mio server web Debian Squeeze, queste opzioni non sono presenti.

Risposte:


72

Con netcat-openbsd, c'è -Uun'opzione. Se non lo hai, probabilmente hai netcat-traditionalinstallato invece; Suggerirei di cambiare.

Esempio di comando: nc -U /var/run/socket


quindi netcat creerà un nuovo file su /var/run/socket? C'è un modo per riutilizzare un file esistente?
Alexander Mills,

1
@AlexanderMills Se gli dici di ascoltare ( -l), creerà il file. Altrimenti, si aspetta che il socket esista già (e abbia già qualcosa in ascolto). Quindi il comando di esempio nella risposta non crea il file.
derobert il

94

Con socat(un 'inoltro di dati bidirezionale tra due canali di dati') è possibile connettersi al socket del dominio unix in questo modo:

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

20

netcat-openbsdsupporta la connessione a socket di dominio UNIX. Usando questo è possibile connettersi a un socket di flusso di dominio UNIX o a un socket di datagramma di dominio UNIX e quindi è necessario comunicare il tipo di socket a netcat.

ad esempio, il /dev/logfile in Linux è un socket socket datagramma di dominio UNIX , quindi nc -U /dev/log non funzionerà . Invece usa nc -uU /dev/log. L'uso di -u insieme a -U indica a netcat che si tratta di un socket di datagramma di dominio UNIX.

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


Allo stesso modo, durante l'utilizzo socat, utilizzare l'opzione UNIX-CLIENT. Utilizzando questa opzione è possibile connettersi a entrambi flusso UNIX-dominio e datagramma UNIX-domain socket. Dalla sua pagina man (man socat) , " Prima cerca di connettersi e, se fallisce, assume che sia un socket di datagramma, supportando quindi entrambi i tipi ".

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

1
È uno strumento sorprendentemente flessibile, ben parametrizzabile.
user259412,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.