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.

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


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

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

1
Jest to zaskakująco elastyczne, dobrze parametryzowane narzędzie.
user259412,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.