Linux ncatコマンド完全ガイド|ネットワークの「スイスアーミーナイフ」を使いこなす

Web

ネットワークのトラブルシューティングやテストをしていると、こんな場面に遭遇します。

「特定のポートに接続できるか確認したい」
「ファイアウォールが正しく動作しているかテストしたい」
「簡単にファイルを転送したい」
「チャットのような双方向通信を試したい」

そんな時に役立つのが ncat(エヌキャット) コマンドです。

この記事では、ネットワーク管理者やエンジニアの必須ツール「ncat」について、初心者の方にも分かりやすく解説していきます。

スポンサーリンク
  1. ncat(エヌキャット)とは何か?
    1. 「スイスアーミーナイフ」と呼ばれる理由
    2. ncatとnetcatの関係
    3. ncatでできること
  2. ncatのインストール方法
    1. インストール済みか確認
    2. Ubuntu/Debian系でのインストール
    3. Fedora/RHEL/CentOS系でのインストール
    4. Arch Linux系でのインストール
    5. macOSでのインストール
    6. netcatとの共存
  3. ncatの基本的な使い方
    1. 基本構文
    2. 最もシンプルな例:チャット
    3. ポートが開いているか確認
    4. ポート範囲のスキャン
    5. タイムアウトの設定
  4. ファイル転送:実践的な使用例
    1. 単一ファイルの転送
    2. 大きなファイルの転送(進捗表示)
    3. ディレクトリ全体の転送
    4. 暗号化したファイル転送(SSL/TLS)
  5. サーバーとして使う
    1. エコーサーバー
    2. HTTPサーバー(簡易版)
    3. ファイルを提供するHTTPサーバー
    4. チャットサーバー(複数クライアント対応)
  6. ネットワーク診断とトラブルシューティング
    1. バナーグラビング(サービス情報の取得)
    2. SMTPサーバーのテスト
    3. HTTPSサーバーのテスト
    4. UDPポートのテスト
    5. ポート転送(リダイレクト)
  7. セキュリティ関連の使い方
    1. SSL/TLS暗号化通信
    2. 証明書を指定する
    3. アクセス制御
    4. 認証を追加する
  8. よく使うオプション一覧
    1. 接続関連
    2. セキュリティ関連
    3. 実行関連
    4. その他
  9. 実践的な活用例
    1. 例1:データベースサーバーへの接続確認
    2. 例2:サーバー間のネットワーク速度テスト
    3. 例3:リモートバックアップ
    4. 例4:簡易的なログサーバー
    5. 例5:ファイアウォールのテスト
    6. 例6:Webサービスの動作確認
  10. ncatとcurlやwgetの違い
    1. curl/wget
    2. ncat
  11. トラブルシューティング
    1. 問題1:「Address already in use」エラー
    2. 問題2:接続がタイムアウトする
    3. 問題3:権限エラー
    4. 問題4:SSL接続エラー
    5. 問題5:データが途切れる
  12. セキュリティ上の注意点
    1. 1. 本番環境での使用は慎重に
    2. 2. ファイアウォールを設定する
    3. 3. 暗号化を使用する
    4. 4. rootで実行しない
    5. 5. ログを確認する
  13. まとめ:ncatはネットワーク診断の必須ツール

ncat(エヌキャット)とは何か?

ncat は、ネットワーク接続を行うための強力なコマンドラインツールです。

一言で言うと、ネットワーク上でデータを送受信するための「万能ナイフ」のようなツールです。

「スイスアーミーナイフ」と呼ばれる理由

スイスアーミーナイフは、ナイフ、ハサミ、缶切りなど、様々な機能が一つにまとまった便利な道具ですよね。

ncatも同じです:

  • ポートスキャン
  • ファイル転送
  • チャット
  • プロキシ
  • バナーの取得
  • ネットワークデバッグ

これら全てが一つのコマンドで実現できます。

ncatとnetcatの関係

netcat(nc) という有名なツールがあり、ncatはその改良版です。

netcatの問題点:

  • 複数のバージョンが存在(GNU netcat、BSD netcat、OpenBSDのncなど)
  • バージョンによってオプションが異なる
  • セキュリティ機能が不足

ncatの利点:

  • Nmapプロジェクトが開発(信頼性が高い)
  • SSL/TLS対応
  • プロキシ機能
  • アクセス制御
  • 統一されたオプション

ncatでできること

