これはLinuxに近いと思います-NetcatはUDPトラフィックのリッスンを停止します-スーパーユーザー、とにかく質問した方がいいと思いました
これまでのようにnetcatをのバージョン私はUbuntuの11.04を使用していて、デフォルトnetcat
私は推測していることには、あるopenbsd
:1
$ nc
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [hostname] [port[s]]
これは私が奇妙だと思うことです:最初のケースは期待どおりに動作します-1つのターミナルでUDPサーバーを開きます:
$ sudo nc -ul 5000
...そして、別の端末で新しいUDPクライアント接続を開始しhello
ます。それぞれ3回入力し、それぞれの後にEnterキーを押します。
$ nc -u 127.0.0.1 5000
hello
hello
hello
^C
...サーバー端末に戻ると、hello
予想どおり3回印刷されました。
$ sudo nc -ul 5000
hello
hello
hello
^C
これまでのところ、すべてが期待どおりに機能しています。ただし、クライアントに入力をパイプすることで同じことをしようとするとしましょう。そのため、まず1つの端末でUDPサーバーを確立します。
$ sudo nc -ul 5000
...そして別の方法では、nc
UDPクライアントとしていくつかのデータをパイプします。
$ echo hello | nc -u 127.0.0.1 5000
hello
hello
^C
...クライアントコマンドの後、シェルは入力を待っているかのようにフリーズしhello
ます。そこで、さらに2回入力してEnterキーを押します。しかし、サーバーは最初に登録されましたhello
(経由でパイプされましたecho
)。さらに、Ctrl-Cを押してクライアントecho hello | nc -u 127.0.0.1 5000
コマンドを繰り返し実行しようとしても、サーバーは最初の1つだけを報告し続けますhello
。
$ sudo nc -ul 57130
hello
^C
...そして、Ctrl-Cでサーバーを停止して再起動した後にのみ、クライアントecho hello | nc -u 127.0.0.1 5000
コマンドを繰り返して、動作を確認できます。
これはnc
動作するはずの方法ですか?echo hello | nc -u 127.0.0.1 5000
サーバーを再起動せずに、少なくとも繰り返しの呼び出しが登録されることを期待しますか?それとも、そのような動作のための特別なコマンドラインスイッチがありますか?
編集:私はこの素敵なPDFプレゼンテーション見つけsocatに関する-ソケットのすべての種類を取り扱い、以下が含まれているnetcat
対socat
ノートを:
netcat-制限事項
●ワンショットのみ(ソケットのクローズ後に終了)
...
例1:netcatの置換
...
●ソースポートを持つUDPクライアント:
nc -u -p 500 1.2.3.4 500
socat-udp:1.2.3.4: 500、sp = 500
●TCPサーバー:
nc -l -p 8080
socat-tcp-l:8080、reuseaddr
...
...ただし、サーバーコマンドを " socat - udp4-listen:5000,reuseaddr
"に、クライアント行を " socat - udp:127.0.0.1:5000
" に置き換えた場合、上記とほぼ同じ動作になります。パイプ入力 " echo hello | socat - udp:127.0.0.1:5000
"で、唯一の違いはここで、コマンドは少なくとも単語hello
が送信された後に存在します-ただし、このコマンドを連続して実行しても、サーバーが再起動されるまでサーバーで受信は行われません。
cat $(echo -e "hello\nhello\nhello\n" > tmpf; echo tmpf) | nc -u 127.0.0.1 5000
」)、しかし、私は3つを見てhello
いますが、私にはまだパズルがあります:そのコマンドも「入力」を待っているかのようにユーザー、およびCtrl-Cを押して再実行した後、サーバーは再起動されるまでデータを表示しません!?それが私がもっと知りたいことです-乾杯!