問題があります。コマンド付きのncatサーバーがありますncat -l [port] -k -c "cat > foo; cat > bar"
。 netcatを介してこのサーバーに接続すると、ファイルにfoo
書き込まれbar
ますfoo
。これをどのようにバイパスできますか?シャットダウンする代わりにコマンドを使用する代替方法はありますか?^D
bar
bar
cat
EOF
答え1
1つの接続のみを使用して2つのファイルを転送する場合は、ファイルの終わりは長さ0の読み取りであるため、netcatがソケットを閉じるために使用するため、マーカーを使用してデータストリームからファイルを分離する必要があります。 。
Control-D
Control-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番目のファイル名に変更します。