Twitterに流れてきた記事で
★ASCII.jp:WindowsのコマンドでLAN内のデバイスを探す (1/2)
こういうのを見ました。
お仕事でもお客さん先ネットワークについて接続機器を調べたい時あります。その時は許可取って自分のPCを接続し例えば
★Advanced IP Scanner
等のアプリを使ってスキャンしたり、そこまで大事でないものに関してはお客さんのパソコン借りてコマンドプロンプトでarp -aでもいいわけです。
*そもそもネットワーク管理者がいらっしゃる環境であればこういう作業は必要ありませんが・・・・
ただ高機能なネットワーク調査機能がWindows標準で入っていれば調査ソフト入れた自分のパソコンを接続したりする必要はなくなりますわな。
という事で記事に書いてあるのを少し試してみました。
コマンドプロンプトでは実行出来ないのでWindows PowerShellからコマンドします。
単に
Get-NetNeighbor
と売ってしまうとそのパソコンの全てのアダプタ(Wi-Fi、有線LAN等など)のが一覧表示されてしまうので最初に
Get-NetAdapter
と入力するとアダプタ一覧が表示されます。

ifIndexという所の数字が必要らしいので覚えておいて、そして記事に書いてあるコマンドが
Get-NetNeighbor -InterfaceIndex 4 -AddressFamily IPv4 -State Stale,Reachable
ですが私の場合のWi-FiアダプタのifIndexが13ですので4の部分を13に変更し
Get-NetNeighbor -InterfaceIndex 13 -AddressFamily IPv4 -State Stale,Reachable
し実行。LAN内のネットワーク機器の情報が表示されました。
はてなブックマークのコメントにこんなのがありました。
★[B! windows] ASCII.jp:WindowsのコマンドでLAN内のデバイスを探す (1/2)
「ssids 実行するとサブネットのアドレス全部が出るから勘違いしやすいが、実は今の arp テーブル見るだけなので、arp テーブルに載ってない(=直近で通信したことない)相手は出てこない / というわけで結局 nmap -sP 使う」
そういやPowerShellって標準でnmap使えるのかしら?とman nmapやったらインストールされていない・・・・標準で入ってれば確かに便利ではあるよね・・・・・
Windowsの標準機能でいかにこれらの調査を簡単に行えるかが個人的には知りたい所なので記事の次のページのも参考になりました。
★ASCII.jp:WindowsのコマンドでLAN内のデバイスを探す (2/2)
「ネットワーク上のPCの名前を知りたい」
これもありますよねぇ。
Resolve-DnsNameというコマンドを組み合わせる事でそれが実現できるようだ。
「ドメイン名サーバー(DNSサーバー)を使って、名前からIPアドレスを得るものだが、LLMNR(Link-Local Multicast Name Resolution)やNETBIOSを使って名前解決をすることができる。LLMNRはMicrosoftがIPv6などでも利用可能なローカルでの名前解決として提案したプロトコルだ。RFCとして公開されているプロトコルだが、Windows以外ではプリンターやNASが実装している程度だ」
ほぅ。
という事でさっきみたいに13を記事のコマンドに当てはめると
Get-NetNeighbor -InterfaceIndex 13 -AddressFamily IPv4 -State Stale,Reachable | ForEach-Object { Resolve-DnsName $_.IPAddress -ErrorAction SilentlyContinue -QuickTimeout }
か。
という事でメモでした。