Linuxで学ぶ Netcat / Ncat / ncコマンド(主要オプション解説つき)

ネットワーク調査やセキュリティ診断に欠かせない
Netcat / Ncat / ncコマンド

Netcat系ツール(Netcat / Ncat / ncコマンド)は、「ネットワークのスイスアーミーナイフ」とも呼ばれるほど多機能なツールです。

本記事では、Netcat・Ncatの特徴からncコマンドの使い方、オプションの使用例まで、具体的なコマンドを交えながら解説しています。

目次

Netcat・Ncat・ncコマンドとは

Netcat(コマンド名:nc。Nmap付属の互換実装Ncatを含む。)は、〝ネットワークのスイスアーミーナイフ〟とも称されるほど汎用性の高いコマンドラインツールです。TCPまたはUDPプロトコルを用いて、任意のポートとの通信を行うことができ、ポートスキャン、バナー取得、ファイル転送、リモートシェルの取得など、幅広い用途で利用されます。

Netcat・Ncat・ncコマンドの違い

Netcatは、*Hobbit*(本名不明)によって開発され、1995年にバージョン1.00、1996年にバージョン1.10が公開されました。その後、オリジナル版の開発は停止しますが、Netcatの有用性からいくつかの派生版が登場します。

オリジナル版Netcat*Hobbit*(本名不明)によって開発。
派生版GNU Netcatオリジナル版との互換性を重視。
OpenBSD Netcatセキュリティ機能が強化され、TLSやプロキシ対応など追加機能が豊富。
Ncat(Nmap版)Nmapプロジェクトによる強化版で、SSL/TLS、認証、接続中継などの高度な機能を持つ。

特にNmapプロジェクトが開発したNcatは、ポートスキャンの一環でNetcatの機能を活かしたいというニーズに応える形で進化しており、現在でも多くのセキュリティ現場で利用されています。

Netcatはnetcatまたはncコマンド、Ncatはncatコマンドを使用して実行します。ただし、RHEL系ディストリビューションではncコマンドがNcatへのリンクとなっていることがあるため、ncコマンドでもNcatが起動します。

用語の整理
  • Netcat:*Hobbit*によって開発されたオリジナル版やそこから派生したGNU版、OpenBSD版がある。
  • Ncat:NmapプロジェクトによるNetcatの派生版。
  • ncコマンド:Netcat系ツールのコマンド名。

Netcat系ツール(Netcat/Ncat)の特徴

Netcat系ツール(Netcat/Ncat)は「ネットワークのスイスアーミーナイフ」「TCP/IPのアーミーナイフ」と称されるほど多機能で、ポートスキャン、リモートシェルの起動、ファイル転送など多様な用途に対応しています。

主な機能
  • TCP/UDPクライアントとしての通信機能
  • TCP/UDPサーバーとしてのリッスン機能
  • ファイル転送機能
  • ポートスキャン/ポートの疎通確認
  • パイプやリダイレクトを使った柔軟なデータ処理
  • 接続のタイムアウト設定
  • スクリプトと容易に組み合わせることが可能(自動化に最適)
  • 他のツールと連携して簡易プロキシとして使用可能

最大の特徴は、接続元・接続先の両方の役割を担える点にあります。例えば、サーバー側では「待ち受け」としてLISTENモードを有効にし、クライアント側からの接続を受け入れることができます。また、クライアント側として特定のIPアドレスとポートに対して能動的に接続し、データの送受信を行うことも可能です。

Netcat・Ncatのインストール

多くのLinuxディストリビューションでは、Netcat系ツールを公式リポジトリに収録しており、パッケージマネージャ(APT、DNFなど)を使ってインストールできます。

各ディストリビューションが提供しているNetcat系ツール

前述の通り、Netcatには派生版があり、ディストリビューションによって提供している実装は異なります。

ディストリビューション公式リポジトリに収録されているNetcat系ツール標準インストール
Kali Linux(2025.1)オリジナル(Hobbit)版
OpenBSD Netcat
Ncat(Nmap版)
オリジナル(Hobbit)版
Ubuntu Server(24.04.2 LTS)オリジナル(Hobbit)版
OpenBSD Netcat
Ncat(Nmap版)
OpenBSD Netcat
AlmaLinux(9.5)OpenBSD Netcat
Ncat(Nmap版)
Ncat(Nmap版)
Rocky Linux(9.5)OpenBSD Netcat
Ncat(Nmap版)
Ncat(Nmap版)

主要なLinuxディストリビューションでは、Netcat系ツールが標準でインストール済み(*)です。ただし、ディストリビューションによって実装(オリジナル版、OpenBSD版、Nmap版)が異なります。* 最小構成でのインストール時など、含まれない場合もあります。

