One IT Thing

IT業界を楽しむ為の学習系雑記

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

執筆者:

関連記事

各種OSでのインデックスを使用した高速ファイル名検索と全文検索【Windows編】

目次1 目的2 環境3 使用アプリ、コマンド3.1 「Everything.exe」デスクトップアプリ3.2 「es.exe」コマンド4 インストール4.1 「Everything.exe」 インスト …

JavaとPerlでUDPソケット通信

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

インターネット速度テストサービス10個を順位づけしてみる

「インターネット疎通の速度が帯域通りになっているか確かめたい」 仕事でもプライベートでもそんなニーズがあります。 数多あるインターネット速度計測サービスを試してみて「日本国内で使う場合、最も正確な速度 …

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

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

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

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


shingo nakanishi。東京で消耗中の職歴20年越え中年ITエンジニアです。「生涯現役プログラマを楽しむ」ことができる働き方探しをライフワークにしています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。