nc -zv でポートの疎通確認をしたい

ポートの疎通確認にはnc(netcat)の-zvオプションを組み合わせるのが便利である。

  • -z: データを送信せずに接続だけを試みる(ゼロI/Oモード)
  • -v: 接続結果を詳細に出力する(verbose)

基本的な使い方

nc -zv [ホスト] [ポート]

接続できる場合はsucceeded!が表示される。

$ nc -zv 8.8.8.8 53
Connection to 8.8.8.8 53 port [tcp/*] succeeded!

接続できない場合はエラーが表示され、終了コード1が返る。

$ nc -zv 8.8.8.8 9999
nc: connect to 8.8.8.8 port 9999 (tcp) failed: Connection refused

タイムアウトを設定する

-wオプションで待機時間の上限を秒単位で設定できる。ファイアウォールでパケットが遮断されている場合など、接続応答が返らないケースで有効である。

$ nc -zvw 3 8.8.8.8 9999
nc: connect to 8.8.8.8 port 9999 (tcp) timed out: Operation now in progress

複数のポートをまとめて確認する

スペース区切りで複数のポートを一度に確認できる。

$ nc -zv google.com 80 443
Connection to google.com (142.251.23.102) 80 port [tcp/*] succeeded!
Connection to google.com (142.251.23.102) 443 port [tcp/*] succeeded!

UDP の疎通確認をする

-uオプションを追加するとUDPで確認できる。

$ nc -zvu 8.8.8.8 53
Connection to 8.8.8.8 53 port [udp/*] succeeded!

UDPはコネクションレスプロトコルのため、ポートが閉じていてもsucceeded!と表示されることがある。TCPのように3ウェイハンドシェイクで接続を確立するわけではなく、パケットを送信したことしか確認できないためである。信頼性の高いUDPスキャンが必要な場合はnmapの使用を検討する。

関連

参考