netdiscover: ローカルネットワーク探索ツールの徹底ガイド 📡

ARPスキャンでネットワーク上のデバイスを発見しよう!

ネットワーク管理やセキュリティ監査を行う上で、ローカルネットワーク上にどのようなデバイスが存在するかを把握することは非常に重要です。netdiscoverは、ARP (Address Resolution Protocol) を利用して、アクティブまたはパッシブにネットワーク上のホストを発見するための強力なツールです。特に、DHCPサーバーが存在しないワイヤレスネットワークや、スイッチング環境でのデバイス発見に役立ちます。

この記事では、netdiscoverの基本的な使い方から、さまざまなオプションを活用した高度なスキャン方法、そして結果の解釈までを詳しく解説します。💻

netdiscoverとは?

netdiscoverは、libnetおよびlibpcapライブラリを基盤として構築された、アクティブ/パッシブ方式のアドレス偵察ツールです。主にローカルネットワーク (LAN) 上のデバイス(ホスト)のIPアドレスとMACアドレスを特定するために使用されます。 ARPパケットを利用してホストを検出するのが特徴で、アクティブモードではARPリクエストを送信し、パッシブモードではネットワーク上を流れるARPパケットを監視(スニッフィング)します。

主な特徴

  • アクティブスキャン: ARPリクエストを指定されたネットワーク範囲に送信し、応答したデバイスを検出します。
  • パッシブスキャン: ネットワークトラフィックを監視し、ARPパケットからデバイス情報を収集します。パケットを送信しないため、より隠密なスキャンが可能です。
  • 自動スキャン: 一般的なプライベートネットワーク範囲 (例: 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8) を自動的にスキャンします。
  • 高速スキャンモード: スキャン時間を短縮するための高速モードを提供します。
  • MACベンダー表示: 検出したMACアドレスに基づいて、デバイスの製造元ベンダーを表示します。
  • 柔軟なオプション: スキャン対象の範囲指定、インターフェース選択、スキャン速度調整など、多くのカスタマイズオプションがあります。

これらの特徴により、ネットワークの構成把握、不正なデバイスの検出、セキュリティ診断の初期段階における情報収集などに活用できます。

インストール方法 ⚙️

netdiscoverは、多くのLinuxディストリビューションの公式リポジトリに含まれています。特にKali Linuxにはデフォルトでインストールされています。もしインストールされていない場合は、以下のコマンドでインストールできます。netdiscoverはネットワークの低レベルな情報にアクセスするため、通常は管理者権限(rootまたはsudo)が必要です。

Debian / Ubuntu / Kali Linux

sudo apt update
sudo apt install netdiscover

Fedora / CentOS / RHEL

EPEL (Extra Packages for Enterprise Linux) リポジトリが必要な場合があります。

sudo dnf install epel-release # 必要に応じて
sudo dnf install netdiscover

または (古いバージョン)

sudo yum install epel-release # 必要に応じて
sudo yum install netdiscover

Snapパッケージとしても利用可能な場合があります。

sudo snap install netdiscover-ondra

Arch Linux

AUR (Arch User Repository) ヘルパー (例: yay) を使用します。

yay -S netdiscover

インストールが完了したら、netdiscover --help を実行して、利用可能なオプションを確認できます。

基本的な使い方

netdiscoverの基本的な構文は以下の通りです。オプションを指定しない場合、一般的なローカルネットワークアドレスを自動スキャンしようとします。

sudo netdiscover [オプション]

自動スキャン (デフォルト)

最もシンプルな使い方は、オプションなしで実行することです。これにより、一般的なプライベートIPアドレス範囲(192.168.x.x, 10.x.x.x, 172.16.x.xなど)をスキャンします。

sudo netdiscover

実行すると、対話的な画面が表示され、発見されたホストがリアルタイムでリストアップされます。qキーを押すと終了します。

特定のネットワーク範囲をスキャン (アクティブモード)

-r (range) オプションを使うと、特定のIPアドレス範囲を指定してアクティブスキャンを実行できます。CIDR表記 (例: /24, /16, /8) で指定します。

# 例: 192.168.1.0 から 192.168.1.255 までをスキャン
sudo netdiscover -r 192.168.1.0/24

このモードでは、netdiscoverは指定された範囲内の各IPアドレスに対してARPリクエストを送信し、応答があったデバイスを検出します。

特定のネットワークインターフェースを指定

複数のネットワークインターフェース(例: 有線LANのeth0、無線LANのwlan0)を持つシステムでは、-i (interface) オプションでスキャンに使用するインターフェースを指定することが重要です。

# 例: eth0インターフェースを使用して192.168.1.0/24をスキャン
sudo netdiscover -i eth0 -r 192.168.1.0/24

インターフェースを指定しない場合、netdiscoverは最初に見つかった利用可能なインターフェースを使用しようとしますが、意図しないネットワークをスキャンしてしまう可能性があるため、明示的に指定することを推奨します。

パッシブスキャン

