PowerShellでLANに接続しているデバイスのIPアドレスを調べる方法

PowerShellでLANに接続しているデバイスのIPアドレスを調べる方法

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

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

Windows10でネットワーク上の他のWindowsマシンを一覧表示する方法
ここでは、Windows10を例にネットワーク探索機能を有効化して、ネットワーク上の他のWindowsマシンをエクスプローラーに表示させる方法を紹介します。

動作環境

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

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

IPアドレスを調べるときは

LANを探索してアクセス可能なIPアドレスを表示するには、Get-NetNeighborコマンドレットを利用します。

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

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

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

PowerShellでLANに接続しているデバイスのIPアドレスを調べる方法

インターフェース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)を表示しないようにするためです。

PowerShellでLANに接続しているデバイスのIPアドレスを調べる方法

なお、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」列にコンピューター名が表示されます。

PowerShellでLANに接続しているデバイスのIPアドレスを調べる方法

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

Resolve-DnsName (DnsClient) | Microsoft Learn

あとがき

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

ご活用あれ。

記事が役立ったらシェアしてくれるとうれしいです。