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

執筆者:

関連記事

SSHトンネルを使ってリモートデータベースをBI

クラウド上のDB分析環境構築を想定して、ローカルPCにSSHトンネル(ポートフォワード)環境を作ります。 リモートDBポートにクラウド外からセキュアに接続できれば、クラウドにBIツールを入れる手間が省 …

グローバルIPアドレスの確認をコマンド化する

「Dynamic DNSサービスで定期的にDNS更新をしなきゃいけないけど、固定IPじゃなくて変わった時に調べるのが煩わしい」 といった時に手作業が発生しないようにWeb APIがあるサービスを使って …

Linux、Mac、Windows間のネットワーク速度をiperf3で調べる

なんかネットワークが遅いから調べたい。あのLANケーブルひょっとして100Mbps用じゃない?1Gbpsじゃないかも。試験的にネットワーク帯域を絞ったから通信速度を確認したい。 こういった時、通信する …

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

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

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

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

 

shingo.nakanishi
 

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