Wie kann ich mit einem Unix-Domain-Socket über die Shell unter Debian Squeeze kommunizieren?


99

Ich betreibe einen Debian Squeeze-Webserver. Ich habe memcached darauf installiert und memcached so konfiguriert, dass es auf einem Unix-Domain-Socket (at /tmp/memcached.sock) lauscht , da es nur Nachrichten von der Website empfangen muss, die sich auf demselben Server befindet.

Es scheint gut zu funktionieren, aber ich möchte auch über die Shell mit memcached kommunizieren, um zu überprüfen, ob es das tut, was ich denke.

memcached akzeptiert Nachrichten über ein einfaches ASCII-Protokoll (wenn ich das richtig verstehe). Wenn es TCP / IP abhört, kann ich ihm Nachrichten senden über zB nc:

$ echo "stats settings" | nc localhost 11211

Aber ich kann nicht herausfinden, wie ich diesen Text stattdessen an den Domain-Socket senden soll.

Auf meinem Laptop (die OS X Lion läuft), die beide ncund telnethaben Optionen ( -Uund -ujeweils) Domain - Sockets zu verwenden. Auf meinem Debian Squeeze-Webserver sind diese Optionen jedoch nicht vorhanden.

Antworten:


72

Mit netcat-openbsdgibt es eine -UOption. Wenn Sie es nicht haben, haben Sie es wahrscheinlich netcat-traditionalstattdessen installiert. Ich würde vorschlagen, zu wechseln.

Beispielbefehl: nc -U /var/run/socket


wird netcat also eine neue datei erstellen um /var/run/socket? Gibt es eine Möglichkeit, eine vorhandene Datei wiederzuverwenden?
Alexander Mills

1
@AlexanderMills Wenn Sie ihm mitteilen, dass er zuhören soll ( -l), wird die Datei erstellt. Andernfalls wird davon ausgegangen, dass der Socket bereits vorhanden ist (und bereits etwas zum Abhören vorhanden ist). Der Beispielbefehl in der Antwort erstellt die Datei also nicht.
Derobert

94

Mit socat(einem 'bidirektionalen Daten-Relay zwischen zwei Datenkanälen') können Sie sich wie folgt mit dem Unix-Domain-Socket verbinden:

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

19

netcat-openbsdunterstützt das Verbinden mit UNIX-Domain-Sockets. Mit dieser Option können Sie eine Verbindung zu einem UNIX-Domain-Stream-Socket oder einem UNIX-Domain-Datagramm-Socket herstellen . Daher müssen Sie den Socket-Typ Netcat mitteilen.

zum Beispiel /dev/logDatei in Linux ist eine Datagramm - Socket UNIX-Domain - Buchse, so nc -U /dev/log wird nicht funktionieren . Verwenden Sie stattdessen nc -uU /dev/log. Wenn Sie -u zusammen mit -U verwenden, wird netcat mitgeteilt, dass es sich um einen UNIX-Domain-Datagramm-Socket handelt.

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


Verwenden Sie während der Verwendung socatdie Option UNIX-CLIENT. Mit dieser Option können Sie eine Verbindung zu UNIX-Domain-Stream- und UNIX-Domain-Datagram- Sockets herstellen. Auf der Manpage (man socat) wird " zuerst versucht, eine Verbindung herzustellen , und wenn dies fehlschlägt, wird davon ausgegangen , dass es sich um einen Datagramm-Socket handelt, der beide Typen unterstützt ".

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

1
Es ist überraschend flexibel und gut parametrierbar.
user259412

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.