n秒後にnetcatサーバーをシャットダウンする方法

n秒後にnetcatサーバーをシャットダウンする方法

nc奇妙な方法で使用する必要があります。サーバーは最初にファイルを送信してからファイルを受け取り、その後プロセスを繰り返すことを望みます。数秒後にサーバーの各インスタンスをシャットダウンしたいと思います。スクリプトでこれをどのように実行できますか?サーバーと対話できるクライアントが既に存在します。

答え1

一部のnetcat実装にはタイムアウトオプションがあります。 ~のため一つ私のシステムでは-w

$ nc -l -p 2000 -w 5

ポート2000でリッスンし、そのポートで接続が試みられない限り、5秒以内に終了します。

答え2

Bashタイムアウトの使用:

$ timeout 3s nc -l -p 2000

答え3

ドキュメントのおかげで:The -w flag has no effect on the -l option, i.e. nc will listen forever for a connection, with or without the -w flag

試しましたが、nc ncat socat誰もサーバーモードのタイムアウトを設定できませんでした。

私が知っている限り、オプションはサーバーモードでのみ従うことができますbusybox nc-w

CONFIG_NC_SERVER=yしたがって、オプションでコンパイルされたbusyboxをダウンロードするか、直接コンパイルする必要があります。

だからあなたはできます

$busybox nc -w 10 -l -p 9999

しかし、私のシステムのbusyboxはCONFIG_NC_SERVER=yオプションでコンパイルされていないので、コンパイルしたくありません。だから私はこのソリューションを使います。

portnum=9999
(sleep 10 ;echo "T" | nc -w 1 127.0.0.1 $portnum) | nc -N -l -p $portnum 

10秒後に「T」をlocalhost:9999に送信します。

完全なコードは次のとおりです。

#!/bin/sh
portnum=9999
testmsg="Hello_World"
if [ "$( (sleep 10 ;echo "T" | nc -w 1 127.0.0.1 $portnum) | nc -N -l -p $portnum )" = $testmsg ]; then
  echo "Test pass"
else
  echo "Test not pass"
fi

サーバーがHello_World10秒以内に受信すると、それを印刷しますTest pass。それ以外の場合は印刷Test not pass

別のコンソールを開いて入力してみてください。

echo "Hello_World" | nc -w 1 127.0.0.1 9999

それをテストするため。

答え4

記載されているようにペテブ-w接続の listening() 時 Timeout() は、-lレガシーnc実装にのみ適用されます。

Ubuntuからそのような悟り経由でインストールしてapt install netcat-traditional呼び出すことができますnc.traditional

関連情報