web-dev-qa-db-ja.com

NCを使用して複数のTCP接続をリッスンする方法

複数のホストをリッスンするncを使用してTCP接続を作成する方法は?

nc -l -p 12345
23
Aman Jain

netcatとの同時接続はできません。 ucspi-tcptcpserverツールまたはレバレッジ xinetd はLinuxを使用しているためです。

参照: https://superuser.com/questions/232747/netcat-as-a-multithread-server

連続した接続は、終了後にnetcatを再起動するシェルスクリプトを介して処理できます。

16
Hans Z.

ncatができます。

例えば。 ncat --broker --listen -p 12345は、すべての着信メッセージを他のすべてのクライアントに配信します(ハブと考えてください)。

12
masterxilo

-k
現在の接続が完了した後、ncが別の接続をリッスンし続けるようにします。 -lオプションなしでこのオプションを使用するとエラーになります。

8
excitoon

socatの代替としてncをお勧めします。

OPの問題については、socat - TCP-LISTEN:12345,fork,reuseaddr仕事をすることができます。

8
dyng

私はそれが機能していないので、これは不完全な答えです。実際、ほぼ間違いなく質問です。たぶん他の誰かがそれを終えることができます。

まず、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
0
David Knipe