-p (passive) オプションを使用すると、パッシブモードで動作します。このモードでは、netdiscoverはARPリクエストを送信せず、ネットワーク上を流れるARPパケットを単に監視します。これにより、自身の存在を知らせることなくネットワーク上のデバイスを発見できますが、デバイスがARP通信を行わない限り検出できません。

# 例: eth0インターフェースでパッシブスキャンを開始
sudo netdiscover -i eth0 -p

パッシブモードは、ネットワークに影響を与えたくない場合や、ステルス性が求められる状況で有用です。

主要なオプション解説 🧐

netdiscoverには、スキャンを細かく制御するための様々なオプションが用意されています。

オプション 説明
-i <device> スキャンに使用するネットワークインターフェースを指定します。 -i eth0
-r <range> スキャンするIPアドレス範囲をCIDR表記で指定します (例: /24, /16, /8)。自動スキャンではなく、指定範囲をアクティブスキャンします。 -r 192.168.0.0/24
-l <file> IPアドレス範囲が記述されたファイルを指定し、そのリストに基づいてスキャンします。ファイルには1行につき1つの範囲を記述します。 -l range_list.txt
-p パッシブモードを有効にします。ARPリクエストを送信せず、ネットワーク上のARPトラフィックを監視します。 -p
-f 高速モードスキャンを有効にします。特に自動スキャンと組み合わせて使用すると、一般的なゲートウェイアドレス (.1) や範囲の端 (.254) など、限られたIPアドレスのみを試すことでスキャン時間を大幅に短縮します。 -f
-s <time> アクティブスキャン時に各ARPリクエストを送信する間の待機時間 (スリープ時間) をミリ秒単位で指定します。デフォルトは1ミリ秒です。ネットワークが不安定な場合や、検出漏れを防ぎたい場合に調整します。 -s 100 (100ミリ秒待機)
-c <count> 各ARPリクエストを送信する回数を指定します。パケットロスが発生しやすいネットワークで、検出の信頼性を高めるために使用します。デフォルトは1回です。 -c 3 (各リクエストを3回送信)
-n <node> スキャンに使用するソースIPアドレスの最後のオクテットを指定します (2から253まで)。デフォルト(例: 67)のIPアドレスが既に使用されている場合に変更します。 -n 150 (x.x.x.150をソースIPとして使用)
-P 結果を他のプログラムで解析しやすい形式で標準出力に出力し、アクティブスキャン完了後に終了します。対話的な画面は表示されません。 -P
-L -Pと同様に解析しやすい形式で出力しますが、アクティブスキャン完了後もパッシブリスニングを継続します。 -L
-N -Pまたは-L使用時に、ヘッダー行を出力しません。 -P -N
-S ハードコアモード。各リクエスト間のスリープ時間を抑制します。非常に高速ですが、ネットワークやデバイスに負荷をかける可能性があります。 -S
-d ホームディレクトリにある設定ファイル (~/.netdiscover/ranges, ~/.netdiscover/fastips) を無視します。 -d
-m <file> 既知のMACアドレスとホスト名が記述されたファイルを指定してスキャンします。 -m known_hosts.txt
-F <filter> libpcapのフィルター式をカスタマイズします。デフォルトは “arp” です。特定のARPトラフィックのみを対象にしたい場合などに使用します。 -F "arp src host 192.168.1.1"

これらのオプションを組み合わせることで、特定の要件に合わせた柔軟なネットワークスキャンが可能になります。

出力結果の解釈 📊

netdiscoverの対話画面や-P/-Lオプションで出力される結果には、以下の情報が含まれます。

カラム名 説明
IP 発見されたデバイスのIPアドレス。
At MAC Address 発見されたデバイスのMAC (Media Access Control) アドレス。これはネットワークインターフェースカード (NIC) に固有の物理アドレスです。
Count そのデバイスから受信したARPパケットの数。アクティブスキャンでは通常1ですが、パッシブモードや-cオプション使用時には増加することがあります。
Len 最後に受信したARPパケットの長さ (バイト単位)。
MAC Vendor / Hostname MACアドレスの前半部分 (OUI: Organizationally Unique Identifier) から推測されるデバイスの製造元ベンダー名。可能であれば、逆引きDNSなどによってホスト名が表示されることもあります。

例えば、以下のような出力が得られます。

Currently scanning: Finished!   |   Screen View: Unique Hosts
 
 4 Captured ARP Req/Rep packets, from 4 hosts.   Total size: 240
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 192.168.1.1     00:11:22:33:44:55      1      60  Router Brand Inc.         
 192.168.1.10    AA:BB:CC:DD:EE:FF      1      60  Printer Company Ltd.       
 192.168.1.15    11:22:33:AA:BB:CC      1      60  Some Device Manufacturer  
 192.168.1.22    F0:E1:D2:C3:B4:A5      1      60  Unknown Vendor / my-laptop

この例では、4つのデバイスが発見されています。ルーター、プリンター、ラップトップなどが特定できています。MAC Vendor情報は、ネットワークに接続されているデバイスの種類を推測する上で非常に役立ちます。

