Debian Squeeze의 쉘을 통해 Unix 도메인 소켓과 어떻게 통신 할 수 있습니까?


99

Debian Squeeze 웹 서버를 실행하고 있습니다. 나는 memcached를 설치 /tmp/memcached.sock하고 동일한 서버에있는 웹 사이트에서 메시지를 수신해야하기 때문에 유닉스 도메인 소켓 (at ) 을 수신하도록 memcached를 구성 했습니다.

잘 작동하는 것 같지만 쉘을 통해 memcached와 통신하여 내가하고있는 일을하고 있는지 확인하고 싶습니다.

memcached는 간단한 ASCII 프로토콜을 통해 메시지를 수락합니다 (정확하게 이해하면). TCP / IP에서 수신 대기 중이라면 다음과 같이 메시지를 보낼 수 있습니다 nc.

$ echo "stats settings" | nc localhost 11211

그러나 대신 텍스트를 도메인 소켓에 보내는 방법을 알 수 없습니다.

(OS X 사자를 실행) 내 노트북에서 모두 nc하고 telnet(가지 옵션이 있습니다 -U-u도메인 소켓을 사용하는 각각을). 그러나 Debian Squeeze 웹 서버에는 이러한 옵션이 없습니다.

답변:


72

함께 netcat-openbsd하는이 -U옵션을 선택합니다. 없는 경우 netcat-traditional대신 설치 했을 것입니다 . 전환을 제안합니다.

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


따라서 netcat은 /var/run/socket? 에서 새 파일을 생성합니다 . 기존 파일을 재사용 할 수있는 방법이 있습니까?
알렉산더 밀스

1
@AlexanderMills ( -l) 를 들으 려면 파일을 만듭니다. 그렇지 않으면 소켓이 이미 존재하고 이미 듣고있는 것으로 예상합니다. 따라서 대답의 예제 명령은 파일을 만들지 않습니다.
derobert

94

으로 socat(A '두 개의 데이터 채널 간의 양방향 데이터 릴레이')이 같은 유닉스 도메인 소켓에 연결할 수 있습니다 :

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

19

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 도메인 데이터 그램 소켓 에 모두 연결할 수 있습니다 . 맨 페이지 (man socat) 에서 " 먼저 연결을 시도하고 실패하면 데이터 그램 소켓 인 것으로 가정하여 두 유형을 모두 지원합니다 ".

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

1
놀랍도록 유연하고 매개 변수화가 가능한 도구입니다.
user259412

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.