
netcatがコンピュータ間のファイル転送を完了したかどうかを知る方法はありますか?
現在のコマンド:
マシン#2:nc -lp 5555 > test.txt
マシン#1:nc MachineIP Port < test.txt
転送が発生しましたが、完了したという視覚的な表示はありません。
答え1
まず、いくつかの背景
さまざまなバージョンがありますnc
。nc(1) - Linux のマニュアルページまたはnc(1) BSD 共通コマンドマニュアル転送後すぐに接続を閉じる必要があります。リンクされた両方のサイトに例を示します。
まず、ncを使用して特定のポートをリッスンし、出力をファイルにキャプチャします。
$ nc -l 1234 > filename.out
2番目のマシンを使用して、リッスンしているncプロセスに接続し、転送するファイルを提供します。
$ nc host.example.com 1234 < filename.in
ファイル転送が完了すると、接続は自動的に終了します。
netcat
転送後は接続を閉じないため、上記と同じではありません。 Debian JessieのNetcat 1.10と同じように動作します。この動作は/usr/share/doc/netcat-traditional/README.gz
私のコンピュータに文書化されており、太字は私のものです。
最も簡単な使用法では、「ncホストポート」は、指定された宛先ホストの指定されたポートへのTCP接続を作成します。これにより、標準入力がホストに送信され、接続を介して返されたすべての内容が標準出力に送信されます。この状況は、接続のネットワーク側が閉じるまで無期限に続きます。 この動作は、標準入力のファイルの終了後にすべてを閉じて終了する他のほとんどのアプリケーションとは異なります。
この動作の理由は次のとおりです。
「なぜTelnetを使ってポートに接続しないのですか?」と尋ねることができます。これは有効な質問であり、その理由は次のとおりです。 Telnetには「標準入力EOF」の問題があるため、ネットワーク出力が完了するようにドライバスクリプトに計算された遅延を導入する必要があります。これはnetcatになるまで実行され続けます。ネットワーク側面閉鎖。
ウィキペディアではさまざまな実装の概要。しかし、違いはわかりません。たぶん他の人もそうすることはできませんか?
今解決策は
1
nc
ファイルを読んだ後に終了するように指示できます。このオプションは次のように便利です。
-q seconds after EOF on stdin, wait the specified number of seconds
and then quit. If seconds is negative, wait forever.
送信側でこのコマンドを使用する場合:
nc -q 0 MachineIP Port < test.txt
nc
EOFを読み取った後、つまりファイルの終わりから0秒後に終了します。その後終了し、受信側も終了しますnc
。
パケットが通過しない場合に何が起こるのか気になる場合は、Jurajの説明を参照してください。
すべてのパケットが到着していない場合、システムはそれを検出し、アプリケーションに通知せずにそれを再送信します(またはそれが可能でない場合、アプリケーションはタイムアウトエラーを受信します)。信頼性の高い転送は、オペレーティングシステムのカーネルによって提供されるTCPプロトコルの目的であり、それを
nc
使用します。これを行わないUDPプロトコルを使用して要求できますが、nc -u
そうではありません。
2
README.gz
タイムアウトに基づいており、実装に対応するオプションが-w
不要な前述の基本的な例があります。-q
Netcatは単純なデータ転送プロキシとして使用でき、どちらがリスナーであり、どちらがクライアントであるかは重要ではありません。一方の入力はもう一方の出力に渡されます。タイムアウトを指定せずに受信側でリスナーを起動し、送信側に少しのタイムアウトを提供することが役立ちます。これにより、リスナーはユーザーが接続するまで待機し、データフローが停止した後にクライアントがタイムアウトし、リスナーを閉じて別の場所に移動します。介入するネットワークに問題がない限り、これは完全に信頼できる必要があり、いつでもタイムアウトを増やすことができます。 「rsh」の一般的な例は、次の場合によく使用されます。
nc -l -p 1234 | uncompress -c | tar xvfp -
それから反対側から
tar cfp - /some/dir | compress -c | nc -w 3 othermachine 1234
一端の .rhosts ファイル、ユーザー アカウント、または inetd 設定を心配することなく、あるコンピュータから別のコンピュータにディレクトリの内容を転送できます。