高度な使用例とシナリオ ✨

高速スキャンで素早く概要を把握

広範囲のネットワークをスキャンする前に、-f (fast) オプションを使って素早くアクティブなサブネットを見つけたい場合に便利です。

# eth0インターフェースで高速自動スキャンを実行
sudo netdiscover -i eth0 -f

これにより、一般的なゲートウェイアドレスなどが存在するサブネットを短時間で特定できます。その後、特定したサブネットに対して詳細なスキャン (-fなし) を実行します。

結果をファイルに保存

スキャン結果を後で分析したり、他のツールで利用したりするためにファイルに保存したい場合は、-Pオプションとリダイレクトを使用します。

# スキャン結果を discovered_hosts.txt に保存
sudo netdiscover -i eth0 -r 192.168.1.0/24 -P > discovered_hosts.txt

-Nオプションを追加すると、ヘッダー行なしで出力できます。

sudo netdiscover -i eth0 -r 192.168.1.0/24 -P -N > discovered_hosts_noheader.txt

長時間パッシブ監視

ネットワークに新たに参加するデバイスを継続的に監視したい場合は、-p (passive) オプションと -L (listen) オプションを組み合わせます (ただし、-Lは主にアクティブスキャン後の継続監視用です。純粋なパッシブ監視なら-pだけで十分な場合が多いです)。

# eth0でパッシブ監視を続け、結果をファイルに追記
sudo netdiscover -i eth0 -p -P -L >> network_log.txt

-P-Lを組み合わせることで、バックグラウンドで実行しつつ、発見したホスト情報をファイルに記録し続けることができます。

不安定なネットワークでのスキャン

パケットロスが多いネットワークでは、-s (sleep) でリクエスト間隔を長くし、-c (count) でリクエスト送信回数を増やすことで、検出漏れを減らすことができます。

# 各リクエスト間に100msの待機時間を入れ、各リクエストを3回送信
sudo netdiscover -i wlan0 -r 10.0.0.0/16 -s 100 -c 3

活用シナリオ ✅

netdiscoverは様々な状況で役立ちます。

  • ネットワークインベントリ作成: LAN上に存在するすべてのデバイス(PC、サーバー、プリンター、IoTデバイスなど)をリストアップし、ネットワーク構成図を作成する基礎情報とします。
  • 不正デバイスの検出 (Rogue Device Detection): 許可なくネットワークに接続された未知のデバイスを発見します。MACアドレスやベンダー情報から、それが何であるか推測する手がかりを得られます。
  • IPアドレスの競合調査: 意図せず同じIPアドレスが割り当てられていないか確認するのに役立ちます。
  • ペネトレーションテストの初期段階: 攻撃対象となりうるネットワーク上のアクティブなホストを特定するための最初のステップとして利用されます。
  • ネットワークトラブルシューティング: 特定のデバイスがネットワーク上で応答しているか、期待されるIPアドレスを持っているかなどを確認するのに使用できます。

倫理的な考慮事項と注意点 ⚠️

重要: 責任ある使用を心がけてください

netdiscoverは強力なネットワーク探索ツールですが、その使用には注意が必要です。
  • 許可のないスキャンは禁止: 自身が管理権限を持たないネットワークや、明示的な許可を得ていないネットワークに対してスキャンを実行することは、多くの組織のポリシー違反や、法的な問題(不正アクセス禁止法など)を引き起こす可能性があります。必ず許可されたネットワークでのみ使用してください。
  • ネットワークへの影響: アクティブスキャン、特に高速モード (-f) やハードコアモード (-S) は、ネットワークや接続されているデバイスに予期せぬ負荷をかける可能性があります。特に古いデバイスやリソースの限られたデバイスでは問題が発生するリスクがあります。
  • 検出される可能性: アクティブスキャンは、ネットワーク侵入検知システム (NIDS) やホストベースのファイアウォールによって検出され、セキュリティアラートをトリガーする可能性があります。
  • パッシブモードの限界: パッシブモードは隠密性が高いですが、デバイスがARP通信を行わない限り検出できません。ネットワーク上のすべてのデバイスを網羅できるわけではありません。
ツールを使用する際は、常にその影響を考慮し、倫理的かつ合法的な範囲で使用することが求められます。

まとめ

netdiscoverは、ARPベースのシンプルかつ効果的なネットワーク探索ツールです。アクティブモードとパッシブモードを使い分けることで、様々な状況に対応できます。主な機能と利点は以下の通りです。

  • ARPを利用した効率的なホスト発見
  • アクティブ/パッシブスキャンの選択が可能
  • 特定の範囲やインターフェースを指定可能
  • 高速スキャンオプションによる時間短縮
  • MACアドレスからベンダー情報を表示
  • 結果を解析しやすい形式で出力可能

ネットワーク管理、セキュリティ監査、トラブルシューティングなど、幅広い用途で活用できるツールです。ただし、その強力さゆえに、使用する際は必ず倫理的な側面と法的規制を遵守し、許可された環境でのみ利用するようにしてください。 👍

参考情報