ネットワーク診断:

  • ポートが開いているか確認
  • サービスが動いているかチェック
  • 接続速度のテスト

データ転送:

  • ファイルの送受信
  • ディレクトリの転送
  • バックアップデータの転送

テスト環境の構築:

  • 簡易HTTPサーバー
  • エコーサーバー
  • チャットサーバー

セキュリティテスト:

  • バナーグラビング(サービス情報の取得)
  • 脆弱性診断の補助
  • ポートフォワーディング

ncatのインストール方法

多くのLinuxディストリビューションには標準でインストールされていませんが、簡単に導入できます。

インストール済みか確認

ncat --version

または

which ncat

Ubuntu/Debian系でのインストール

sudo apt update
sudo apt install ncat

注意: nmap-ncatパッケージに含まれています。

Fedora/RHEL/CentOS系でのインストール

# Fedora
sudo dnf install nmap-ncat

# CentOS/RHEL
sudo yum install nmap-ncat

Arch Linux系でのインストール

sudo pacman -S nmap

nmapパッケージにncatが含まれています。

macOSでのインストール

brew install nmap

netcatとの共存

多くのシステムには古いnc(netcat)がインストールされています。

ncatは通常、ncatコマンドとして使用しますが、一部のシステムではncがncatへのシンボリックリンクになっています。

確認方法:

ls -la $(which nc)

ncatの基本的な使い方

まずは基本から見ていきましょう。

基本構文

サーバーモード(待ち受け):

ncat -l -p ポート番号

クライアントモード(接続):

ncat ホスト名 ポート番号

最もシンプルな例:チャット

サーバー側(待ち受ける側):

ncat -l -p 12345

クライアント側(接続する側):

ncat localhost 12345

これで、双方向のチャットができます。どちらかで入力したテキストが、もう一方に表示されます。

終了するには Ctrl+C を押します。

ポートが開いているか確認

基本的な接続テスト:

ncat -zv google.com 80

オプションの意味:

  • -z:接続だけして、データは送らない(ゼロI/Oモード)
  • -v:詳細表示(verbose)

出力例:

Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Connected to 142.250.207.46:80.
Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.

ポート範囲のスキャン

ncat -zv example.com 20-30

ポート20から30までを順番にチェックします。

タイムアウトの設定

ncat -w 3 example.com 80

-w 3で3秒のタイムアウトを設定します。

ファイル転送:実践的な使用例

ncatを使ったファイル転送は非常に便利です。

単一ファイルの転送

受信側(サーバー):

ncat -l -p 12345 > received_file.txt

送信側(クライアント):

ncat 192.168.1.100 12345 < file_to_send.txt

これでファイルが転送されます。

大きなファイルの転送(進捗表示)

受信側:

ncat -l -p 12345 | pv > large_file.iso

送信側:

pv large_file.iso | ncat 192.168.1.100 12345

pvコマンド(インストールが必要)で進捗が表示されます。

ディレクトリ全体の転送

受信側:

ncat -l -p 12345 | tar xzvf -

送信側:

tar czvf - /path/to/directory | ncat 192.168.1.100 12345

tarとパイプを組み合わせることで、ディレクトリごと転送できます。

暗号化したファイル転送(SSL/TLS)

受信側:

ncat -l -p 12345 --ssl > received_file.txt

送信側:

ncat --ssl 192.168.1.100 12345 < file_to_send.txt

--sslオプションで通信を暗号化できます。

サーバーとして使う

ncatで簡易的なサーバーを立てられます。

エコーサーバー

送信されたデータをそのまま返すサーバーです。

ncat -l -p 12345 -k -c 'xargs -n1 echo'

オプションの意味:

  • -k:接続が切れても待ち受け続ける(keep-open)
  • -c:実行するコマンド

HTTPサーバー(簡易版)

while true; do
    echo -e "HTTP/1.1 200 OK\n\n<h1>Hello from ncat!</h1>" | ncat -l -p 8080
done

ブラウザで http://localhost:8080 にアクセスすると、メッセージが表示されます。

ファイルを提供するHTTPサーバー

while true; do
    ncat -l -p 8080 < index.html
done

チャットサーバー(複数クライアント対応)

ncat -l -p 12345 --chat

--chatオプションで、複数のクライアントが同時接続できるチャットサーバーになります。

ネットワーク診断とトラブルシューティング

実際の診断作業での使い方です。

バナーグラビング(サービス情報の取得)

