接続を閉じずに「netcat」EOFを介して「cat」する方法は?

接続を閉じずに「netcat」EOFを介して「cat」する方法は?

問題があります。コマンド付きのncatサーバーがありますncat -l [port] -k -c "cat > foo; cat > bar"。 netcatを介してこのサーバーに接続すると、ファイルにfoo書き込まれbarますfoo。これをどのようにバイパスできますか?シャットダウンする代わりにコマンドを使用する代替方法はありますか?^DbarbarcatEOF

答え1

1つの接続のみを使用して2つのファイルを転送する場合は、ファイルの終わりは長さ0の読み取りであるため、netcatがソケットを閉じるために使用するため、マーカーを使用してデータストリームからファイルを分離する必要があります。 。

Control-DControl-Dファイルの終わりを示すために端末に何かを入力できますが、文字は生成されず、長さ0の読み取りは終了します。データストリームにはありません。

単純に2つのファイルを転送するには、既存のpackコマンドを受信者と送信者tarとして使用できます。 (ファイル名は送信者が送信したものであるため、送信者を信頼する必要があります。)nc -k -l 4458 -v -c 'tar xf - >&2'tar cf - foo bar

あるいは、ファイルが単純なテキストの場合は、特殊行を挿入して2つのファイルを区別することもできます。たとえば、発信者側cat foo; echo bye; cat barと受信者側では次のようになります。

nc -k -l 4458 -v -c 'awk -v file=foo '\''/^bye$/{ file="bar";next }{print >file}'\'

このGNU awkスクリプトは、最初のファイル名を変数に保存し、file「bye」行を見ると2番目のファイル名に変更します。

関連情報