Debian Squeeze에서 쉘을 통해 Unix 도메인 소켓과 통신하는 방법은 무엇입니까?

Debian Squeeze에서 쉘을 통해 Unix 도메인 소켓과 통신하는 방법은 무엇입니까?

저는 Debian Squeeze 웹 서버를 운영하고 있습니다. Memcached를 설치하고 Unix 도메인 소켓(에 위치 /tmp/memcached.sock)을 수신하도록 memcached를 구성했습니다. 왜냐하면 동일한 서버에 있는 웹사이트에서만 메시지를 수신하면 되기 때문입니다.

제대로 작동하는 것 같지만 쉘을 통해 memcached와 통신하여 내가 생각하는 대로 작동하는지 확인하고 싶습니다.

memcached는 간단한 ASCII 프로토콜을 통해 메시지를 받아들입니다(제가 올바르게 이해한 경우). TCP/IP를 수신하는 경우 다음을 통해 메시지를 보낼 수 있습니다 nc.

$ echo "stats settings" | nc localhost 11211

하지만 해당 텍스트를 도메인 소켓으로 보내는 방법을 모르겠습니다.

내 노트북(OS X Lion 실행)에는 nc및 도메인 소켓을 사용할 수 있는 옵션이 telnet있습니다 -U. -u그러나 내 Debian Squeeze 웹 서버에는 이러한 옵션이 존재하지 않습니다.

답변1

그리고socat("두 데이터 채널 간 양방향 데이터 릴레이") 다음과 같이 Unix 도메인 소켓에 연결할 수 있습니다.

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

답변2

netcat-openbsd, 옵션이 있습니다 -U. 아직 설치되어 있지 않다면 아마도 이미 netcat-traditional설치되어 있을 것입니다. 전환하는 것이 좋습니다.

명령 예: nc -U /var/run/socket

답변3

netcat-openbsdUNIX 도메인 소켓 연결을 지원합니다. 그것을 사용하면 연결할 수 있습니다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


마찬가지로 를 사용할 때는 socatUNIX-CLIENT 옵션을 사용하십시오. 이 옵션을 사용하면 두 가지 모두에 연결할 수 있습니다UNIX 도메인 흐름그리고UNIX 도메인 데이터그램소켓. 매뉴얼 페이지에서(만 소카트),"먼저 연결을 시도하고 실패하면 데이터그램 소켓이라고 가정하므로 두 유형이 모두 지원됩니다.".

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

답변4

busybox만 설치된 시스템을 사용하는 경우 Unix 도메인 소켓을 지원하지 않는 것처럼 보일 수 있지만( -U옵션이 존재하지 않음) 다음이 작동하는 것으로 나타났습니다.

$ echo "stats slabs" | nc local:/tmp/memcached.sock
STAT active_slabs 0
STAT total_malloced 0
END

이는 알파인 컨테이너에 대한 상태 확인을 만드는 데 매우 유용합니다.

관련 정보