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 | データを送らずポート確認 |
-u | UDPを使う |
-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
この方法は暗号化されません。重要なファイルやインターネット越しの転送では、scp、rsync、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通信の基本がつかみやすいです。外部ホストに対して使う場合は、必ず許可された範囲で実行しましょう。