Kali Linux(2025.1)

$ apt search netcat
〜 省略 〜
ncat/kali-rolling 7.95+dfsg-1kali1 amd64
  NMAP netcat reimplementation

netcat-openbsd/kali-rolling 1.228-1 amd64
  TCP/IP swiss army knife

netcat-traditional/kali-rolling,now 1.10-50 amd64 [インストール済み]
  TCP/IP swiss army knife
〜 省略 〜

Kali Linuxでは、「Ncat(Nmap版)」「OpenBSD Netcat」「オリジナル(Hobbit)版」が公式リポジトリに含まれており、オリジナル(Hobbit)版が標準インストールされています。

Ubuntu Server(24.04.2 LTS)

$ apt search netcat
〜 省略 〜
ncat/noble 7.94+git20230807.3be01efb1+dfsg-3build2 amd64
  NMAP netcat reimplementation

netcat-openbsd/noble,now 1.226-1ubuntu2 amd64 [installed,automatic]
  TCP/IP swiss army knife

netcat-traditional/noble 1.10-48 amd64
  TCP/IP swiss army knife
〜 省略 〜

Ubuntu Serverでは、「Ncat(Nmap版)」「OpenBSD Netcat」「オリジナル(Hobbit)版」が公式リポジトリに含まれており、OpenBSD Netcatが標準インストールされています。

AlmaLinux(9.5)

# dnf search netcat
〜 省略 〜
netcat.x86_64 : OpenBSD netcat to read and write data across connections using TCP or UDP
nmap-ncat.x86_64 : Nmap's Netcat replacement
〜 省略 〜

# dnf list installed *ncat*
インストール済みパッケージ
nmap-ncat.x86_64            3:7.92-3.el9            @appstream
# dnf list installed *netcat*
エラー: 表示するための一致したパッケージはありません

AlmaLinuxでは、「OpenBSD Netcat」「Ncat(Nmap版)」が公式リポジトリに含まれており、Ncat(Nmap版)が標準インストールされています。

Rocky Linux(9.5)

# dnf search netcat
〜 省略 〜
netcat.x86_64 : OpenBSD netcat to read and write data across connections using TCP or UDP
nmap-ncat.x86_64 : Nmap's Netcat replacement
〜 省略 〜

# dnf list installed *ncat*
インストール済みパッケージ
nmap-ncat.x86_64            3:7.92-3.el9            @appstream

# dnf list installed *netcat*
エラー: 表示するための一致したパッケージはありません

Rocky Linuxでは、AlmaLinux同様、「OpenBSD Netcat」「Ncat(Nmap版)」が公式リポジトリに含まれており、Ncat(Nmap版)が標準インストールされています。

インストール時の注意事項

  • Netcatの実装(提供元)やバージョンの違いによって、動作やオプションに差異があります。
  • 複数のNetcat実装を同一ホストにインストールすると、ncコマンドが意図しない実装(提供元)を参照する可能性があります。command -v ncやnc -hで実装(提供元)を確認してください。

この記事で使用する環境

この記事では、仮想化ソフトウェア(VirtualBox 7.1.8)を使用してWindows上に仮想環境を構築し、仮想ネットワーク内でncコマンド(Netcat・Ncat)を実行しています。

  • 仮想マシン1(Kali Linux 2025.1)
    • 192.168.10.11
    • オリジナル(Hobbit)版 Netcat v1.10
  • 仮想マシン2(Metasploitable2)
    • 192.168.10.101
    • ポートスキャン用(ターゲットマシン)
  • 仮想マシン3(Ubuntu Server 24.04.2 LTS)
    • 192.168.10.102
    • OpenBSD Netcat v1.226

本記事では、TCPポート12345を用いた検証を実施しており、各OSのファイアウォールにおいて同ポートの通信を許可しています。

また、ポートスキャンのターゲットマシンには、Metasploitable2(やられアプリ)を使用します。

ncコマンド(Netcat・Ncat)の使い方

Netcat・Ncatは、「ネットワークのスイスアーミーナイフ」とも呼ばれるほど多用途に使えるツールであり、その基本的な使い方を理解することは、ネットワーク調査・セキュリティ診断の第一歩となります。

基本的な使い方

コマンド構文

# 接続モード(クライアント側・送信側)
$ nc [オプション] [ホスト名 or IPアドレス] [ポート番号]

# リッスン(待ち受け)モード(サーバー側・受信側)
$ nc -l [オプション] -p [ポート番号]

