ncコマンドは、TCP/UDPの接続確認、ポート待ち受け、簡易的な通信テスト、ファイル転送などに使えるネットワークツールです。Netcatと呼ばれることもあります。

「nc コマンド 使い方」「netcat 使い方」で調べている人向けに、まず覚えるべき基本操作を実用例ベースで整理します。

注意
ncはネットワーク診断に便利ですが、使い方によっては不正アクセスや迷惑なスキャンと見なされることがあります。自分の端末、検証用ラボ、管理権限のあるネットワークだけで使いましょう。

まず覚えるncコマンド早見表

やりたいことコマンド例
TCP接続を試すnc example.com 80
ポートが開いているか確認nc -vz example.com 443
ローカルで待ち受けるnc -l 12345
UDPで通信するnc -u 127.0.0.1 12345
受信側でファイルを保存nc -l 12345 > received.txt
送信側でファイルを送るnc 192.168.1.10 12345 < sample.txt

ncコマンドとは?

Netcat(nc)コマンドは、標準入力と標準出力をネットワーク接続につなげるためのツールです。

たとえば、次のような用途で使えます。

  • サーバーへTCP接続できるか確認する
  • 指定ポートで一時的に待ち受ける
  • TCP/UDPの通信テストをする
  • ファイルを簡易的に転送する
  • HTTPリクエストの中身を手で確認する

ただし、LinuxディストリビューションやmacOSによってncの実装が違います。代表的には、OpenBSD版のnc、GNU netcat、Nmapプロジェクトのncatなどがあります。オプションの挙動が少し違うので、迷ったら手元のman ncを確認してください。

ncコマンドのインストール方法

環境によっては最初から入っています。入っていない場合は、パッケージマネージャーで追加します。

UbuntuやDebian系Linux

Ubuntu/Debian系では、OpenBSD版のnetcatを入れることが多いです。

sudo apt update
sudo apt install netcat-openbsd

環境によってはnetcat-traditionalもありますが、初心者はまずnetcat-openbsdでよいです。

RHEL、Rocky Linux、AlmaLinux系

sudo dnf install nmap-ncat

この場合、ncの実体がNmapプロジェクトのncatになっていることがあります。

macOS

macOSにはncが標準で入っていることが多いです。

nc -h

ヘルプが表示されれば使えます。

ncコマンドの基本的な使い方

サーバーとして待ち受ける

ローカルでポート12345を待ち受けます。

nc -l 12345

別のターミナルから接続します。

nc 127.0.0.1 12345

片方のターミナルで入力した文字が、もう片方に表示されれば成功です。TCP通信の基本を確認する簡単な実験になります。

Webサーバーへ手で接続する

HTTPの動きを確認したい場合、80番ポートに接続して手でリクエストを送れます。

nc example.com 80

接続後、次のように入力します。

GET / HTTP/1.1
Host: example.com
Connection: close

空行を入れると、サーバーからレスポンスが返ってきます。

ncコマンドのオプション一覧

よく使うオプションだけ先に押さえます。

オプション意味
-l待ち受けモード
-v詳細表示
-zデータを送らずポート確認
-uUDPを使う
-w 秒数タイムアウトを指定
-p ポート送信元ポートを指定

-l:サーバーモード

nc -l 12345

OpenBSD版のncでは、待ち受け時に-pを付けずにnc -l 12345と書くことが多いです。古い記事ではnc -l -p 12345と書かれている場合もありますが、環境によって動かないことがあります。

-v:詳細表示

nc -v example.com 443

接続できたかどうかを見やすくします。

-z:ポート確認

nc -vz example.com 443

-zはデータを送らずに接続確認だけを行うオプションです。-vと組み合わせると、結果が分かりやすくなります。

実際の使い方例:ポート確認

単一ポートを確認する

nc -vz 192.168.1.1 80

Webサーバーや社内ツールに接続できないときに、アプリの問題なのか、ネットワークやファイアウォールの問題なのか切り分けるのに便利です。

複数ポートを確認する

nc -vz 192.168.1.1 80 443

環境によっては範囲指定もできます。

nc -vz 192.168.1.1 80-100

ただし、複数ポートへの確認はスキャンと見なされることがあります。自分が管理しているホストだけで行ってください。

実際の使い方例:簡易チャット

ncは標準入力と標準出力をそのままつなぐため、簡単なチャットのように動かせます。

受信側:

nc -l 12345

送信側:

nc 127.0.0.1 12345

同じ端末内で試すなら127.0.0.1で十分です。別端末から試す場合は、受信側端末のIPアドレスを指定します。

ファイル転送の方法

ncを使うと、簡単なファイル転送もできます。

受信側

先に受信側で待ち受けます。

nc -l 12345 > received.txt

送信側

送信側からファイルを送ります。

nc 192.168.1.10 12345 < sample.txt

この方法は暗号化されません。重要なファイルやインターネット越しの転送では、scprsync、SFTPなどを使うほうが安全です。

UDPで通信する

UDPのテストをしたい場合は、双方に-uを付けます。

受信側:

nc -u -l 12345

送信側:

nc -u 127.0.0.1 12345

UDPはTCPと違って接続確立がないため、アプリケーション側のログやパケットキャプチャと合わせて確認すると分かりやすいです。

やってはいけない使い方:シェルの待ち受け

古いNetcat記事では、-e /bin/bashのようにシェルをネットワーク越しに渡す例が紹介されることがあります。

しかし、これはバックドアそのものになり得る危険な使い方です。現在の環境では、セキュリティ上の理由で-eが使えない実装もあります。

リモート管理が必要な場合は、SSHを使いましょう。検証環境でリバースシェルの仕組みを学ぶ場合も、隔離されたラボで、許可された範囲に限定してください。

トラブルシューティング

1. 接続できない

  • IPアドレスやホスト名が正しいか確認する
  • 待ち受け側でnc -lが起動しているか確認する
  • ファイアウォールやセキュリティグループでポートが許可されているか確認する
  • TCPとUDPを取り違えていないか確認する

2. nc -l -p 12345が動かない

実装差の可能性があります。OpenBSD版では次のように書くほうが通りやすいです。

nc -l 12345

手元の環境ではman ncまたはnc -hでオプションを確認してください。

3. ファイル転送が終わらない

受信側が接続終了を待っている場合があります。送信側のコマンドが終了しているか、Ctrl+Cで終了する必要があるかを確認してください。

4. コマンド例が記事と違う

ncは実装差が大きいコマンドです。OpenBSD版、GNU版、Nmapのncatでオプションが違うことがあります。特に-l-p-e周辺は差が出やすいです。

まとめ

ncコマンドは、ネットワークの疎通確認や簡易的な通信テストに便利です。

  • nc -vz host portでポート確認
  • nc -l portで待ち受け
  • nc host portで接続
  • -uでUDP通信
  • ファイル転送は可能だが暗号化されない

まずはローカルホストで待ち受けと接続を試すと、TCP通信の基本がつかみやすいです。外部ホストに対して使う場合は、必ず許可された範囲で実行しましょう。

参考資料と関連トピックス