echo command | netcat host port
これにより、コマンドがリモートホストに送信され、一部のデータが読み戻されます。しかし、数秒後に接続が閉じます。-wパラメーターは何も変更しませんでした。SuSE 10.1でnetcat v1.10を使用しています。
echo command | netcat host port
これにより、コマンドがリモートホストに送信され、一部のデータが読み戻されます。しかし、数秒後に接続が閉じます。-wパラメーターは何も変更しませんでした。SuSE 10.1でnetcat v1.10を使用しています。
回答:
これは、nc
OS Xのコマンドで機能します(送信するコマンドがファイルにあると仮定します)。
cat file - | nc host port
(本質的に、cat
stdoutでファイルの内容をダンプしてから、stdinで待機します)。
拡張により、シェル自体からコマンドを送信したい場合、これを行うことができます:
cat <(echo command) - | nc host port
{ echo command; cat;}
同じことをし、理解しやすいと考えられるかもしれません。
netcat
コマンドは入力の終わりを見るまでソケットを開いたままにします。これらのすべての例は、実際に理由をあまり述べずにこれを示しています。私はと対話していますサーバー使用だけで使用して長時間:。 SocketTest は、任意のTCPまたはUDPポートでリッスンまたはサービスを提供できる便利なツールです。SocketTest
netcat
cat - | nc localhost 8063
nc
Ubuntuの上:
nc -q -1 host port
-q seconds
after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.
利用可能なnc
オプションはディストリビューションによって大きく異なるため、これはあなたの(OpenSUSE)では動作しないかもしれないことに注意してください。
これをnetcatまたはsocatで管理するとは思わない。私は両方で大規模な調整を行ったばかりで、socatが最も有望に見えました。
リモートTCPポートに接続し、ローカルUNIXドメインソケットでリッスンするようにsocatを設定することができました(理論的にはリンクを常に維持できるように)が、ローカルプロセスがunixソケット(別のsocat UNIXソケットをstdin / outにリンクすることで、TCP socatセッションを閉じました。
ここでの問題は、netcat / socatを介した各接続がサーバーへの新しいTCPストリーム接続を作成し、ローカルエンドが切断されたときにそのTCPストリームセッションを閉じることです。
おそらく、リモートエンドへのTCP接続を開き、ソケット/パイプ/ fifoなどでローカルにリッスンし、既存のTCPパイプにデータを送信するカスタムプロキシソフトウェアを作成する必要があると思います結果を返します。
ソケットのもう一方の端で接続が閉じられているのでしょうか?
デフォルトでは、nc
(-k
オプションで)リッスンしたままにするよう明示的に指示しない場合、完了後に接続を閉じます。
-k Forces nc to stay listening for another connection after its current
connection is completed. It is an error to use this option without the
-l option.
をご覧くださいman nc.1
。
このように2台のマシン間でデータを正常にストリーミングしています:
送信者:
while (true); do
echo -n "$RANDOM " | nc <host> <port>
done
受信機:
nc -kl <port>
socat
のshut-none
オプションはここで役立つはずです:
Changes the (address dependent) method of shutting down the write part of a connection to not do anything.
また、おそらくを使用してデフォルトのタイムアウト期間をオーバーライドする必要があります-t <timeout>
。そうしないと、ソケットは0.5秒後に閉じられます。このオプションは、デフォルトの動作をオーバーライドします。
When one of the streams effectively reaches EOF, the closing phase begins. Socat transfers the EOF condition to the other stream, i.e. tries to shutdown only its write stream, giving it a chance to terminate gracefully. For a defined time socat continues to transfer data in the other direction, but then closes all remaining channels and terminates.
したがって、次のようなコマンド:
echo 'blah' | socat -t 10 stdio tcp:<addr>:<port>,shut-none
「blah」を送信した後、ソケットを10秒間開いたままにします。