複数のホストをリッスンするnc
を使用してTCP接続を作成する方法は?
nc -l -p 12345
netcat
との同時接続はできません。 ucspi-tcp
のtcpserver
ツールまたはレバレッジ xinetd
はLinuxを使用しているためです。
参照: https://superuser.com/questions/232747/netcat-as-a-multithread-server
連続した接続は、終了後にnetcat
を再起動するシェルスクリプトを介して処理できます。
ncat
ができます。
例えば。 ncat --broker --listen -p 12345
は、すべての着信メッセージを他のすべてのクライアントに配信します(ハブと考えてください)。
-k
現在の接続が完了した後、ncが別の接続をリッスンし続けるようにします。 -lオプションなしでこのオプションを使用するとエラーになります。
socat
の代替としてnc
をお勧めします。
OPの問題については、socat - TCP-LISTEN:12345,fork,reuseaddr
仕事をすることができます。
私はそれが機能していないので、これは不完全な答えです。実際、ほぼ間違いなく質問です。たぶん他の誰かがそれを終えることができます。
まず、netcatにはさまざまなバージョンがあるようです。私はUbuntuを使用しているので、おそらくUbuntuに付属しているバージョンを持っています。私がnc -h
のとき、それはこう言います:
OpenBSD netcat (Debian patchlevel 1.187-1ubuntu0.1)
man nc
を実行すると、次のように表示されます。
-F Pass the first connected socket using sendmsg(2) to stdout and exit. This
is useful in conjunction with -X to have nc perform connection setup with
a proxy but then leave the rest of the connection to another program (e.g.
ssh(1) using the ssh_config(5) ProxyUseFdpass option).
これは、stdinとstdoutで通常のことを行う代わりに、stdoutに何かを出力することを意味するように思えます。その後、その何かを別のプロセスで使用して、クライアントへの実際の接続を行うことができます。
残念ながら、-F
には何の効果もありません。だから多分私はそれを間違っています。あるいは、私が聴かなければならない秘密のパイプや、文書化を忘れていた補足的な議論があるかもしれません。あるいは、netcatのビルドが壊れていて、Ubuntuを使用している他のすべてのユーザーに有効な場合があります。
-k
オプションと組み合わせて(または、失敗するとwhile-trueループ)、これにより多くの異なるクライアントが別々の接続を持つことができます。 handle_connection
と呼ばれる実行可能ファイルがあり、クライアントからの入力ファイル記述子とクライアントへの出力ファイル記述子を引数として受け取り、クライアントと通信するサブプロセスを生成するとします。サーバースクリプトは次のようになります。
nc -lkF $Host $port | while read in out ; do
handle_connection $in $out ;
done