0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

 Nmapを使って、ポートが空いているかを確認する方法を紹介する。netcatを使う方法もあるが、UDPではうまく動作しなかったので、Nmapを使うことを推奨する(参考)。

動作確認環境

  • Ubuntu 20.04

方法

 Nmapは、TCP/UDPのポートスキャンができるコマンド。下記でNMAPインストールする。

sudu apt update
sudo apt install nmap

 Nmapは、リターンコードでは接続の有無を確認できないので、戻り値のテキストをgrepすることにより接続確認する。状態は以下が定義されている。詳細はNmapマニュアルを参照。

状態 説明
open 調査対象マシン上のアプリケーションがそのポート上で接続/パケットを待ち受けている状態。
filtered ファイアウォールやフィルタなどのネットワーク上の障壁でポートが遮られている状態。ポートが開いているか閉じているかをNmapが判断できないことを意味する。
closed Closed(閉じた)ポートには、待ち受け状態のアプリケーションは何もない状態。これらはいつでも開放することが可能である。
unfiltered ポートがNmapのプローブには応答するが、開いているか閉じているかをNmapが判別できない状態。

ポートの状態がopen|filteredやclosed|filteredのように、2つの状態の組み合わせそのどちらがポートの状態を表しているかをNmapが判断できない場合である。

TCPの場合

nmap -sT -p {port_no} {ip_address}
  • {port_no}: ポート番号
  • {ip_address}: IPアドレス

接続可能な場合の応答

Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-09 08:38 JST
Nmap scan report for {ip_address}
Host is up (0.00034s latency).

PORT      STATE SERVICE
{port_no}/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds

接続不可能な場合の応答

Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-09 08:38 JST
Nmap scan report for {ip_address}
Host is up (0.00033s latency).

PORT      STATE  SERVICE
{port_no}/tcp closed unknown

Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds

リターンコード取得するためのシェルスクリプト

下記のようにすると、接続可能(open)な場合は、リターンコード=0となる。

nmap -sT -p {port_no} {ip_address} | grep open

接続されるまで待ち続けるスクリプト

while [ ! "$(nmap -sT -p {port_no} {ip_address} | grep open)" ]; do echo 'Waiting...'; sleep 1s; done

UDPの場合

TCPの場合と同様。オプションが、TからUに変わる。

nmap -sU -p {port_no} {ip_address}
  • {port_no}: ポート番号
  • {ip_address}: IPアドレス

接続可能(ポート遮断あり)な場合の応答

Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-09 08:47 JST
Nmap scan report for {ip_address}
Host is up (0.000037s latency).

PORT      STATE         SERVICE
{port_no}/udp open|filtered unknown
MAC Address: XX:XX:XX:XX:XX:XX (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.54 seconds

接続不可能な場合の応答

Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-09 08:47 JST
Nmap scan report {ip_address}
Host is up (0.000047s latency).

PORT      STATE  SERVICE
{port_no}/udp closed unknown
MAC Address: XX:XX:XX:XX:XX:XX (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.36 seconds

リターンコード取得するためのシェルスクリプト

下記のようにすると、接続可能(open)な場合は、リターンコード=0となる。

nmap -sU -p {port_no} {ip_address} | grep open

接続されるまで待ち続けるスクリプト

while [ ! "$(nmap -sU -p {port_no} {ip_address} | grep open)" ]; do echo 'Waiting...'; sleep 1s; done

まとめ

 Nmapを使うことにより、TCP/UDPのポートへの接続確認を行うことができた。grepと組み合わせることによりリターンコードを取得してシステムに組み込める形にして使うのが良い。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?