web-dev-qa-db-ja.com

BashでEchoサーバーを作成する方法は?

Nc、echo、xargsなどのツールを使用して、それぞれが永続的な接続を持つ複数のクライアントからの要求を同時に処理できるエコーサーバーbashスクリプトを記述する方法

これまでに出てきた中で最高のものは

nc -l -p 2000 -c 'xargs -n1 echo'

ただし、単一の接続のみが許可されます。

40
Roskoto

Ncの代わりにncatを使用すると、コマンドラインは複数の接続で正常に機能しますが、(指摘したように)-pなしでも機能します。

ncat -l 2000 -k -c 'xargs -n1 echo'

ncatは http://nmap.org/ncat/ で入手できます。

追伸オリジナルのHobbitのnetcat(nc)では、-cフラグはサポートされていません。

更新:複数の接続を処理するには、-k(--keep-open)が必要になりました。

43
David Costa

下記は用例です。 ncat simple services

TCPエコーサーバー

ncat -l 2000 --keep-open --exec "/bin/cat"

UDPエコーサーバー

ncat -l 2000 --keep-open --udp --exec "/bin/cat"
22
douyw

Ncatがオプションではない場合、socatも動作します:

socat TCP4-LISTEN:2000,fork EXEC:cat

forkが必要なので、複数の接続を受け入れることができます。 reuseaddrTCP4-LISTENに追加すると便利な場合があります。

9
Caesar

netcat Ubunutuにプリインストールされたソリューション

Ubuntu 16.04にプリインストールされているnetcatnetcat-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
0
Mohan Nbs