- 家庭内LANでNASのIPアドレスを忘れたので調べたい
- 職場LANに接続中のホストを調べたい
NetEnumを入れられれば取れる情報も多く、ポートスキャンやパケットキャプチャも出来て幸せになれます。
単純に接続PCを知りたいだけならWindowsコマンドで十分です。
目次
環境
Windows10
1.Powershellで見つける
コマンドプロンプトから「arp -a」を実行することでARPキャッシュを表示することが出来、ネットワーク内のPCを見つけることが出来ます。しかしARPキャッシュには通信した経験のあるホストが記録されていて、通信したことの無い赤の他人のPCのことは知りません。なのでセグメント内の全ホストにpingすることで通信経験を積ませます。
全ホストにpingする為にpowershellのワンライナーを使います。192.168.0セグメント以外の場合は読み替えてください。 powershellを使う理由は、コマンドプロンプトのfor構文よりもpowershellのfor構文の方が明確で覚えやすいからです。
for($i=0; $i -lt 255; $i++){ping -w 3 -n 1 192.168.0.$i; arp -a 192.168.0.$i}
powershellを管理者モードで起動
昔の情報が残っているかも知れない為、一度arpキャッシュをクリアします。arpキャッシュをクリアする為には管理者権限が必要です。クリアする必要が無ければ一般ユーザ権限で構いません。
デスクトップ左下の「ここに入力して検索」にpowershellと入力した後、「Shiftキー」+「Ctrlキー」を押しながら「Enter」を押すことで管理者権限でpowershellを起動します。
ARPキャッシュをクリア
検索すると「arp -d *」でクリアする情報がヒットすると思いますが、この方法はWindows7で廃止されています。
PS C:\WINDOWS\system32> arp -d *
ARP エントリを削除できませんでした: パラメーターが間違っています。
arpのコマンドリファレンスにはまだ残っているんですが・・・混乱の元ですね。
PS C:\Users\naka> arp
アドレス解決プロトコル (ARP) で使用される、IP アドレスから物理アドレスへの変換
テーブルを表示および変更します。
(snip)
-d inet_addr で指定されたホストを削除します。inet_addr にワイルド
カードを使用すると、すべてのホストを削除できます。
Windows7以降、arpテーブルクリアはnetshコマンドに統合されました。powershel画面から、
- netsh
- interface ipv4
- delete arpcache
- exit
と実行していけばクリアできます。(管理者権限でないとクリア出来ません)
PS C:\WINDOWS\system32> netsh
netsh>interface ipv4
netsh interface ipv4>delete arpcache
OK
netsh interface ipv4>exit
PS C:\WINDOWS\system32>
一度「arp -a」を実行してエントリが少なくなっていることを確認します。(現在通信を行っているホストなどは直ぐにキャッシュされます。VirtualBox等の仮想マシンのNICも直ぐにキャッシュされます。)
PS C:\WINDOWS\system32> arp -a
インターフェイス: 192.168.0.5 --- 0xf
インターネット アドレス 物理アドレス 種類
172.31.248.142 00-ae-f7-8d-bd-0e 動的
192.168.0.1 cc-1a-fa-b8-bd-c6 動的 <-- ルータは直ぐ検知される
192.168.0.2 90-b1-1c-8d-c9-6e 動的 <-- SSH接続中ホストはすぐ検知される
224.0.0.22 01-00-5e-00-00-16 静的
ARPキャッシュを更新する
冒頭のpowershellワンライナーを使って192.168.0.1~192.168.0.255にpingを投げ、arpテーブルを更新します。
PS C:\Users\naka> for($i=0; $i -lt 255; $i++){ping -w 3 -n 1 192.168.0.$i; arp -a 192.168.0.$i}
192.168.0.0 に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
192.168.0.0 の ping 統計:
パケット数: 送信 = 1、受信 = 0、損失 = 1 (100% の損失)、
ARP エントリが見つかりませんでした。
192.168.0.1 に ping を送信しています 32 バイトのデータ:
192.168.0.1 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.1 の ping 統計:
パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
インターフェイス: 192.168.0.5 --- 0xf
インターネット アドレス 物理アドレス 種類
192.168.0.1 cc-1a-fa-b8-bd-c6 動的
192.168.0.2 に ping を送信しています 32 バイトのデータ:
192.168.0.2 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.2 の ping 統計:
パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
インターフェイス: 192.168.0.5 --- 0xf
インターネット アドレス 物理アドレス 種類
192.168.0.2 90-b1-1c-8d-c9-6e 動的
192.168.0.3 に ping を送信しています 32 バイトのデータ:
192.168.0.3 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.3 の ping 統計:
パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
インターフェイス: 192.168.0.5 --- 0xf
インターネット アドレス 物理アドレス 種類
192.168.0.3 b8-ca-3a-90-75-72 動的
192.168.0.4 に ping を送信しています 32 バイトのデータ:
192.168.0.4 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.4 の ping 統計:
パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
インターフェイス: 192.168.0.5 --- 0xf
インターネット アドレス 物理アドレス 種類
192.168.0.4 98-90-96-d3-bb-c2 動的
192.168.0.5 に ping を送信しています 32 バイトのデータ:
192.168.0.5 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.0.5 の ping 統計:
パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
ARP エントリが見つかりませんでした。
192.168.0.6 に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
192.168.0.6 の ping 統計:
パケット数: 送信 = 1、受信 = 0、損失 = 1 (100% の損失)、
ARP エントリが見つかりませんでした。
(snip)
192.168.0.202 の ping 統計:
パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 56ms、最大 = 56ms、平均 = 56ms
インターフェイス: 192.168.0.5 --- 0xf
インターネット アドレス 物理アドレス 種類
192.168.0.202 38-f9-d3-63-00-b9 動的
192.168.0.203 に ping を送信しています 32 バイトのデータ:
192.168.0.203 からの応答: バイト数 =32 時間 =111ms TTL=64
192.168.0.203 の ping 統計:
パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 111ms、最大 = 111ms、平均 = 111ms
インターフェイス: 192.168.0.5 --- 0xf
インターネット アドレス 物理アドレス 種類
192.168.0.203 c8-85-50-a4-e9-16 動的
192.168.0.204 に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
192.168.0.204 の ping 統計:
パケット数: 送信 = 1、受信 = 0、損失 = 1 (100% の損失)、
ARP エントリが見つかりませんでした。
再度「arp -a」すると、応答の有ったホストが追加されています。
PS C:\Users\naka> arp -a
インターフェイス: 192.168.0.5 --- 0xf
インターネット アドレス 物理アドレス 種類
172.31.248.142 00-ae-f7-8d-bd-0e 動的
192.168.0.1 cc-1a-fa-b8-bd-c6 動的
192.168.0.2 90-b1-1c-8d-c9-6e 動的
192.168.0.3 b8-ca-3a-90-75-72 動的 <-- 追加された
192.168.0.4 98-90-96-d3-bb-c2 動的 <-- 追加された
192.168.0.201 40-4e-36-65-95-e3 動的 <-- 追加された
192.168.0.202 38-f9-d3-63-00-b9 動的 <-- 追加された
192.168.0.203 c8-85-50-a4-e9-16 動的 <-- 追加された
224.0.0.22 01-00-5e-00-00-16 静的
239.255.255.250 01-00-5e-7f-ff-fa 静的
2.NetEnumで見つける
より良い方法としてNetEnumがあります。
インストール
窓の杜からダウンロード、インストールします。
PCを探す
管理者として実行。
初期画面。
「ファイル」→「検索」をクリック。
検索画面。
「開始アドレス」と「終了アドレス」を確認して「検索」ボタンクリック。
検索中。10秒程待ちます。
見つかったPCがリストアップされます。
他機能
ポートスキャンが出来ます。Linuxのnmapコマンドの代替として使えます。
これだけで入れる価値がありますね。
NetEnumを入れておけば他に出来ることも増える
ネットワーク上のPCを見つけるだけならWindowsコマンドで十分ですが、NetEnumを入れると更に便利になります。