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の使用を検討する。
関連
- ncやtelnetがない環境での疎通確認は/dev/tcpを使ったポートの疎通確認 を参照
- 特定ポートを使用しているプロセスの確認は特定ポートの使用状況を確認する(lsof, ss, netstat) を参照
参考
\第一線のプログラマーの行動原理を学べる!/