# ヘルプ
$ nc -h

ncコマンド(Netcat・Ncat)のもっとも基本的な使い方は、TCPポートへの接続確認です。Telnetに近い動作ですが、より汎用性があります。

$ nc 接続先IPアドレス 80

このコマンドは、接続先IPアドレスのTCPポート80に接続を試みます。接続に成功すると、そのまま標準入力が通るため、手動でHTTPリクエストを送るなどの操作が可能です。

また、Netcat・Ncatにはリッスン(待ち受け)モードもあり、-lオプションを用いてポートを待ち受けることができます。以下の例では、ポート12345でTCP接続を受け付けます。

$ nc -l -p 12345
$ nc -l 12345      # -pは省略可能

この状態で、別の端末から同じポート(12345)に対して接続することで、Netcat・Ncatを用いた双方向通信が可能になります。

Kali Linuxでリッスン(待ち受け)モードを使用する場合、オリジナル版Netcatの仕様により-pオプションは必須です。

基本的な使い方として重要なのは、「接続する側」と「待ち受ける側」を明確に理解することです。接続する側では、対象ホストとポートを指定し、待ち受ける側では-lオプションでポートを開きます。Netcat・NcatはTCP/UDPの両方に対応していますが、デフォルトではTCPで通信を行います。UDP通信を行う場合は、-uオプションを使用します。

ncコマンドのオプション

ncコマンド(Netcat・Ncat)には多くのオプションがあり、使用目的に応じて細かい制御が可能です。ここでは、代表的なオプションについて解説します。

  • -l:リッスンモード(待ち受けモード)
  • -u:UDPモード
  • -v:詳細を出力
  • -z:ゼロ I/O モード(ポートスキャンに使用)
  • -w:タイムアウト時間(単位:秒)
  • -e:コマンド実行
  • -n:名前解決をしない
  • -o:ログファイルに保存

-l:リッスンモード(待ち受けモード)

# TCPポート12345で接続を待ち受け
$ nc -l -p 12345    # ポート番号を-pオプションで指定
$ nc -l 12345       # ポート番号をコマンドラインの引数で指定

まず、-lオプションは「listen」、すなわち受信側(サーバー)として動作させる際に使用します。このオプションを指定すると、サーバーのように動作し、クライアントからの接続を待ち受けます。

ポート番号の指定方法は、実装(提供元)により異なります。

オリジナル(Hobbit)版-pオプションのみ対応
OpenBSD Netcat-pオプション、コマンドライン引数の両方に対応
Ncat(Nmap版)-pオプション、コマンドライン引数の両方に対応

-u:UDPモード

# UDPポート12345に接続
$ nc -u 接続先IPアドレス 12345

Netcat・NcatはデフォルトでTCPプロトコルを使用しますが、-uオプションを指定することでUDP通信にも対応可能です。これは、DNSやSNMPといったUDPプロトコルの疎通確認に使用します。

-v:詳細を出力

$ nc -v 接続先IPアドレス 80

-vオプションは「verbose」、すなわち冗長モードでの出力を意味します。このオプションを指定することで、接続成功・失敗、名前解決結果などの詳細な情報が表示され、トラブルシューティングに役立ちます。

-z:ゼロ I/O モード(ポートスキャンに使用)

# ポートスキャン(1から1024番までのTCPポートの開閉状態を調査)
$ nc -vz 接続先IPアドレス 1-1024

-zオプションは「ゼロ I/O モード」と呼ばれ、データ送受信を行わずに接続確認だけを行います。

-w:タイムアウト時間(単位:秒)

# 5秒間接続を試み、接続できない場合は終了する
$ nc -w 5 接続先IPアドレス 80

-wオプションを使用して、接続タイムアウトの時間(秒)を指定します。指定した時間内に接続できない場合、接続を終了します。

-e:コマンド実行

# TCPポート12345で接続を待ち、接続があった際に/bin/bashを起動
$ nc -l -p 12345 -e /bin/bash

-eオプションを使用すると、接続が完了した時点で指定のコマンドを自動実行します。このオプションはバインドシェルやリバースシェルを作成する際に使用されますが、セキュリティ上のリスクも伴うため、本番環境での使用は推奨されていません。

OpenBSD Netcatは、セキュリティ上の理由から-eオプションが削除されています。

-n:名前解決をしない

# ホスト名の名前解決をしない
$ nc -v -n 接続先IPアドレス 80

-nオプションは、ホスト名の名前解決を行わず、IPアドレスで接続を試みます。

-o:ログファイルに保存

# 通信内容をlog.txtに出力
$ nc -v -o log.txt 接続先IPアドレス 80

