シェルコマンドを使用して(サーバーとクライアント間)ソケットセッションを確立できますか?

シェルコマンドを使用して(サーバーとクライアント間)ソケットセッションを確立できますか?

私が読んだことによれば、(開いているだけでCはわかりません)、特定の順序で関数を呼び出して、サーバーとクライアントの間にソケットセッションを確立します。

It starts with the Server:
socket()     #creates communication point
bind()       #gives this communication point an address
listen()     #tells it to be ready for some signal

then the Client:
socket()
connect()    #establishes a line between himself and the listening Server

now both can talk with each other by using read() and write().

まあ、これはCプログラミング言語で実装されていますが、Shellでも実装できますか?それでは、こうするのが合理的でしょうか?

答え1

コマンドラインから(またはシェルスクリプトを介して)ソケット接続を確立するために使用できるいくつかのプログラムがあります。最も一般的なのはおそらくnetcatであり、そのうち少なくとも3つの実装があります。

  • オリジナル©1995-1996 Avian Research(ホビットのウェブキャット)。私が知っている限り、良いアップストリームリンクはないので、ここではDebianパッケージトラッカーにあります:https://tracker.debian.org/pkg/netcat

  • Netcat6、書き換え。今捨てられたと宣言されました。http://www.deepspace6.net/projects/netcat6.html

  • netcat-openbsd、OpenBSDプロジェクトによって書き直されました。たぶんそれはあなたが望むものかもしれません。コードは以下にあります。http://bxr.su/openbsd/usr.bin/nc/

  • socatは書き換えではありませんが、多くの追加機能を備えた同じアイデアです。もう一つの良いオプションすべての機能が必要で、追加の複雑さに気にしない場合。http://www.dest-unreach.org/socat/

bcマニュアルページには多くの例があります。たとえば、以下はソケットで実行する方法です(マンページのより怖い例に基づいています)。

mkfifo /tmp/f && cat /tmp/f | bc -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

bcその後、次のコマンドを使用してネットワークに接続できます。

nc localhost 1234

または を使用すると、socat次のようになります。

socat EXEC:'bc -i' TCP4-LISTEN:1234,bind=127.0.0.1   # server
socat - TCP4:127.0.0.1:1234                          # client

関連情報