Nmap でホスト発見を行う

NmapBeginner
オンラインで実践に進む

はじめに

この実験では、Nmap を使用したホスト検出方法を学ぶことを目的とします。この実験では、192.168.1.0/24 ネットワークに対して -sn オプションでポートスキャンを無効にした ping スキャンを実行したり、TCP SYN ping と ACK ping を使用したり、異なる ping を組み合わせたりするなど、様々な Nmap コマンドを用いたホスト検出方法を扱います。また、Xfce ターミナルでライブホストを表示する方法も示します。さらに、localhost アドレスに対してポートスキャンを無効にした ping スキャンを実行する方法も示します。

Nmap で Ping スキャンを実行する

このステップでは、Nmap を使用してネットワーク上のアクティブなホストを識別するための基本的な ping スキャンを実行します。ping スキャン(ホスト検出とも呼ばれます)は、どのホストがオンラインであるかを判断するための基本的なテクニックです。Nmap は、指定された範囲内の各 IP アドレスに様々なプローブを送信し、応答を分析してアクティブなホストを識別します。Nmap の -sn オプションはポートスキャンを無効にするため、フルポートスキャンよりもスキャンが高速で、侵入性が低くなります。

192.168.1.0/24 は CIDR 表記でネットワークを表します。/24 は IP アドレスの先頭の 24 ビットが固定され、ネットワークを定義し、残りの 8 ビットがそのネットワーク内のホストアドレスに使用されることを示します。これは、192.168.1.1 から 192.168.1.254 までの IP アドレスの範囲に相当します。

192.168.1.0/24 ネットワークに対して ping スキャンを実行するには、ターミナルを開き、以下のコマンドを実行します。

sudo nmap -sn 192.168.1.0/24

このコマンドは、Nmap に 192.168.1.0/24 ネットワーク内のすべての IP アドレスに対して ping スキャンを実行するよう指示します。sudo コマンドは、Nmap が特定の種類のネットワークパケットを送信するために、しばしば昇格した権限を必要とするため使用されます。

この実験環境では、192.168.1.0/24 ネットワークにアクティブなホストは存在しないため、次の様な出力が出力されます。

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:49 CST

スキャンは、ホストレポートが表示されないまま完了します。これは、このネットワーク範囲で ping プローブに応答したホストがないことを示します。実際の状況でアクティブなホストが存在する場合、次の様な出力が出力されます。

