マルチスレッドサーバーとしてのnetcat


12

netcatを使用して、次のような単純なサーバーを実行します。

while true; do nc -l -p 2468 -e ./my_exe; done

これにより、誰でもポート2468でホストに接続し、「my_exe」と会話できます。
残念ながら、オープンセッション中に他の誰かが接続しようとすると、「接続拒否」エラーが発生します。これは、netcatが次の「while」ループまでリッスンしないためです。

netcatをマルチスレッドサーバーのように動作させる方法、つまり常に着信接続をリッスンする方法はありますか?そうでない場合、これに対するいくつかの回避策はありますか?


socatを使用できます
sivann

回答:



3

使用しているオペレーティングシステムについては言及していませんが、シェルコマンドの例の構文に基づいたLinuxまたはUnixであると想定します。

システムでxinetd(またはその前身のinetd)を実行している場合、そのソフトウェアを使用して、選択したポートで接続をリッスンし、実行可能ファイルを実行して応答することができます。xinetd / inetdでは、複数の同時接続を許可するオプションがあり、それぞれが実行可能ファイルの個別のインスタンスによって提供されます。


-2

次のような「&」を使用して、プロセスをバックグラウンドで実行するだけです(その後、次のループに進む前に戻りを待機しません)。

while true; do nc -l -p 2468 -e ./my_exe &; done

7
これにより、サブプロセスが
大量に

5
そして、最初の呼び出しのみが機能します。ポート2468にサーバーソケットが既にあるため、後続のすべてが失敗します。-
ダニエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.