家庭内や企業のLAN(ローカルエリアネットワーク)で、ネットワークに接続しているデバイスのIPアドレスをWindowsマシンからコマンドを使って調べたい場合、PINGコマンドを使った方法が一般的ですが、1IPずつPINGを打ったり、スクリプトを作成して実行するのは結構面倒です。
そこでここでは、PowerShellのGet-NetNeighborコマンドレットを使って、LANに接続しているデバイスのIPアドレスを調べる方法を紹介します。

目次
動作環境
この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。
ソフトウェア | バージョン |
---|---|
Windows 10 Pro 64bit | 21H2 |
IPアドレスを調べるときは
LANを探索してアクセス可能なIPアドレスを表示するには、Get-NetNeighborコマンドレットを利用します。
Get-NetNeighborコマンドレットを実行するときは、必要な情報のみを表示するよう、探索したいLANに接続しているネットワークインターフェースのIDを指定します。(ネットワークインターフェースを指定せずに実行すると、すべてのネットワークインターフェースが対象になります。)
ネットワークインターフェースのIDは、以下のコマンドを実行することで調べることができ、「ifIndex」列に表示されている番号がIDとなります。
PS> Get-NetAdapter | Where-Object {$_.Status -eq "UP" } | Select-Object Name,ifIndex
インターフェース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)を表示しないようにするためです。
なお、Get-NetNeighborコマンドレットでは、スリープしているデバイスなどは検出できない場合があるので注意が必要です。
Get-NetNeighborコマンドレットのより詳しい使い方を知りたいときは、以下の公式サイトが役立つでしょう。
Get-NetNeighbor (NetTCPIP) | Microsoft Learn
名前解決もしたいときは
Get-NetNeighborコマンドレットで調べたIPアドレスから、Windowsマシンようにコンピューター名が設定されているデバイスの名前解決も行いたい場合は、Resolve-DnsNameコマンドレットを組み合わせることで実現できます。
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」列にコンピューター名が表示されます。
Resolve-DnsNameコマンドレットで指定できるオプションなどについては、以下の公式サイトが役立つでしょう。
Resolve-DnsName (DnsClient) | Microsoft Learn
あとがき
LAN上のデバイスのIPアドレスを調べたい場合、専用ツールを使ったり、PINGコマンドを駆使する方法もありますが、個人的には上で紹介したPowerShellを使った方法が最も効率よく調べることができる方法だと思います。
ご活用あれ。