Debian Squeezeのシェルを介してUnixドメインソケットと通信するにはどうすればよいですか?


99

Debian Squeeze Webサーバーを実行しています。memcachedをインストール/tmp/memcached.sockし、同じサーバー上にあるWebサイトからメッセージを受信するだけでよいため、memcachedがUnixドメインソケット(で)をリッスンするように構成しました。

それはうまく機能しているようですが、シェルを介してmemcachedと通信し、私が思っていることを実行していることを確認したいと思います。

memcachedは、単純なASCIIプロトコルを介してメッセージを受け入れます(正しく理解している場合)。TCP / IPでリッスンしている場合、たとえばnc次のようにメッセージを送信できます。

$ echo "stats settings" | nc localhost 11211

しかし、代わりにそのテキストをドメインソケットに送信する方法がわかりません。

私のラップトップ(OS X Lionを実行)では、両方ncとドメインソケットを使用するtelnetオプション(-Uおよび-uそれぞれ)があります。ただし、私のDebian Squeeze Webサーバーには、これらのオプションはありません。

回答:


72

netcat-openbsd、そこにある-Uオプション。お持ちでない場合は、netcat-traditional代わりにインストールされている可能性があります。切り替えることをお勧めします。

コマンド例: nc -U /var/run/socket


そのため、netcatは/var/run/socket?に新しいファイルを作成します。既存のファイルを再利用する方法はありますか?
アレクサンダーミルズ

1
@AlexanderMillsリッスンするように指示すると(-l)、ファイルが作成されます。それ以外の場合、ソケットはすでに存在している(そして既に何かをリッスンしている)ことを想定しています。そのため、回答のコマンド例ではファイルは作成されません。
デロバート

94

socat(「二つのデータチャンネル間の双方向のデータ中継」)あなたはこのようなUNIXドメインソケットに接続することができます。

$ 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


同様に、を使用するsocatときは、UNIX-CLIENTオプションを使用します。このオプションを使用すると、UNIXドメインストリームUNIXドメインデータグラムソケットの両方に接続できます。そのmanページ(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.