HTTPサーバーの情報を取得:

echo -e "HEAD / HTTP/1.1\r\nHost: example.com\r\n\r\n" | ncat example.com 80

出力例:

HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Mon, 20 Oct 2025 10:00:00 GMT
Content-Type: text/html

SSHサーバーのバージョン確認:

ncat localhost 22

出力例:

SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5

SMTPサーバーのテスト

ncat smtp.example.com 25

メールサーバーとの対話的な通信ができます。

220 smtp.example.com ESMTP Postfix
HELO test.local
250 smtp.example.com
QUIT
221 2.0.0 Bye

HTTPSサーバーのテスト

ncat --ssl example.com 443

SSL/TLS接続をテストできます。

UDPポートのテスト

ncat -u localhost 53

-uオプションでUDP通信になります。

ポート転送(リダイレクト)

ローカルポート8080への接続を、リモートホストのポート80に転送:

ncat -l -p 8080 -c "ncat example.com 80"

簡易的なプロキシとして機能します。

セキュリティ関連の使い方

ncatのセキュリティ機能を活用します。

SSL/TLS暗号化通信

サーバー側:

ncat -l -p 12345 --ssl

クライアント側:

ncat --ssl localhost 12345

証明書を指定する

サーバー側(証明書を使用):

ncat -l -p 12345 --ssl --ssl-cert server-cert.pem --ssl-key server-key.pem

クライアント側(証明書を検証):

ncat --ssl --ssl-verify --ssl-trustfile ca-cert.pem localhost 12345

アクセス制御

特定のIPアドレスのみ許可:

ncat -l -p 12345 --allow 192.168.1.100

特定のIPアドレスを拒否:

ncat -l -p 12345 --deny 192.168.1.200

複数のIPを指定:

ncat -l -p 12345 --allow 192.168.1.100,192.168.1.101

認証を追加する

スクリプトと組み合わせて、簡易的な認証を実装できます。

ncat -l -p 12345 --sh-exec "read pass; if [ \"$pass\" = \"secret\" ]; then cat file.txt; fi"

よく使うオプション一覧

主要なオプションをまとめました。

接続関連

オプション説明
-lリスンモード(待ち受け)
-p ポートポート番号を指定
-k接続が切れても待ち受け続ける
-uUDPを使用(デフォルトはTCP)
-w 秒数タイムアウト時間

セキュリティ関連

オプション説明
--sslSSL/TLS暗号化を有効化
--ssl-certSSL証明書を指定
--ssl-keySSL秘密鍵を指定
--ssl-verify証明書を検証
--allow許可するIPアドレス
--deny拒否するIPアドレス

実行関連

オプション説明
-c コマンド接続時に実行するコマンド
-e プログラム接続時に実行するプログラム
--sh-execシェル経由でコマンド実行
--chatチャットモード

その他

オプション説明
-v詳細表示
-zデータを送らない(スキャンモード)
-4IPv4のみ使用
-6IPv6のみ使用
--send-only送信のみ
--recv-only受信のみ

実践的な活用例

実際の業務で使える具体例です。

例1:データベースサーバーへの接続確認

ncat -zv db.example.com 3306

MySQLサーバーに接続できるか確認します。

例2:サーバー間のネットワーク速度テスト

受信側:

ncat -l -p 12345 > /dev/null

送信側:

dd if=/dev/zero bs=1M count=1000 | pv | ncat 192.168.1.100 12345

1GBのダミーデータを送信して、速度を測定します。

例3:リモートバックアップ

バックアップを受け取る側:

ncat -l -p 12345 --ssl | gzip -d | tar xvf -

バックアップを送る側:

tar cvf - /important/data | gzip | ncat --ssl backup-server 12345

例4:簡易的なログサーバー

ncat -l -p 5000 -k >> application.log

アプリケーションからログを受信して、ファイルに追記します。

例5:ファイアウォールのテスト

内部サーバーで待ち受け:

ncat -l -p 8080

外部から接続テスト:

ncat -zv external-ip 8080

ファイアウォールルールが正しく動作しているか確認できます。

例6:Webサービスの動作確認

echo -e "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n" | ncat example.com 80

HTTPリクエストを手動で送信して、レスポンスを確認します。

ncatとcurlやwgetの違い

似たようなツールとの使い分けです。

curl/wget

用途:

  • HTTPやFTPでファイルをダウンロード
  • APIへのリクエスト
  • Webスクレイピング

