network windows

LANに接続しているPCをWindowsから見つける

投稿日:2019年5月13日

  • 家庭内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を入れると更に便利になります。

-network, windows

執筆者:

関連記事

adb devicesコマンドでAndroid端末を認識しない

目次1 事象2 原因3 解決 事象 USB接続するAndroidによって以下のエラーが出たりします。 C:\src\ionic\awsomeapp>adb devices List of dev …

JavaとPerlでUDPソケット通信

目次1 はじめに2 対象読者3 実装3.1 UDPサーバ(Perl)3.2 UDPクライアント(Java)3.3 実行4 まとめ はじめに 本棚を整理していたらラクダ本が出てきました。うわー懐かしい、 …

特定ドメインのサブドメインを探る

注:dnsmapは第三者サーバに対しては使用せず、自分の管理ドメインに対してセキュリティ確認用途でご使用ください。 昨今のDNSサーバはゾーン転送が抑制されており、サブドメイン情報を引っ張ってくること …

whoisコマンドで新興TLDのドメイン創設日を調べる

各ドメインの情報は属するトップレベルドメイン(.jpなど)が管理するDNSサーバによって管理されています。この情報を辿って指定したドメインの情報を参照する仕組みが「whois」です。 最近は各トップレ …

UserAgent判定JSライブラリ「UAParser.js」と「Platform.js」の比較

2019年時点で開発が継続しているUA判定JSライブラリから2つ選択して動作を確認しました。 目次1 Webリソースから比較1.1 github比較1.2 NPMリポジトリ比較2 実際に使用して比較2 …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯技術者として楽しく生きることを目指しています。デスマに負けず健康第一。