ncatを用いたファイル転送
ネットワーク越しのファイル転送の方法は、いくつもありますが、ここでは、ncat を用いたファイル転送のやり方について、説明します。
目次
概要
ネットワークを超えたファイル転送の方法は、たくさんあります。 多くのファイル転送は、E-mail、ネットワークファイルシステム、HTTP, SFTP、そのほかのプロトコルによって、うまくハンドルされます。
ファイルが大きくてメールで送信できないとき、インターネットで接続されていない2つのマシンで転送するとき、ファイルサーバの構築と解体なしに、ファイルをすぐに転送する必要があるとき、どのようにしますか? そういった状況やそれ以外のときに、ncatは、そういった用途のためにちょうどいいツールです。いくつかのトリッキーなファイル転送のシナリオは、raw ネットワークパイプの柔軟性を理解することができます。
デフォルトのncatは、暗号化なしにトラフィックを送信します。何者かに、転送中のファイルをインターセプトされる可能性があります。トラフィックの暗号化については、ncatでSSLを使う方法 を確認してください。
デフォルトでは、 ncat は、リモートの終了によるクローズまで、接続はクローズされません。なぜなら、ncatが知る限りでは、リモートサーバがまだ送信してくるデータをもっているかもしれないからです。 --send-only オプションを使うと、接続をクローズする振る舞いを変更でき、入力の終了したときに、終了します。これは、一方通行のファイル転送を行うときに、使います。
基本的なファイル転送は、極めてシンプルです。 一端で、ncatをlistenモードで起動します。 もう一端で、コネクトモードで ncat を起動し、接続を利用して、ファイルをパイプします。
1つファイルを転送の例
ここでの例では、host1 の inputfile を host2 の outputfile に転送します。 ここでは、ポート番号を指定しません。そのため、ncatは、デフォルトの 31337 番ポートを使用します。ほかのポートを使う場合は、コマンドラインで指定してください。
受信者がlistenして、ファイルを転送する
受信者がlistenして、ファイルを転送する例です。
受信者は、 listen します。
host2$ ncat -l > outputfile
ファイルを転送します。
host1$ ncat --send-only host2 < inputfile
送信者がlistenして、ファイルを転送する
送信者が listen して、ファイルを転送する例です。
host1$ ncat ---l send-only host2 < inputfile
host1$ ncat host1 > outputfile
複数のファイルを転送する例
上記のテクニックは、1つのファイルを送信します。 無垢数のファイルを送信するには、tarやzipでアーカイブファイルを送信します。 この方法も同様に簡単です。 出力を直接 tar tar の出力を直接 送信側のncat にパイプし、受信側でncat の出力を tar にパイプします。 この方法は、アーカイブファイル用のディスクスペースを必要としないので、特に便利です。
host2$ ncat -l | tar zxv
host1$ tar zcf files | ncat --send-only host2
圧縮して転送する例
ディスクイメージを圧縮して転送する例です。
host2$ ncat -l | bzip2 -d > host1-hda.img
host1$ cat /dev/hda | bzip2 | ncat --send-only host2
中間者を用いて転送する例
ホストがlistenできず、2つのホストが直接コミュニケーションできない状況では、上記の基本的なファイルの転送テクニックは、うまくいきません。 ネットワークアドレス変換の流行で一般的になりました。 中間者として3番目のホストを利用することで、問題に対処することができます。 中間のホストは、コネクションを仲介するモード(Connection Brokering モード)で listen し、ほかの2つのホストから接続されます。 Connection Brokering モードでは、あるソケットからの入力をコピーし、ほかのすべてのソケットに送信します。2つのホストだけが接続されているとき、非常にシンプルです。あるホストからのデータを、ほかのホストにフォワードします。この例では、host1 が inputfile を host3 を中間者として使って、host2 に ouputfile に送信します。
host3$ ncat -l --broker host2$ ncat host3 > outputfile host1$ ncat --send-only host3 < inputfile
ここでは、起動する順番が重要です。 最初に host3 を起動してください。その次に、 host2 を起動します。 ファイルの転送が終わったら、host2 の ncat を C-c で強制的に切断する必要があります。 broker は、クライアントを切断しません。
関連項目
ツイート