LANに接続されているデバイスのIPアドレスをPowerShellで一括収集する方法

LANに接続されているデバイスのIPアドレスをPowerShellで一括収集する方法

家庭内や企業のLAN(ローカルエリアネットワーク)で、ネットワークに接続されているデバイスのIPアドレスをWindowsマシンで収集したい場合、PINGコマンドを使った方法が一般的ですが、IPアドレスごとにPINGを打って収集したり、スクリプトを作成して収集するのは意外と面倒です。

そこでここでは、PowerShellのGet-NetNeighborコマンドレットを使って、LANに接続されているデバイスのIPアドレスを収集する方法を紹介します。

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows 10 Pro 64bit21H2

Get-NetNeighborコマンドレットの使い方

Get-NetNeighborコマンドレットは、LANを探索してアクセス可能なIPアドレスを一覧表示してくれるPowerShellコマンドレットです。

Get-NetNeighborコマンドレットを実行するときは、まず探索したいLANに接続しているネットワークインターフェースのIDを指定します。(ネットワークインターフェースを指定せずに実行すると、すべてのネットワークインターフェースが対象になります。)

ネットワークインターフェースのIDは、以下のコマンドを実行することで調べることができ、「ifIndex」列に表示されている番号がIDとなります。

PS> Get-NetAdapter | Where-Object {$_.Status -eq "UP" } | Select-Object Name,ifIndex

LANに接続されているデバイスのIPアドレスをPowerShellで一括収集する方法

インターフェースIDを確認したら、Get-NetNeighborコマンドレットを以下のように実行することで、対象のLANに接続しているデバイスのIPv4アドレスが収集され一覧表示されます。

PS> Get-NetNeighbor -InterfaceIndex 16 -AddressFamily IPv4 -State Stale,Reachable

コマンドレットに指定している「-State」オプションは、マルチキャストアドレス(224.0.0.0~239.255.255.255)やブロードキャストアドレス(255.255.255.255)を表示しないようにするためです。

LANに接続されているデバイスのIPアドレスをPowerShellで一括収集する方法

なお、Get-NetNeighborコマンドレットでは、スリープしているデバイスなどは検出できない場合があるので注意が必要です。

Get-NetNeighborコマンドレットのより詳しい使い方を知りたいときは、以下の公式サイトが役立つでしょう。

Get-NetNeighbor (NetTCPIP) | Microsoft Learn

名前解決もしたいときは

Get-NetNeighborコマンドレットで調べたIPアドレスから、Windowsマシンようにコンピューター名が設定されているデバイスの名前解決も行いたい場合は、Resolve-DnsNameコマンドレットを組み合わせることで実現できます。

Memo

Resolve-DnsNameコマンドレットは、DNSサーバーやLLMNR(Link-local Multicast Name Resolution)、NBT(NetBIOS over TCP/IP)を使って名前解決(正引き、逆引き)できます。

たとえば、Get-NetNeighborコマンドレットで取得したIPアドレスそれぞれに対して名前解決を行いたいときは、以下のように実行します。

PS> Get-NetNeighbor -InterfaceIndex 16 -AddressFamily IPv4 -State Stale,Reachable | ForEach-Object { Resolve-DnsName $_.IPAddress -ErrorAction SilentlyContinue -QuickTimeout }

すると、名前解決ができたデバイスが一覧表示され「NameHost」列にコンピューター名が表示されます。

LANに接続されているデバイスのIPアドレスをPowerShellで一括収集する方法

Resolve-DnsNameコマンドレットで指定できるオプションなどについては、以下の公式サイトが役立つでしょう。

Resolve-DnsName (DnsClient) | Microsoft Learn

あとがき

LAN上のデバイスのIPアドレスを調べたい場合、専用ツールを使ったり、PINGコマンドを駆使する方法もありますが、個人的には上で紹介したPowerShellを使った方法が最も効率よく調べることができる方法だと思います。

ご活用あれ。