Comment puis-je communiquer avec un socket de domaine Unix via le shell sous Debian Squeeze?


99

J'utilise un serveur Web Debian Squeeze. J'ai installé memcached sur celui-ci et je l'ai configuré pour écouter sur un socket de domaine Unix (at /tmp/memcached.sock), car il n'a besoin que de recevoir des messages du site Web, qui réside sur le même serveur.

Cela semble bien fonctionner, mais j'aimerais également communiquer avec memcached via le shell pour vérifier que tout se passe comme prévu.

memcached accepte les messages via un simple protocole ASCII (si je comprends bien). S'il écoutait sur TCP / IP, je pourrais lui envoyer des messages via, par exemple nc:

$ echo "stats settings" | nc localhost 11211

Mais je ne peux pas comprendre comment envoyer ce texte à la place.

Sur mon ordinateur portable (qui exécute OS X Lion), les deux ncet telnetont des options ( -Uet -urespectivement) pour utiliser les sockets de domaine. Cependant, sur mon serveur Web Debian Squeeze, ces options ne sont pas présentes.

Réponses:


72

Avec netcat-openbsd, il y a une -Uoption. Si vous ne l'avez pas, vous avez probablement netcat-traditionalinstallé à la place; Je suggère de changer.

Exemple de commande: nc -U /var/run/socket


alors netcat va créer un nouveau fichier sur /var/run/socket? Existe-t-il un moyen de réutiliser un fichier existant?
Alexander Mills le

1
@AlexanderMills Si vous lui dites d'écouter ( -l), le fichier sera créé. Sinon, il attend que le socket existe déjà (et qu'il y ait déjà quelque chose à l'écoute). Ainsi, l'exemple de commande dans la réponse ne crée pas le fichier.
derobert

94

Avec socat(un "relais de données bidirectionnel entre deux canaux de données"), vous pouvez vous connecter au socket de domaine Unix comme ceci:

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

20

netcat-openbsdprend en charge la connexion aux sockets du domaine UNIX. En utilisant cela, vous pouvez vous connecter à un socket de flux de domaine UNIX ou à un socket de datagramme de domaine UNIX. Par conséquent, vous devez indiquer le type de socket à netcat.

Par exemple, un /dev/logfichier sous Linux est un socket socket de datagramme de domaine UNIX et nc -U /dev/log ne fonctionnera donc pas . Utilisez plutôt nc -uU /dev/log. L'utilisation de -u avec -U indique à netcat qu'il s'agit d'un socket de datagramme de domaine UNIX.

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


De même, lors de l'utilisation socat, utilisez l'option UNIX-CLIENT. En utilisant cette option, vous pouvez vous connecter à un flux de domaine UNIX et à des sockets de datagramme de domaine UNIX . Dans sa page de manuel (man socat) , " Il essaie d'abord de se connecter et, en cas d'échec, suppose qu'il s'agit d'un socket de datagramme, prenant ainsi en charge les deux types ".

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

1
C'est un outil étonnamment flexible, bien paramétrable.
user259412

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.