treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

PowerShellのGet-NetNeighborコマンドを試す

PowerShellのコマンドレットで便利そうなコマンドを使う機会があったのでご報告です。
今回のコマンドレットは「Get-NetNeighbor」を使いました。

同一ネットワーク内のノードを探す「Get-NetNeighbor」

ネットワーク内のIPアドレスやコンピュータ名をある程度把握しているネットワーク環境であれば、パッとIPアドレスに向けてpingを実行したり、nslookupで名前解決したり、ということは(知っているからこそ)簡単です。

ただ、このネットワーク環境があまりよく知らない状況だったり、これから知るための作業として赴いた先だったとしたら、どこにpingで疎通確認したらいいかというのは今一つピンとこない感じです。まずどんなIPアドレスが使われているか、という情報を知りたいと思うことがありました。

そこで、PowerShellのコマンドレットで使うと同一ネットワーク内で現在使われているIPアドレスをざっくり一覧表示できるコマンドが「Get-NetNeighbor」となります。

さっそくやってみます。(ちなみに実際にやった環境ではありません。)まずは単純に「Get-NetNeighbor」単体で実行してみます。

ずらっと一覧が出てきますが、不要な情報が多くて見づらいこともあり、画面に表示される情報を絞ってみます。

「Get-NetNeighbor」表示内容をIPv4で絞り込み

まずはIPv4アドレスの情報だけに絞り込んでみます。コマンドレットにIPv4だけを示す「-AddressFamily ipv4」を付加して実行してみます。

Get-NetNeighbor -AddressFamily ipv4

先ほどIPv6情報とIPv4アドレスが一緒にリストアップされていましたが、

IPv4アドレスだけが画面表示されるようになりました。ただ、これだと同一ネットワーク以外のキャッシュされたIPアドレスも表示されてしまいます。そこで「-State」オプションを使ってさらに絞り込んで行きます。

「Get-NetNeighbor」表示内容をStateで絞り込み

「-State」オプションを使うと状態によって画面に表示/非表示を選択することができます。

画面中のStateの欄に表示されている状態を示す単語で区別して表示の可否を判断することになります。

※参考:Microsoft:Get-NetNeighbor
https://learn.microsoft.com/en-us/powershell/module/nettcpip/get-netneighbor?view=windowsserver2022-ps

ここの「-State」とあるセクションの解説を読んで確認してみます。

  • Unreachable:到達不能な状態、キャッシュされているだけなので除外する候補
  • Incomplete:不完全な状態、アドレスの応答可否の確認が進行中
  • Probe:到達可能だったのが到達不能になった状態、確認のためのプローブを送信中
  • Delay:遅延している状態、プローブ送信前の状態(らしい)
  • Stale:直訳では古くなった情報と記載、Reachableから時間経過した状態
  • Reachable:到達可能、過去1分以内に到達可能でオンライン状態であることを確認
  • Permanent:永続的に登録された情報なので、時間で期限切れにならない。

解説を読んだ感じでは、DHCPから払い出されてオンラインとなったIPアドレスを一通り収集するには

Reachable,Stale,Unreachable,Probe

を指定するのが良さそうですが、オンライン状態のIPアドレスだけを抽出する場合には、

Reachable,Stale

の二つの指定だけにしてもいいかもしれません。このオプションを有効にしたコマンドレットが、

Get-NetNeighbor -AddressFamily ipv4 -State Reachable,Stale,Unreachable,Probe

もしくは

Get-NetNeighbor -AddressFamily ipv4 -State Reachable,Stale

で実行してみます。(今回は-State Reachable,Stale,Unreachable,Probe側を実行してみました。)

大分見やすくなったと思います。全て192.168.のローカルIPアドレスが表示されて、そのIPアドレスに割り当てられたMACアドレスと、現在の状態(State)が一覧表示されました。

初見のネットワーク環境の調査に

動作はほぼコマンドラインの「arp -a」と同じなのですが、-Stateで絞り込めたり、IPアドレスとMACアドレスの対応表に加えて現在のそのIPアドレスを使っているノードの状態まで確認できる点がarpコマンドより情報量が多い、と言う点がGet-NetNeighborコマンドレットの優位点といえそうです。

初めて来たネットワーク環境でどんなIPが使われているか、静的IPを指定する時にどんなIPを使えば良いかを確認するのに使えそうです。またフリーソフトを使って192.168.xx.1/24から192.168.xx.254/24までにpingを実行してIPが使われているかどうかを確認していましたが、簡易的な調査であればこのGet-NetNeighborコマンドレットの実行結果を参考にするというのもありに思えます。