Como posso me comunicar com um soquete de domínio Unix através do shell no Debian Squeeze?

99

Estou executando um servidor web Debian Squeeze. Instalei o memcached nele e configurei o memcached para escutar em um soquete de domínio Unix (at /tmp/memcached.sock), pois ele só precisa receber mensagens do site, que mora no mesmo servidor.

Parece estar funcionando bem, mas eu também gostaria de me comunicar com o memcached por meio do shell, para verificar se está fazendo o que acho que está fazendo.

O memcached aceita mensagens através de um protocolo ASCII simples (se bem entendi). Se estivesse ouvindo no TCP / IP, eu poderia enviar mensagens para ele via, por exemplo nc:

$ echo "stats settings" | nc localhost 11211

Mas não consigo descobrir como enviar esse texto para o soquete do domínio.

No meu laptop (que roda o OS X Lion), ambos nce telnettem opções ( -Ue -urespectivamente) para usar soquetes de domínio. No entanto, no meu servidor Debian Squeeze, essas opções não estão presentes.

Paul D. Waite
fonte

Respostas:

72

Com netcat-openbsd, há uma -Uopção. Se você não o possui, provavelmente já o netcat-traditionalinstalou; Eu sugiro mudar.

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

derobert
fonte
então o netcat criará um novo arquivo em /var/run/socket? Existe uma maneira de reutilizar um arquivo existente?
Alexander Mills
1
@AlexanderMills Se você pedir para listen ( -l), ele criará o arquivo. Caso contrário, espera que o soquete já exista (e já tenha algo escutando). Portanto, o comando de exemplo na resposta não cria o arquivo.
derobert 5/06
94

Com socat(um 'relé de dados bidirecional entre dois canais de dados'), você pode conectar-se ao soquete do domínio unix assim:

$ socat - UNIX-CONNECT:/tmp/memcached.sock
maxschlepzig
fonte
20

netcat-openbsdsuporta conexão com soquetes de domínio UNIX. Usando isso, você pode conectar-se a um soquete de fluxo do domínio UNIX ou a um soquete de datagrama do domínio UNIX e, portanto, é necessário informar o tipo do soquete ao netcat.

por exemplo, o /dev/logarquivo no Linux é um soquete de datagrama do domínio UNIX e , portanto nc -U /dev/log , não funciona . Em vez disso, use nc -uU /dev/log. Usar -u junto com -U informa ao netcat que é um soquete de datagrama no domínio UNIX.

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


Da mesma forma, enquanto estiver usando socat, use a opção UNIX-CLIENT. Usando esta opção, você pode conectar-se aos soquetes de fluxo de domínio e de datagrama do domínio UNIX . Na sua página de manual (man socat) , " Ele primeiro tenta se conectar e, se isso falhar, assume que é um soquete de datagrama, suportando, assim, os dois tipos ".

socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type
Sahil Singh
fonte
1
É uma ferramenta surpreendentemente flexível e bem parametrizável.
user259412
15

Você pode usar o socat no Debian. Para instalá-lo:

# apt-get install socat
sendmoreinfo
fonte
Isso parece muito bom. Eu não parecem ter socatinstalado no meu servidor, mas é certamente disponíveis: packages.debian.org/squeeze/socat
Paul D. Waite