-oオプションは、指定したファイルに通信の内容を出力します。

具体的な活用事例

Netcat・Ncatは、ネットワーク通信を直接操作できるツールとして、ポートの疎通確認、データ送受信、ポートスキャン、バナー取得などに用いられます。

ここでは、実務でよく用いられる代表的な使用例について、具体的なncコマンドを交えながら解説します。

  • ポートの疎通確認
  • チャット機能
  • UDP通信
  • ポートスキャン
  • ファイル転送
  • バナーグラビング(サービス識別)

ポートの疎通確認

ncコマンド(Netcat・Ncat)を使用した疎通確認は、特定のポートで対象ホストがリッスン状態にあるか、通信可能であるかを確認する目的で行います。

Kali Linuxで実行(接続先:Ubuntu Server)

$ nc -vz [接続先IPアドレス] [ポート番号]

# 例)接続成功の場合
$ nc -vz 192.168.10.102 22
Ubuntu-Server [192.168.10.102] 22 (ssh) open

# 例)接続失敗の場合
$ nc -vz 192.168.10.102 23
Ubuntu-Server [192.168.10.102] 23 (telnet) : Connection timed out
  • -v:詳細モード(verbose)
  • -z:ゼロI/Oモード(実際のデータ送信は行わず、接続可否のみを確認)

この方法は、ネットワーク障害やセキュリティ診断において利用されます。例えば、ネットワーク構成変更後や新規サーバー構築時の通信確認において、「pingは通るがアプリケーションに接続できない」という状況に直面することがあります。そうしたケースでは、Netcat・Ncatを使ってポート単位で疎通確認することがトラブルシューティングの第一歩になります。

pingはICMPプロトコルを使用した通信確認であり、ポートの疎通確認には使用できません。

ツール使用プロトコル使用用途
pingICMPホストの生存確認
Netcat・NcatTCP/UDPポートの疎通確認

チャット機能

ncコマンド(Netcat・Ncat)を使用すると、シンプルなチャット環境を簡単に構築できます。片方の端末を「サーバー」、もう片方を「クライアント」と見立てて、サーバー側で待ち受けポートを開き、クライアント側から接続を試みます。

STEP
まず、サーバー側では次のように入力します。

Ubuntu Server(サーバー側)

$ nc -l -p [ポート番号]

# TCPポート12345で待機(サーバー側)
$ nc -l -p 12345

-lオプションは「listen(待ち受け)」を意味し、TCPポート12345で接続を待機します。(なお、待機中は何も表示されません。)

STEP
次に、クライアント側では以下のように入力します。

Kali Linux(クライアント側)

$ nc [サーバーのIPアドレス] [ポート番号]

# クライアント側
$ nc 192.168.10.102 12345

この接続が確立されると、標準入力と標準出力を通じて両端末間で文字列を送受信できるようになります。つまり、片方が送信したテキストは、もう一方の端末にリアルタイムで表示され、まるでチャットのような操作感が得られます。

  • クライアント側で「Hello」と入力すると、サーバー側に「Hello」と表示される。
  • サーバー側で「Thanks」と入力すると、クライアント側に「Thanks」と表示される。

ncコマンド(Netcat・Ncat)のチャット機能は便利ですが、セキュリティ面で以下の点に注意する必要があります。

リスク要因説明対策
暗号化なし通信内容が平文で送信されるため、盗聴のリスクがあるVPN内での使用、もしくはncat --sslを使用
認証なし誰でも接続可能であり、不正アクセスの危険があるファイアウォールなどでIP制限をかける
ログに残らない通信履歴が残らないため、証跡管理が困難-oオプションやteeコマンドなどでログを取得する

UDP通信

Netcat・Ncatは、TCPだけでなくUDPプロトコルにも対応しており、UDP通信の動作テストや疎通確認を行う際にも有用です。

UDPはコネクションレス型の通信プロトコルであり、相手の応答を待たずにデータを送信するため、リアルタイム性が重視されるVoIPやDNSなどのプロトコルで広く使用されています。

ncコマンドでUDP通信を行うには、-uオプションを付けてコマンドを実行します。

# サーバー側(受信側)
$ nc -u -l [ポート番号]

# クライアント側(送信側)
$ nc -u [接続先IPアドレス] [ポート番号]

UDPはコネクションレスであるため、以下の制限があります。

  • 通信の確立・切断という概念がない
  • 応答が返ってくる保証がない
  • パケットロス時の再送処理がない

ポートスキャン

