「ncatを用いたファイル転送」の版間の差分
(ページの作成:「<!-- vim: filetype=mediawiki --> ネットワーク越しのファイル転送の方法は、いくつもありますが、ここでは、ncat を用いたファイ...」) |
|||
行1: | 行1: | ||
− | |||
− | |||
− | |||
ネットワーク越しのファイル転送の方法は、いくつもありますが、ここでは、[[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 の出力を直接 送信側の[[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 は、クライアントを切断しません。