nc(Netcat)コマンド徹底解説|ポート指定で疎通確認する

nc(Netcat)コマンド徹底解説|ポート指定で疎通確認する

Amazonのアソシエイトとして、IT技術ライフは適格販売により収入を得ています。

記事の文字数:4232

本記事では、ネットワークデバッグツールとして知られる nc(Netcat)コマンドを、基礎から応用まで体系的に解説します。TCP/UDP通信のテスト方法、クライアント・サーバー間の通信手順、ポートスキャンや疎通確認などの調査用途、ファイル転送・HTTPリクエスト送信・簡易Webサーバー構築・リバースシェルといった高度なテクニックまで幅広く紹介。

ネットワークエンジニアやセキュリティ担当者であれば、一度は耳にし、必ず触れることになるncコマンド(Netcat)

その汎用性から、しばしば「TCP/IPのアーミーナイフ」と呼ばれ、ネットワーク調査、トラブルシューティング、デバッグ作業の多くをこれ一つで完結できます。ネットワークの基本であるTCP/UDP通信を極めてシンプルに扱えるため、通信プロトコルの学習や検証にも最適なツールです。

本記事では、ncコマンドの基本操作から、実務で役立つ応用テクニック、さらにはセキュリティ上の重要な注意点までを体系的に解説します。今日からNetcatを強力な武器として使いこなすための知識を提供します。

記事のポイント:ncコマンドで何ができるか

  • nc(Netcat) は、TCP/UDP通信を扱う万能ネットワークツールであり「TCP/IPのアーミーナイフ」と呼ばれる。
  • 疎通確認ポートスキャンクライアント・サーバー通信の模擬など、ネットワーク調査・検証に多用途で使える。
  • -l (Listen) とポート指定で簡易サーバーとして待ち受け、ポートへ接続することで双方向通信を簡単に再現。
  • -uUDP通信-4/-6IPv4/IPv6 を明示的に指定可能。
  • -z (Zero-I/O) と -v (Verbose) を組み合わせることで、高速かつ詳細なポートスキャン疎通確認を実現。
  • ファイル転送HTTPリクエスト送信簡易Webサーバー構築など、応用範囲が広い。
  • リバースシェルなど、強力な反面悪用される危険な機能もあるため、セキュリティの知識は不可欠。
  • ✅ 実装にはOpenBSD版Nmap版のNcatがあり、機能(例: SSL/TLS、-eオプションの有無)や安全性が異なる。

ncコマンドとは?「TCP/IPのアーミーナイフ」の正体

nc(Netcat) は、TCPまたはUDPの任意のポートに対して、データを読み書きするためのコマンドラインユーティリティです。

ネットワーク通信の「生」のデータを、標準入力・標準出力を介して簡単に操作できる点が最大の特徴です。このシンプルさゆえに、以下のような幅広い用途で活用されています。

  • TCP/UDP通信のデバッグ・動作テスト
  • ポートの死活監視やオープンポート調査 (ポートスキャン)
  • プロトコルの挙動検証 (HTTP/SMTP/Redisなど)
  • 簡易的なサーバー・クライアントの構築
  • ネットワーク経由のファイル転送

Netcatは主にOpenBSD・Ncat版が存在

ncコマンドには複数の実装が存在し、使用しているOSやディストリビューションによって機能やオプションが異なります。

実装名特徴注意点
OpenBSD版 ncセキュリティが重視され、シンプルな機能。危険になり得る-eオプション(外部コマンド実行)は削除されている。
Ncat (Nmapプロジェクト)より多機能で、SSL/TLSサポート、プロキシ、複数接続サポートなど拡張機能が豊富。一部システムでは ncat という名前で提供される。

どちらであるかは-h--versionオプションで確認します。

