Nc、echo、xargsなどのツールを使用して、それぞれが永続的な接続を持つ複数のクライアントからの要求を同時に処理できるエコーサーバーbashスクリプトを記述する方法
これまでに出てきた中で最高のものは
nc -l -p 2000 -c 'xargs -n1 echo'
ただし、単一の接続のみが許可されます。
Ncの代わりにncatを使用すると、コマンドラインは複数の接続で正常に機能しますが、(指摘したように)-pなしでも機能します。
ncat -l 2000 -k -c 'xargs -n1 echo'
ncatは http://nmap.org/ncat/ で入手できます。
追伸オリジナルのHobbitのnetcat(nc)では、-cフラグはサポートされていません。
更新:複数の接続を処理するには、-k(--keep-open)が必要になりました。
下記は用例です。 ncat simple services
TCPエコーサーバー
ncat -l 2000 --keep-open --exec "/bin/cat"
UDPエコーサーバー
ncat -l 2000 --keep-open --udp --exec "/bin/cat"
Ncatがオプションではない場合、socatも動作します:
socat TCP4-LISTEN:2000,fork EXEC:cat
fork
が必要なので、複数の接続を受け入れることができます。 reuseaddr
をTCP4-LISTEN
に追加すると便利な場合があります。
netcat
Ubunutuにプリインストールされたソリューション
Ubuntu 16.04にプリインストールされているnetcat
はnetcat-openbsd
に由来し、-c
オプションはありませんが、マニュアルには解決策があります。
Sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
次に、クライアントの例:
echo abc | netcat localhost 8000
TODO:入力文字列値を変更する方法は?以下は応答を返しません。
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
ただし、リモートシェルの例は機能します。
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
ただし、同時要求を単に処理する方法がわかりません。
どう...
#! /bin/sh
while :; do
/bin/nc.traditional -k -l -p 3342 -c 'xargs -n1 echo'
done