Linux / コマンド / nc - TCP・UDP 接続とポート確認

nc(Netcat)は、TCP(Transmission Control Protocol)やUDP(User Datagram Protocol)で通信し、データを送受信する汎用ツールです。ポートに接続できるかを確認する用途にも使えます。

LinuxディストリビューションにはOpenBSD netcat、Nmap Ncatなど、異なる実装がncという名前でインストールされることがあります。-zはアプリケーションデータを送らずに接続を試み、-vは診断メッセージを表示します。一部のオプションや受信モードの文法は実装によって異なります。

基本的な文法

nc [オプション] ホスト ポート

インストールされている実装とオプションは、配布版によって異なる場合があります。man ncで現在のシステムの説明を確認してください。

使用例

ローカルSSHポートのチェック

自身のコンピュータのTCP 22番ポートが接続を受け入れているか確認します。

nc -vz 127.0.0.1 22

接続時間の制限

応答のないローカルポートで長時間待たないように制限します。

nc -w 3 -vz 127.0.0.1 80

直接接続

自分のコンピュータのサービスが送るデータを観察します。Ctrl+Cで終了します。

nc -v 127.0.0.1 22

ポート接続検査結果の解釈

nc -vzは、アプリケーションのデータを送り込まずにTCP接続を試みる指定です。接続のためのネットワークパケットは送信します。example.comは説明用ドメインなので、実際には調査してよい宛先に置き換えます。出力文言や対応オプションは実装ごとに異なります。

nc -vz example.com 443

接続成功時に標準エラーへ表示される診断メッセージの例:

Connection to example.com 443 port [tcp/https] succeeded!

成功表示は、その時点でTCP接続を受け付けたことを示します。TLS(Transport Layer Security)による暗号化や証明書、HTTPの応答まで正常と判断できるわけではありません。HTTPやHTTPSの確認には、curlによるリクエストと応答の確認を使います。拒否やタイムアウトの場合は、対象側のssで確認する待ち受け状態、ファイアウォール、経路も照合してください。

主なオプションと形式

オプション・形式 説明
-z アプリケーションデータを送信せずに接続可否を確認します。
-v 診断出力を詳細に表示します。
-w 秒 接続や無通信時の待ち時間を指定します。OpenBSD版では-lの接続待ちに-wは効きません。
-u UDPモードで使用します。
-l 接続を待つ受信モードです。実装ごとの文法を確認してください。

使用する際の注意点

ポートが開いているということは、アプリケーションが正常に動作している、または認証が安全であることを保証するものではありません。UDPにはTCPのような接続確立の応答がないため、-zの成功表示だけで宛先が受信できたと判断しないでください。UDPを調べる場合は、受信側のログや実際のアプリケーションの応答も確認します。外部ホストのチェックは、所有者の許可を得た範囲内で行ってください。nc -hで現在の実装のオプションを確認します。

よくある質問

ncとncatは同じツールですか?

どちらもNetcat系ですが、実装が異なる場合があります。インストールされているパッケージとnc -hの出力を確認して、オプションを区別してください。

公式ドキュメント

オプションの正確な動作と実装ごとの差は、nc関連の公式文書で確認できます。