「ncatを用いたファイル転送」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「<!-- vim: filetype=mediawiki --> ネットワーク越しのファイル転送の方法は、いくつもありますが、ここでは、ncat を用いたファイ...」)
 
 
行1: 行1:
<!--
 
vim: filetype=mediawiki
 
-->
 
 
ネットワーク越しのファイル転送の方法は、いくつもありますが、ここでは、[[ncat]] を用いたファイル転送のやり方について、説明します。
 
ネットワーク越しのファイル転送の方法は、いくつもありますが、ここでは、[[ncat]] を用いたファイル転送のやり方について、説明します。
  
行7: 行4:
  
 
== 概要 ==
 
== 概要 ==
 
 
ネットワークを超えたファイル転送の方法は、たくさんあります。
 
ネットワークを超えたファイル転送の方法は、たくさんあります。
 
多くのファイル転送は、E-mail、ネットワークファイルシステム、[[HTTP]], SFTP、そのほかのプロトコルによって、うまくハンドルされます。
 
多くのファイル転送は、E-mail、ネットワークファイルシステム、[[HTTP]], SFTP、そのほかのプロトコルによって、うまくハンドルされます。
行21: 行17:
 
一端で、[[ncat]]をlistenモードで起動します。
 
一端で、[[ncat]]をlistenモードで起動します。
 
もう一端で、コネクトモードで [[ncat]] を起動し、接続を利用して、ファイルをパイプします。
 
もう一端で、コネクトモードで [[ncat]] を起動し、接続を利用して、ファイルをパイプします。
 
 
== 1つファイルを転送の例 ==
 
== 1つファイルを転送の例 ==
 
 
ここでの例では、host1 の inputfile を host2 の outputfile に転送します。
 
ここでの例では、host1 の inputfile を host2 の outputfile に転送します。
 
ここでは、[[ポート番号]]を指定しません。そのため、[[ncat]]は、デフォルトの 31337 番ポートを使用します。ほかのポートを使う場合は、コマンドラインで指定してください。
 
ここでは、[[ポート番号]]を指定しません。そのため、[[ncat]]は、デフォルトの 31337 番ポートを使用します。ほかのポートを使う場合は、コマンドラインで指定してください。
 
 
=== 受信者がlistenして、ファイルを転送する ===
 
=== 受信者がlistenして、ファイルを転送する ===
 
 
受信者がlistenして、ファイルを転送する例です。
 
受信者がlistenして、ファイルを転送する例です。
  
 
受信者は、 listen します。
 
受信者は、 listen します。
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
host2$ ncat -l > outputfile
 
host2$ ncat -l > outputfile
行41: 行32:
 
host1$ ncat --send-only host2 < inputfile
 
host1$ ncat --send-only host2 < inputfile
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== 送信者がlistenして、ファイルを転送する ===
 
=== 送信者がlistenして、ファイルを転送する ===
 
 
送信者が listen して、ファイルを転送する例です。
 
送信者が listen して、ファイルを転送する例です。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行51: 行40:
 
host1$ ncat host1 > outputfile
 
host1$ ncat host1 > outputfile
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== 複数のファイルを転送する例 ==
 
== 複数のファイルを転送する例 ==
 
 
上記のテクニックは、1つのファイルを送信します。
 
上記のテクニックは、1つのファイルを送信します。
無垢数のファイルを送信するには、[[tar]]や[[zip]]でアーカイブファイルを送信します。
+
無垢数のファイルを送信するには、tarや[[zip]]でアーカイブファイルを送信します。
この方法も同様に簡単です。
+
この方法も同様に簡単です。出力を直接 tar の出力を直接 送信側の[[ncat]] にパイプし、受信側で[[ncat]] の出力を tar にパイプします。 この方法は、アーカイブファイル用のディスクスペースを必要としないので、特に便利です。
出力を直接 [[tar]]
+
[[tar]] の出力を直接 送信側の[[ncat]] にパイプし、受信側で[[ncat]] の出力を [[tar]] にパイプします。
+
この方法は、アーカイブファイル用のディスクスペースを必要としないので、特に便利です。
+
 
+
 
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
host2$ ncat -l | tar zxv
 
host2$ ncat -l | tar zxv
行69: 行51:
 
host1$ tar zcf files | ncat --send-only host2
 
host1$ tar zcf files | ncat --send-only host2
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== 圧縮して転送する例 ==
 
== 圧縮して転送する例 ==
 
 
ディスクイメージを圧縮して転送する例です。
 
ディスクイメージを圧縮して転送する例です。
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
host2$ ncat -l | bzip2 -d > host1-hda.img
 
host2$ ncat -l | bzip2 -d > host1-hda.img
行81: 行60:
 
host1$ cat /dev/hda | bzip2 | ncat --send-only host2
 
host1$ cat /dev/hda | bzip2 | ncat --send-only host2
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== 中間者を用いて転送する例 ==
 
== 中間者を用いて転送する例 ==
 
 
ホストがlistenできず、2つのホストが直接コミュニケーションできない状況では、上記の基本的なファイルの転送テクニックは、うまくいきません。
 
ホストがlistenできず、2つのホストが直接コミュニケーションできない状況では、上記の基本的なファイルの転送テクニックは、うまくいきません。
 
ネットワークアドレス変換の流行で一般的になりました。
 
ネットワークアドレス変換の流行で一般的になりました。
行100: 行77:
 
ファイルの転送が終わったら、host2 の [[ncat]] を C-c で強制的に切断する必要があります。
 
ファイルの転送が終わったら、host2 の [[ncat]] を C-c で強制的に切断する必要があります。
 
broker は、クライアントを切断しません。
 
broker は、クライアントを切断しません。
 
 
== 関連項目 ==
 
== 関連項目 ==
 
 
* [[ncat]]
 
* [[ncat]]
 
* [[netcat]]
 
* [[netcat]]
 +
<!-- vim: filetype=mediawiki
 +
-->

2015年9月22日 (火) 19:22時点における最新版

ネットワーク越しのファイル転送の方法は、いくつもありますが、ここでは、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 の出力を直接 送信側の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 は、クライアントを切断しません。

関連項目