Starting Nmap 7.XX ( https://nmap.org ) at YYYY-MM-DD HH:MM ZZZ
Nmap scan report for 192.168.1.1
Host is up (0.000XXs latency).
Nmap scan report for 192.168.1.10
Host is up (0.002XXs latency).
Nmap done: 256 IP addresses (2 hosts up) scanned in 2.XX seconds

次に、localhost アドレス (127.0.0.1) に対して ping スキャンを実行し、ポートスキャンを無効にします。これは、フルポートスキャンを開始せずに、ホスト検出専用に -sn オプションを使用する方法を示しています。これは、ホストが生きているかどうかだけ確認したい場合や、潜在的にノイズが多いまたは時間がかかるポートスキャンを回避したい場合に便利です。

127.0.0.1 はループバックアドレスであり、localhost とも呼ばれます。常に現在のマシンを参照します。localhost に ping することは、ネットワークインターフェースが正常に機能していることを確認するための簡単な方法です。

localhost に対してポートスキャンを無効にした ping スキャンを実行するには、ターミナルで以下のコマンドを実行します。

sudo nmap -sn 127.0.0.1

このコマンドは、Nmap に 127.0.0.1 アドレスに対して ping スキャンを実行するよう指示します。-sn オプションは、Nmap がホスト検出のみを実行し、ポートスキャンを試みないことを保証します。

出力は、ホストが稼働しているかどうかを示します。次の様な出力になります。

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:49 CST
Nmap scan report for localhost (127.0.0.1)
Host is up.
Nmap done: 1 IP address (1 host up) scanned in 0.00 seconds

この出力は、localhost (127.0.0.1) が稼働していることを確認します。Nmap は -sn オプションで指定されたとおり、ping スキャンのみを実行し、ポートスキャンは実行しませんでした。

TCP SYN および ACK Ping スキャンを実行する

このステップでは、Nmap を使用して TCP SYN および ACK ping スキャンを実行します。これらのテクニックは、ICMP ping よりも信頼性が高いことが多く、多くのファイアウォールが ICMP トラフィックをブロックする一方で、TCP トラフィックを許可するためです。

最初に、ホストが到達できない場合に何が起きるかを示すために、192.168.1.1 に TCP SYN ping スキャンを試してみましょう。TCP SYN ping は、ターゲットホストに TCP SYN パケットを送信します。ホストが稼働していて、指定されたポート(またはデフォルトで任意のポート)でリスニングしている場合、SYN/ACK パケットで応答します。その後、Nmap は RST パケットを送信して接続をリセットします。

Nmap の -PS オプションは、TCP SYN ping を使用することを指定します。デフォルトでは、Nmap はポート 80 に SYN パケットを送信します。

192.168.1.1 に TCP SYN ping スキャンを実行するには、ターミナルで以下のコマンドを実行します。

sudo nmap -PS 192.168.1.1

このコマンドは、ホスト 192.168.1.1 のポート 80 に TCP SYN パケットを送信するよう Nmap に指示します。sudo は、Nmap が生の TCP パケットを作成および送信するために昇格した権限を必要とするため必要です。

この実験環境では 192.168.1.1 に到達できないため、次の様な出力が出力されます。

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:49 CST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 2.10 seconds

この出力は、Nmap が 192.168.1.1 に到達できなかったことを示しています。メッセージは、ホストが稼働しているが ping プローブをブロックしている可能性がある場合は -Pn を使用することを示唆しています。

次に、ホストが到達可能な場合にどのように動作するかを確認するために、localhost (127.0.0.1) に TCP SYN ping スキャンを実行してみましょう。

sudo nmap -PS 127.0.0.1

これは、次の様な出力になります。

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:50 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000070s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
2121/tcp open  ccproxy-ftp
2222/tcp open  EtherNetIP-1
3001/tcp open  nessus
8080/tcp open  http-proxy

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

この出力は、Nmap が localhost を正常に検出し、稼働していることを示し、システム上のオープンポートも表示していることを示しています。

次に、ACK ping スキャンを実行します。ACK ping は、ターゲットホストに TCP ACK パケットを送信します。SYN ping は接続確立を試みるのに対し、ACK ping は既に確立された接続の一部であるように見えるパケットを送信します。ファイアウォールは、SYN パケットとは異なる方法で受信 ACK パケットを処理するルールを持つことが多く、ACK ping はいくつかのファイアウォール構成をバイパスするために役立ちます。

Nmap の -PA オプションは、TCP ACK ping を使用することを指定します。デフォルトでは、Nmap はポート 80 に ACK パケットを送信します。

最初に、192.168.1.1 に ACK ping を試してみましょう。

sudo nmap -PA 192.168.1.1

予想通り、ホストがダウンしていることが示されます。

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:50 CST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 2.11 seconds

次に、localhost に TCP ACK ping スキャンを実行して成功した場合を見てみましょう。

sudo nmap -PA 127.0.0.1

これは、次の様な出力になります。

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:50 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000040s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
2121/tcp open  ccproxy-ftp
2222/tcp open  EtherNetIP-1
3001/tcp open  nessus
8080/tcp open  http-proxy

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

この出力は、Nmap が localhost に TCP ACK パケットを送信し、応答を受信したため、ホストが稼働していることを示しています。また、スキャンではシステム上のオープンポートも表示されています。

Ping スキャン技法を組み合わせる

このステップでは、Nmap を使用してネットワーク上のライブホストを発見するために、TCP SYN および ACK ping スキャンを組み合わせる方法を学びます。異なる ping タイプを組み合わせることで、ホストの発見の信頼性を高めることができます。これは、あるタイプの ping には応答するが、別のタイプの ping には応答しないホストが存在する場合があるためです。これは、ファイアウォール規則やネットワーク構成によるものです。

-PS-PA の両方のオプションを使用することで、Nmap は指定されたネットワーク内の各ホストに TCP SYN および TCP ACK パケットの両方を送信します。これにより、特に制限的なファイアウォールがある環境で、ライブホストを検出する可能性が高まります。

最初に、ホストが存在しない場合に何が起きるかを示すために、192.168.1.0/24 ネットワークで組み合わせたスキャンを試してみましょう。

sudo nmap -PS -PA 192.168.1.0/24

このコマンドは、Nmap に 192.168.1.0/24 ネットワーク内の各ホストのポート 80 に TCP SYN および TCP ACK パケットの両方を送信するよう指示します。sudo は、Nmap が生の TCP パケットを作成および送信するために昇格した権限を必要とするため必要です。

この実験環境では、このネットワーク範囲にアクティブなホストがないため、次の様な出力が出力されます。

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:51 CST

スキャンは、ホストレポートが表示されないまま完了します。これは、このネットワーク範囲で SYN または ACK ping プローブのいずれにも応答したホストがないことを示します。

実際の状況でアクティブなホストが存在する場合、出力は次のようになります。

Starting Nmap 7.XX ( https://nmap.org ) at YYYY-MM-DD HH:MM ZZZ
Nmap scan report for 192.168.1.1
Host is up (0.0010s latency).
Nmap scan report for 192.168.1.2
Host is up (0.0015s latency).
Nmap scan report for 192.168.1.10
Host is up (0.0012s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.XX seconds

これにより、Nmap が 192.168.1.0/24 ネットワークをスキャンし、組み合わせた ping 技法に応答した 3 つのライブホストを発見したことがわかります。

動作する例で組み合わせた ping 技法を示すために、localhost で使用してみましょう。

sudo nmap -PS -PA 127.0.0.1

これにより、localhost が両方の ping タイプに応答していることを示す出力が出力されます。

Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 09:51 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000040s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
2121/tcp open  ccproxy-ftp
2222/tcp open  EtherNetIP-1
3001/tcp open  nessus
8080/tcp open  http-proxy

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

最後に、実行したコマンドをターミナルで確認して、Nmap を使用して学習した技法を特定できます。ターミナルは、実行したコマンドの履歴を保持しており、作業の確認やスキャンの結果の検証に役立ちます。

ターミナルのコマンド履歴を表示するには、history コマンドを使用できます。このコマンドは、以前に実行したコマンドの番号付きリストを表示します。

以下のコマンドを入力して Enter キーを押します。

history

これにより、最近のすべてのコマンドのリストが表示されます。リストをスクロールして、前のステップで実行した Nmap コマンド、特に -sn-PS、および -PA を使用して ping スキャンを実行したコマンドを探します。

たとえば、次の様なコマンドが表示されるはずです。

  1  sudo nmap -sn 192.168.1.0/24
  2  sudo nmap -sn 127.0.0.1
  3  sudo nmap -PS 192.168.1.1
  4  sudo nmap -PS 127.0.0.1
  5  sudo nmap -PA 192.168.1.1
  6  sudo nmap -PA 127.0.0.1
  7  sudo nmap -PS -PA 192.168.1.0/24
  8  sudo nmap -PS -PA 127.0.0.1
  9  history

これらのコマンドとその出力(前のステップでメモしたはず)を確認することで、学習したさまざまな ping 技法と、到達可能なホストと到達できないホストとの動作を確認できます。history コマンドは、作業の監査や、この実験のステップを正しく実行したことを確認するための便利なツールです。

注記:history コマンドの正確な出力は、ターミナルセッションで実行したコマンドによって異なります。

まとめ

この実験では、Nmap を使用したホスト発見の実施方法を学びました。まず、ポートスキャンを無効にする -sn オプションを使用して、192.168.1.0/24 ネットワークに対して ping スキャンを実行しました。これは、より高速で、侵入性が低い方法です。また、ポートスキャンを無効にした状態で、localhost のアドレス 127.0.0.1 に対しても ping スキャンを実行しました。さらに、TCP SYN ping (-PS)、ACK ping (-PA)、および組み合わせた ping (-PS -PA) といった、さまざまな ping タイプを探索し、さまざまなネットワーク状況でライブホストを効果的に特定する方法を学びました。最後に、ターミナルのコマンド履歴を確認して、自分の操作と発見したホストを検証する方法を学びました。