確認例
nc --version
Ncat: Version 7.92 ( https://nmap.org/ncat )

実務で利用する際は、必ず nc -hman nc で使用可能なオプションを確認しましょう。

本記事ではNcat版のncコマンドを前提に解説します。

ncコマンドの基本:クライアント/サーバー通信の確立

ncコマンドの核となるのは、「サーバーとして待ち受ける (Listen)」「クライアントとして接続する」 の2つのモードです。

サーバーとして待ち受ける(Listen: -l

-l (Listen) オプションとポート番号を指定することで、ncコマンドを簡易的なサーバーとして動作させ、クライアントからの接続を待ち受けます。

ポート1234で待ち受けを開始
nc -l 1234

接続が確立されると、サーバー側の標準入力から送られたデータがクライアントに、クライアントから送られたデータがサーバー側の標準出力に表示されます。

クライアントとして接続する

接続先(ホスト名またはIPアドレス)とポート番号を指定して接続します。

127.0.0.1 のポート1234へ接続
nc 127.0.0.1 1234

この操作により、サーバー・クライアント間でキーボード入力による双方向通信が可能です。これはTCP通信の基本挙動を理解する上で非常に役立ちます。

プロトコルの指定:TCP (デフォルト) と UDP (-u)

ncはデフォルトでTCP通信を行います。信頼性の低いUDP通信を行いたい場合は、-u オプションを追加します。

サーバ側:ポート5678で待ち受けを開始
nc -lu 5678
クライアント側:UDPで通信
nc -u 127.0.0.1 5678

ncコマンドの基本:ネットワーク調査、疎通確認

ncコマンドは、特にポートの疎通確認ポートスキャンの分野で、pingtelnet よりも能力を発揮します。

ポートスキャンはネットワークに負荷をかけたり、セキュリティ監視システムに不正アクセスの試行として検知される可能性があります。無許可のポートスキャンは違法行為となる場合もあるため、許可された環境や自身の検証環境(テスト環境)で実施してください。

ncコマンドによるポートの疎通確認と高速スキャン (-z, -v)

-z (Zero-I/O) オプションは、接続テストのみを行いデータの送受信をしません。これにより、スキャン用途での動作が効率的になります。また、-v (Verbose) オプションは、接続状況を詳細に表示し、診断に役立ちます。

ポートの疎通確認

80番ポートへの接続テストと詳細表示
nc -zv 192.168.1.1 80

接続が成功すれば Connected to 192.168.1.1:80. と表示されます。

ncコマンドの応用:ファイル転送や簡易Webサーバ

ncコマンドは、リダイレクトやパイプと組み合わせることで、さらに強力なツールへと変貌します。

ncコマンドのファイル転送

ネットワーク越しに、安全ではないものの、非常にシンプルなファイル転送が実現できます。

サーバー側(受信準備) 受信ファイル名を指定して待ち受けます。

Terminal window
nc -l 1234 > received.txt

クライアント側(送信) 送信ファイルを標準入力としてパイプします。

Terminal window
nc server.example.com 1234 < send.txt

ncコマンドで簡易Webサーバーの構築とHTTPリクエスト送信

簡易Webサーバー

単純なテキストをHTTPレスポンスとして返し、Webブラウザからアクセスを確認できます。

ncをサーバーとして起動し、"Hello World"を返す
echo -e "HTTP/1.1 200 OK\r\n\r\n<h1>Hello World</h1>" | nc -lk 8080

手動でのHTTPリクエスト送信

Webサーバーのヘッダ情報や挙動を手動で確認できます。

HTTP GETリクエストを送信
echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80

\r\n\r\nはヘッダと本文の区切りに必要です)

ncコマンド使用時のセキュリティ注意点(リバースシェルなど)

ncコマンドは便利なツールであると同時に、悪用された場合のセキュリティリスクも非常に高いことを理解しておく必要があります。

リバースシェル(Reverse Shell)の危険性

ncの機能(特にNcatなどの一部実装で有効な-eオプション)を利用すると、リモートから任意のコマンドを実行できるシェルを簡単に確立できてしまいます。これをリバースシェルと呼びます。

リバースシェルの例

攻撃者へ /bin/bash の入出力をリダイレクトする
nc -l -p 4444 -e /bin/bash

この機能は、悪意のあるユーザーが一度侵入したシステムでバックドアを確立するために悪用されることが非常に多いため、本番環境や非検証環境では絶対に実験しないでください。

セキュリティ上のベストプラクティス

  • リッスンポートの管理: -l オプションで待ち受けるポートは、不要であればすぐに閉じるか、ファイアウォールで厳密に制御する。
  • 権限の最小化: ncコマンドを実行するユーザーの権限を最小限に抑える。
  • 本番利用の制限: ネットワーク調査・検証用途以外で、本番環境のサービスとして常時稼働させるのは避ける。

ncコマンドの力を正しく理解し、安全に利用することが、ネットワークエンジニアとしての信頼性を高める上で極めて重要です。

ncコマンド オプションまとめ

紹介したオプションを下記表にまとめました。

オプション説明実行例
-lサーバーモードでリッスンするnc -l 8080
-uUDPモードで通信するnc -u 192.168.1.10 5000
-v冗長モードで詳細情報を表示するnc -vz 192.168.1.1 22
-zZero-I/Oモード(接続できるかのみ確認)nc -zv 192.168.1.1 80
-kクライアント切断後もリッスンを継続するnc -lk 8080
-eコマンドを実行して入出力を転送(※OpenBSD版は無効、安全な検証環境のみで使用)nc -l -p 4444 -e /bin/bash

まとめ:ncコマンドをネットワーク調査の強力な武器に

ncコマンドは、そのシンプルさからは想像できないほどの強力な機能を秘めており、ネットワークに関わるすべての人にとって必携のツールです。

一方でncコマンドは非常に強力で便利な反面、使い方次第で大きなリスクとなる場合もあります。

  • リッスンポートを不用意に開けない
  • 権限管理を徹底する(特にシェル転送は危険)
  • 本番環境での利用は最小限にする
  • 通信ログやFWの設定と併せて運用する

ncを理解し正しく安全に使うことで、ネットワーク開発や調査に大きく役立てられます。 「TCP/IPのアーミーナイフ」の異名にふさわしく、疎通確認からポートスキャン、ファイル転送、簡易サーバー構築まで、その応用範囲は無限大です。

本記事で解説した基本的な使い方と応用テクニックを習得し、日々の業務でのネットワーク調査やデバッグ作業を効率化していきましょう。


Linuxユーザにお勧めの本


以上で本記事の解説を終わります。
よいITライフを!
Scroll to Top