Як я можу спілкуватися з сокетом домену Unix через оболонку на Debian Squeeze?


99

Я запускаю веб-сервер Debian Squeeze. Я встановив memcached на ньому і налаштував memcached для прослуховування в сокеті домену Unix (at /tmp/memcached.sock), оскільки йому потрібно лише отримувати повідомлення з веб-сайту, який живе на тому ж сервері.

Здається, це працює нормально, але я також хотів би спілкуватися з зашифрованими через оболонку, щоб перевірити, чи він робить те, що я думаю, що робить.

memcached приймає повідомлення через простий протокол ASCII (якщо я правильно розумію). Якщо він слухав на TCP / IP, я міг би надсилати повідомлення через нього, наприклад nc:

$ echo "stats settings" | nc localhost 11211

Але я не можу зрозуміти, як надіслати цей текст замість сокета.

На моєму ноутбуці (який працює OS X Lion), так ncі telnetє варіанти ( -Uі -uвідповідно) , щоб використовувати сокети. Однак на моєму веб-сервері Debian Squeeze цих параметрів немає.

Відповіді:


72

З netcat-openbsd, є -Uваріант. Якщо у вас його немає, ви, ймовірно, netcat-traditionalвстановили натомість; Я б запропонував перейти.

Приклад команди: nc -U /var/run/socket


так netcat створить новий файл у /var/run/socket? Чи є спосіб повторно використовувати наявний файл?
Олександр Міллз

1
@AlexanderMills Якщо ви скажете слухати ( -l), він створить файл. В іншому випадку він очікує, що сокет вже існує (і вже щось слухатимуть). Отже команда example у відповіді не створює файл.
дероберт

94

За допомогою socat("двонаправлене реле даних між двома каналами передачі даних") ви можете підключитися до розетки домену unix таким чином:

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

19

netcat-openbsdпідтримує підключення до розеток домену UNIX. Використовуючи це, ви можете підключитися до сокету потоку домену UNIX-домену або до гнізда дейтаграми UNIX-домену , і тому вам потрібно повідомити тип сокета для netcat.

наприклад, /dev/logфайл в Linux - це розетка розетки датника 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


Так само під час використання socatвикористовуйте опцію UNIX-CLIENT. З допомогою цієї опції можна підключити як до потоку UNIX-домен і UNIX-домен датаграмм сокетов. Зі сторінки чоловіка (man socat) " Спочатку він намагається підключитися, і, якщо це не вдасться, передбачає, що це сокет дейтаграми, підтримуючи таким чином обидва типи ".

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

1
Це напрочуд гнучкий, добре параметризований інструмент.
користувач259412

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.