Pau*_*ite 127 shell debian telnet socket
我正在运行 Debian Squeeze Web 服务器。我已经在其上安装了 memcached,并将 memcached 配置为侦听 Unix 域套接字(at /tmp/memcached.sock),因为它只需要从位于同一服务器上的网站接收消息。
它似乎工作正常,但我也想通过 shell 与 memcached 通信,以检查它是否在做我认为它在做的事情。
memcached 通过简单的 ASCII 协议接受消息(如果我理解正确的话)。如果它正在侦听 TCP/IP,我可以通过以下方式向它发送消息nc:
$ echo "stats settings" | nc localhost 11211
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将该文本发送到域套接字。
在我的笔记本电脑(运行OS X Lion中),都nc和telnet有选择(-U并-u分别)使用域套接字。但是,在我的 Debian Squeeze Web 服务器上,这些选项不存在。
max*_*zig 113
使用socat(“两个数据通道之间的双向数据中继”),您可以像这样连接到 unix 域套接字:
$ socat - UNIX-CONNECT:/tmp/memcached.sock
Run Code Online (Sandbox Code Playgroud)
der*_*ert 94
有了netcat-openbsd,就有了-U选择。如果你没有它,你可能已经netcat-traditional安装了;我建议换。
示例命令:
nc -U /var/run/socket
Sah*_*ngh 26
netcat-openbsd支持连接到 UNIX 域套接字。使用它,您可以连接到UNIX 域流套接字或UNIX 域数据报套接字,因此您必须将套接字的类型告诉 netcat。
例如,/dev/logLinux 中的文件是一个UNIX 域数据报套接字套接字,因此nc -U /dev/log 不起作用。而是使用nc -uU /dev/log. 使用 -u 和 -U 告诉 netcat 它是一个 UNIX 域数据报套接字。
nc -U /tmp/socket #Connect to UNIX-domain stream socket
nc -uU /tmp/socket #Connect to UNIX-domain datagram socket
Run Code Online (Sandbox Code Playgroud)
同样,在使用 时socat,请使用 UNIX-CLIENT 选项。使用此选项,您可以连接到UNIX 域流和UNIX 域数据报套接字。从其手册页(man socat) 中,“它首先尝试连接,如果失败,则假定它是数据报套接字,从而支持这两种类型”。
socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type
Run Code Online (Sandbox Code Playgroud)
sen*_*nfo 17
您可以在 Debian 上使用socat。要安装它:
# apt-get install socat
Run Code Online (Sandbox Code Playgroud)
小智 9
如果你碰巧在一个只安装了 busybox 的系统上,它可能看起来不支持 unix 域套接字(该-U选项不存在)但我发现以下工作:
$ echo "stats slabs" | nc local:/tmp/memcached.sock
STAT active_slabs 0
STAT total_malloced 0
END
Run Code Online (Sandbox Code Playgroud)
这对于为 alpine 容器创建健康检查非常有帮助。
发送请求“GET”到套接字“/tmp/server.sock”并打印结果:
printf GET | socat UNIX-CONNECT:/tmp/server.sock -
Run Code Online (Sandbox Code Playgroud)