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.