特徴:

  • 高レベルなツール
  • プロトコルに特化

使用例:

curl https://example.com
wget https://example.com/file.zip

ncat

用途:

  • 低レベルなネットワーク通信
  • 任意のプロトコルに対応
  • カスタムプロトコルのテスト

特徴:

  • 柔軟性が高い
  • デバッグに最適
  • プロトコルに依存しない

使い分け:

  • 単純なHTTPリクエスト → curl/wget
  • ネットワーク診断 → ncat
  • カスタムプロトコル → ncat
  • 低レベルなデバッグ → ncat

トラブルシューティング

ncatを使う際の問題と解決方法です。

問題1:「Address already in use」エラー

原因:
指定したポートが既に使用されています。

確認方法:

sudo lsof -i :12345

または

sudo netstat -tlnp | grep 12345

解決方法:

  • 別のポートを使用
  • または既存のプロセスを終了

問題2:接続がタイムアウトする

原因:

  • ファイアウォールでブロックされている
  • サーバーが起動していない
  • ネットワークの問題

確認方法:

# ファイアウォールの確認
sudo iptables -L -n

# ポートが開いているか確認
sudo ss -tlnp | grep 12345

問題3:権限エラー

原因:
1024番以下のポートはroot権限が必要です。

解決方法:

# sudoを使用
sudo ncat -l -p 80

# または1024番以降のポートを使用
ncat -l -p 8080

問題4:SSL接続エラー

原因:

  • 証明書が正しくない
  • 証明書の検証に失敗

解決方法:

証明書の検証をスキップ(テスト時のみ):

ncat --ssl --ssl-verify=false localhost 12345

問題5:データが途切れる

原因:
バッファのフラッシュ問題

解決方法:

# stdbufで行バッファリングに変更
stdbuf -oL ncat -l -p 12345

セキュリティ上の注意点

ncatを使う際の注意事項です。

1. 本番環境での使用は慎重に

ncatは主にテストやデバッグ用のツールです。

本番環境では:

  • 適切なサーバーソフトウェアを使用
  • ncatは一時的な診断のみに使用

2. ファイアウォールを設定する

ncatで開いたポートは、外部からアクセス可能になります。

対策:

# 特定のIPのみ許可
ncat -l -p 12345 --allow 192.168.1.100

# または、ファイアウォールで制限
sudo ufw allow from 192.168.1.100 to any port 12345

3. 暗号化を使用する

機密データを転送する場合は必ず暗号化:

ncat --ssl localhost 12345

4. rootで実行しない

可能な限り、一般ユーザーで実行しましょう。

1024番以降のポートを使用すれば、root権限は不要です。

5. ログを確認する

不審なアクセスがないか、定期的にログを確認:

sudo journalctl -u ncat

まとめ:ncatはネットワーク診断の必須ツール

ncatは、ネットワーク管理者やエンジニアにとって欠かせない強力なツールです。

この記事のポイント:

  • ncatはネットワーク通信の万能ツール
  • ポートスキャン、ファイル転送、サーバー構築が可能
  • SSL/TLS暗号化に対応
  • netcatの改良版で機能が豊富
  • トラブルシューティングに最適

基本的なコマンド:

# 待ち受け(サーバーモード)
ncat -l -p 12345

# 接続(クライアントモード)
ncat localhost 12345

# ポートスキャン
ncat -zv example.com 80

# SSL接続
ncat --ssl example.com 443

# ファイル転送(受信側)
ncat -l -p 12345 > file.txt

# ファイル転送(送信側)
ncat 192.168.1.100 12345 < file.txt

よく使う用途:

  1. ポートが開いているか確認
  2. ファイルの送受信
  3. 簡易サーバーの構築
  4. バナーグラビング(情報収集)
  5. ネットワークデバッグ

覚えておきたいこと:

  • -l でリスンモード(待ち受け)
  • -p でポート番号を指定
  • -v で詳細表示
  • --ssl で暗号化
  • -k で接続を維持

ncatは「ネットワークのスイスアーミーナイフ」と呼ばれるだけあって、様々な用途に使えます。

特にネットワークのトラブルシューティングでは、ncatがあるかないかで作業効率が大きく変わります。

ぜひこの記事を参考に、ncatを使いこなしてネットワーク管理のスキルを向上させてくださいね!

コメント

タイトルとURLをコピーしました