Jak mogę komunikować się z gniazdem domeny Unix za pośrednictwem powłoki Debian Squeeze?

99

Korzystam z serwera WWW Debian Squeeze. Zainstalowałem na nim memcached i skonfigurowałem memcached do nasłuchiwania na gnieździe domeny uniksowej (at /tmp/memcached.sock), ponieważ potrzebuje on tylko odbierać wiadomości ze strony internetowej, która mieszka na tym samym serwerze.

Wygląda na to, że działa dobrze, ale chciałbym również komunikować się z memcached przez powłokę, aby sprawdzić, czy robi to, co myślę, że działa.

memcached przyjmuje wiadomości za pomocą prostego protokołu ASCII (jeśli dobrze rozumiem). Gdyby nasłuchiwał w TCP / IP, mógłbym wysyłać do niego wiadomości za pośrednictwem np . nc:

$ echo "stats settings" | nc localhost 11211

Ale nie mogę wymyślić, jak wysłać ten tekst do gniazda domeny.

Na moim laptopie (czyli OS X Lion), zarówno nci telnetposiada opcje ( -Ui -uodpowiednio) używania gniazd domeny. Jednak na moim serwerze internetowym Debian Squeeze te opcje nie są obecne.

Paul D. Waite
źródło

Odpowiedzi:

72

Z netcat-openbsd, istnieje -Uopcja. Jeśli go nie masz, prawdopodobnie netcat-traditionalzamiast tego zainstalowałeś; Sugerowałbym zmianę.

Przykładowe polecenie: nc -U /var/run/socket

derobert
źródło
więc netcat utworzy nowy plik w /var/run/socket? Czy istnieje sposób na ponowne wykorzystanie istniejącego pliku?
Alexander Mills
1
@AlexanderMills Jeśli powiesz mu słuchać ( -l), utworzy plik. W przeciwnym razie oczekuje, że gniazdo już istnieje (i już coś na nim nasłuchuje). Tak więc przykładowe polecenie w odpowiedzi nie tworzy pliku.
derobert
94

Za pomocą socat(„dwukierunkowego przekaźnika danych między dwoma kanałami danych”) możesz połączyć się z gniazdem domeny unix w następujący sposób:

$ socat - UNIX-CONNECT:/tmp/memcached.sock
maxschlepzig
źródło
19

netcat-openbsdobsługuje łączenie z gniazdami domeny UNIX. Korzystając z tego, możesz połączyć się z gniazdem strumienia domeny UNIX lub gniazdem datagramów domeny UNIX i dlatego musisz powiedzieć typowi gniazda netcat.

na przykład /dev/logplik w systemie Linux jest gniazdem datagramowym w domenie UNIX , dlatego nc -U /dev/log nie będzie działać . Zamiast tego użyj nc -uU /dev/log. Użycie -u wraz z -U informuje netcat, że jest to gniazdo datagramowe w domenie UNIX.

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


Podobnie, podczas korzystania socat, użyj opcji UNIX-CLIENT. Korzystając z tej opcji, możesz połączyć się ze strumieniem domen UNIX i gniazdami datagramów domeny UNIX . Ze strony man (man socat) : „ Najpierw próbuje się połączyć, a jeśli to się nie powiedzie, zakłada, że ​​jest to gniazdo datagramu, obsługując oba typy ”.

socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type
Sahil Singh
źródło
1
Jest to zaskakująco elastyczne, dobrze parametryzowane narzędzie.
user259412,
15

Możesz używać socat na Debianie. Aby zainstalować:

# apt-get install socat
sendmoreinfo
źródło
To wygląda całkiem nieźle. Wygląda na to, że nie socatzainstalowałem na moim serwerze, ale z pewnością jest dostępny: packages.debian.org/squeeze/socat
Paul D. Waite,