Netcat・Ncatは、ネットワーク診断ツールの機能も有しており、特にポートスキャン機能は対象ホストの開いているポートを特定する際に使用します。攻撃者によって悪用されることもありますが、正規の管理目的でも、サービス稼働状況の把握や脆弱性評価の初期調査に役立ちます。

Netcat・Ncatを使用したポートスキャンは、以下のコマンドで実行できます。

Kali Linuxでポートスキャンを実行(対象ホスト:Metasploitable2)

$ nc -vz [対象ホストのIPアドレス] [ポート番号]

# Kali LinuxからMetasploitable2にポートスキャンを実行
$ nc -vz 192.168.10.101 1-1024
Metasploitable2 [192.168.10.101] 514 (shell) open
Metasploitable2 [192.168.10.101] 513 (login) open
Metasploitable2 [192.168.10.101] 512 (exec) open
Metasploitable2 [192.168.10.101] 445 (microsoft-ds) open
Metasploitable2 [192.168.10.101] 139 (netbios-ssn) open
Metasploitable2 [192.168.10.101] 111 (sunrpc) open
Metasploitable2 [192.168.10.101] 80 (http) open
Metasploitable2 [192.168.10.101] 53 (domain) open
Metasploitable2 [192.168.10.101] 25 (smtp) open
Metasploitable2 [192.168.10.101] 23 (telnet) open
Metasploitable2 [192.168.10.101] 22 (ssh) open
Metasploitable2 [192.168.10.101] 21 (ftp) open
  • -z:ゼロI/Oモード(データ送信は行わずに接続確認だけを行う)
  • -v:冗長モード(詳細情報を出力)
  • 1-1024:ポート番号は範囲指定可能

この例では、対象ホスト(192.168.10.101)のTCPポート1から1024までをスキャンしています。

第三者の端末に対してポートスキャンを実施することは、不正アクセス禁止法などの法令に抵触する可能性があります。必ず許可を得た環境でのみ実施してください。

Netcat・Ncatのポートスキャンは、あくまで簡易的なスキャン手法であり、高速化やフィンガープリント機能などは備えていません。そのため、Nmapのような専用スキャナに比べて機能面では限定されますが、環境によってはNetcat・Ncatのみが利用可能なケースもあるため、選択肢として習得しておく価値があります。

ファイル転送

Netcat・Ncatを使えば、TCP通信を用いたファイル転送が容易に実現できます。特に、SSHやFTPといった専用プロトコルを用意できない環境下で、一時的にファイルを送受信する手段として用いられるケースがあります。

ただし、Netcat・Ncat自体には暗号化機能がないため、機密性の高いデータを扱う場合には別途トンネリングやVPNとの併用が必要です。

ファイル転送の基本的な構成は、受信側がリッスンモードで待ち受け、送信側が接続してデータを送信するという単純な構図です。

STEP
まず、受信側がファイルを受け取るために、次のようにコマンドを実行します。

Ubuntu Server(受信側)

$ nc -l -p 12345 > received_file.txt

このコマンドでは、TCPポート12345で接続を待ち受け、受信した内容を received_file.txt に保存します。

STEP
受信側の待機状態を確立したうえで、送信側から次のようにコマンドを実行します。

Kali Linux(送信側)

$ nc 192.168.10.102 12345 < send_file.txt

このコマンドにより、send_file.txt の内容をNetcat・Ncat経由で192.168.10.102に送信します。

なお、待ち受け側がファイルを送信することもできます。(上記とは逆)

# 待ち受け側(ファイル送信)
$ nc -l -p 12345 < send_file.txt

# 接続側(ファイル受信)
$ nc 192.168.10.102 12345 > received_file.txt

バナーグラビング(サービス識別)

バナーグラビングとは、対象ポートに接続してサービスの情報(バナー)を取得する手法です。

Kali Linuxで実行(対象ホスト:Metasploitable2)

$ nc 192.168.10.101 22

-- 実行結果(レスポンス) --
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1

Kali Linuxで実行(対象ホスト:Metasploitable2)

$ nc 192.168.10.101 80
GET / HTTP/1.1
Host: 192.168.10.101
Connection: close

-- 実行結果(レスポンス) --
HTTP/1.1 200 OK
Date: Fri, 06 Jun 2025 09:23:33 GMT
Server: Apache/2.2.8 (Ubuntu) DAV/2
X-Powered-By: PHP/5.2.4-2ubuntu5.10
Content-Length: 891
Connection: close
Content-Type: text/html
〜 以下、省略 〜

HTTPリクエストを手動で入力することで、レスポンスからWebサーバーの種類やバージョンを確認することができます。

デフォラボ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次