nc
概要
- 正しくは Netcat コマンド
- TCP や UDP のパケットを読み書きするツール
- 用途としては、対象ホストに対する疎通テストや、ファイル転送に用いる
- 一般的にファイルを転送するには、scp や sftp などを使うが、暗号化コストで転送速度が落ちてしまうので、純粋に転送速度を上げたい場合はこのコマンドを使うと良い (ただし、セキュリティは犠牲になるので、その点は注意して使うこと)
- 逆に単純な転送のみ行うため、パイプなどでさまざまな圧縮ツールなどを通すことができる
インストール
- Ubuntu では標準で入っている
ファイル転送
シンプルな転送
- サーバ (送信) 側とクライアント (受信) 側で ssh などでログインした状態にしておく
- 送受信
- 送信側
$ nc -l <ポート番号> < <送信ファイル>
<ポート番号>
: well-knownポート番号 以外のポート番号を指定 (10000 とかそれ以上の数字とか)
- 受信側
$ nc <ホスト名orIPアドレス> <ポート番号> > <保存パス>
<ホスト名orIPアドレス>
: 送信側のホスト名か、IP アドレスを指定<ポート番号>
: 送信側と同じポート番号を指定<保存パス>
: 保存するファイルはリダイレクトで保存
- 転送が終了すると、何も表示せずにプロンプトに戻る
- 送信側で pv コマンドを使うと、転送の進捗もわかる
- pv コマンドのインストール
$ sudo apt-get install pv
- 送受信
- 送信側
$ pv <送信ファイル> | nc -l <ポート番号>
- 受信側は同じコマンド
高速な転送
- ファイルを lzop や pigz などで圧縮すると転送速度が上がるらしい
lzop を使う転送
- 計算機に負荷 (CPU 負荷) をあまりかけずに高速に圧縮するなら、lzop を使うのが最適
- lzop のインストール
$ sudo apt-get install lzop
- 送受信
- 送信側
$ lsop -c <送信ファイル> | nc -l <ポート番号>
- pv コマンドを使う場合
$ pv <送信ファイル> | lzop -c | nc -l <ポート番号>
- 受信側
$ nc <ホスト名orIPアドレス> <ポート番号> | lsop -d > <保存パス>
pigz を使う転送
- 計算機の CPU リソースが豊富でそれらを利用できるなら、gzip の並列版である pigz を使うのが最適
- 送受信
- 送信側
$ pigz -c <送信ファイル> | nc -l <ポート番号>
- pv コマンドを使う場合
$ pv <送信ファイル> | pigz -c | nc -l <ポート番号>
- 受信側
$ nc <ホスト名orIPアドレス> <ポート番号> | pigz -d > <保存パス>