¿Cómo puedo comunicarme con un socket de dominio Unix a través del shell en Debian Squeeze?


99

Estoy ejecutando un servidor web Debian Squeeze. Instalé memcached en él y configuré memcached para escuchar en un socket de dominio Unix (at /tmp/memcached.sock), ya que solo necesita recibir mensajes del sitio web, que vive en el mismo servidor.

Parece estar funcionando bien, pero también me gustaría comunicarme con memcached a través del shell, para verificar que está haciendo lo que creo que está haciendo.

memcached acepta mensajes a través de un protocolo ASCII simple (si lo entiendo correctamente). Si estaba escuchando en TCP / IP, podría enviarle mensajes a través de, por ejemplo nc:

$ echo "stats settings" | nc localhost 11211

Pero no puedo entender cómo enviar ese texto al socket de dominio en su lugar.

En mi portátil (que se ejecuta OS X Lion), tanto ncy telnettienen opciones ( -Uy -urespectivamente) para utilizar sockets de dominio. Sin embargo, en mi servidor web Debian Squeeze, estas opciones no están presentes.

Respuestas:


72

Con netcat-openbsd, hay una -Uopción. Si no lo tiene, probablemente lo haya netcat-traditionalinstalado; Sugeriría cambiar.

Comando de ejemplo: nc -U /var/run/socket


¿Entonces netcat creará un nuevo archivo en /var/run/socket? ¿Hay alguna manera de reutilizar un archivo existente?
— Alexander Mills

1
@AlexanderMills Si le dice que escuche ( -l), creará el archivo. De lo contrario, espera que el socket ya exista (y ya tenga algo escuchando). Entonces, el comando de ejemplo en la respuesta no crea el archivo.
— derobert

94

Con socat(un 'relé de datos bidireccional entre dos canales de datos') puede conectarse al socket de dominio Unix de esta manera:

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

19

netcat-openbsdadmite la conexión a sockets de dominio UNIX. Con esto, puede conectarse a un socket de flujo de dominio UNIX o a un socket de datagrama de dominio UNIX , y por lo tanto, debe indicar el tipo de socket a netcat.

por ejemplo, el /dev/logarchivo en Linux es un socket de socket de datagrama de dominio UNIX , por nc -U /dev/log lo tanto no funcionará . En lugar de usar nc -uU /dev/log. Usar -u junto con -U le dice a netcat que es un socket de datagrama de dominio UNIX.

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


Del mismo modo, durante el uso socat, use la opción UNIX-CLIENT. El uso de esta opción se puede conectar tanto a la corriente de dominio Unix y de datagramas de dominio UNIX sockets. Desde su página de manual (man socat) , " Primero intenta conectarse y, si eso falla, supone que es un socket de datagrama, por lo tanto, admite ambos tipos ".

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

1
Es una herramienta sorprendentemente flexible y bien parametrizable.
— user259412

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.