ncatを用いたファイル転送

提供: セキュリティ
2013年6月16日 (日) 00:46時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「<!-- vim: filetype=mediawiki --> ネットワーク越しのファイル転送の方法は、いくつもありますが、ここでは、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つのファイルを送信します。 無垢数のファイルを送信するには、tarzipでアーカイブファイルを送信します。 この方法も同様に簡単です。 出力を直接 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 は、クライアントを切断しません。

関連項目




スポンサーリンク