arp - IPアドレスとMACアドレスの対応を確認する
目次
arpコマンドは、IPアドレスとMACアドレスの対応表(ARPテーブル) を表示・編集するコマンドです。
同じネットワーク(LAN)内の機器と通信するとき、Windows は相手の IP アドレスから MAC アドレスを調べ、結果を ARP テーブルに一時的に記憶します。arpコマンドを使うと、この記憶の内容を確認できます。
arpコマンドの基本構文
arp -a [<IPアドレス>] [-N <インターフェイスのIPアドレス>]
arp -s <IPアドレス> <MACアドレス> [<インターフェイスのIPアドレス>]
arp -d <IPアドレス | *> [<インターフェイスのIPアドレス>]
| オプション | 説明 |
|---|---|
-a | ARP テーブルを表示する(-gでも同じ) |
-s | 静的エントリを追加する |
-d | エントリを削除する(*を指定するとすべてのエントリを削除) |
-N | 指定したインターフェイスのエントリだけを表示する |
ARPテーブルを表示する
arp -a
IP アドレスや MAC アドレスの値は環境によって異なります。表示されるのは、LAN アダプターなどのインターフェイスごとのブロックです。
| 列 | 意味 |
|---|---|
| インターネット アドレス | 機器の IP アドレス |
| 物理アドレス | 機器の MAC アドレス(-区切りの 16 進数) |
| 種類 | 動的(通信時に自動で学習)または静的(固定・特殊なアドレス) |
ff-ff-ff-ff-ff-ffはブロードキャスト、01-00-5e-で始まるアドレスはマルチキャストで、通常の機器ではありません。
ARP テーブルには、最近通信した機器しか載りません。また動的エントリは一定時間(数分程度)使われないと自動的に消えます。LAN 内の機器が表示されないときは、先にpingで通信してから確認してください。
特定のIPアドレスのMACアドレスを調べる
IP アドレスを指定すると、その機器のエントリだけを表示します。
ping -n 1 192.168.1.20
arp -a 192.168.1.20
pingで相手と通信すると、ARP テーブルに登録されます。arp -aの前にpingを実行しておくのがコツです。
ARP は同じネットワーク内でのみ働きます。インターネット上のサーバーなど、ルーターを越えた先の機器の IP アドレスを指定しても、その MAC アドレスは表示されず、「ARP エントリが見つかりません。」と表示されます。外部の機器と通信した場合に ARP テーブルに載るのは、ルーター(デフォルトゲートウェイ)の IP アドレスのエントリです。
インターフェイスを指定して表示する
Wi-Fi と有線など複数のアダプターがある場合、-Nで表示するインターフェイスを絞り込めます。そのアダプターに割り当てられた IP アドレスを指定します(-aと組み合わせて使います)。
arp -a -N 192.168.1.10
エントリを削除する
ルーターの交換や IP アドレスの付け替えなどで、古い対応が残って通信できないときは、エントリを削除すると再学習されます。管理者として実行したコマンドプロンプトで実行してください。
arp -d 192.168.1.20
arp -d *
*を指定すると、-sで追加した静的エントリも削除されます。削除しても、動的エントリは次に通信した時点で自動的に再登録されます。
arp -dとarp -sは管理者権限が必要です。権限がないと「要求された操作には管理者特権が必要です」というエラーになります。詳しくは関連記事を参照してください。
静的エントリを追加する
-sで IP アドレスと MAC アドレスの対応を手動で登録できます。MAC アドレスは-区切りの 16 進数で指定します。
arp -s 192.168.1.20 aa-bb-cc-44-55-66
静的エントリは、再起動すると消えます。また、IP アドレスはそのパソコンから直接到達できる(同じサブネットの)ものに限られます。永続的に残したい場合は、netsh interface ipv4 add neighborsなどの別の方法が必要です。通常の利用では静的エントリを追加する必要はほとんどなく、誤った値を登録すると通信できなくなるため注意してください。
自分のMACアドレスを調べたいとき
arpは他の機器のエントリを表示するコマンドで、自分自身の MAC アドレスは載りません。自分の MAC アドレスは、ipconfig /allの「物理アドレス」で確認できます。
ipconfig /all
バッチファイルでMACアドレスを取り出す
for /fと組み合わせると、指定した IP アドレスの MAC アドレスを変数に格納できます。
@echo off
setlocal
set TARGET=%~1
if "%TARGET%"=="" (
echo 使い方: get-mac.cmd IPアドレス
exit /b 1
)
ping -n 1 %TARGET% >nul
set MAC=
for /f "tokens=2" %%m in ('arp -a %TARGET% ^| findstr /r "[0-9a-f][0-9a-f]-[0-9a-f][0-9a-f]-"') do set MAC=%%m
if "%MAC%"=="" (
echo %TARGET% のMACアドレスが見つかりませんでした。
exit /b 1
)
echo %TARGET% のMACアドレス: %MAC%
findstrでMACアドレスの形式(aa-bb-のような並び)を含む行だけに絞り、tokens=2で空白区切りの 2 番目の項目(物理アドレス)を取り出します。
まとめ
| やりたいこと | コマンド |
|---|---|
| ARP テーブルを表示する | arp -a |
| 特定の IP アドレスのエントリを表示 | arp -a 192.168.1.20 |
| エントリを 1 件削除する | arp -d 192.168.1.20 |
| すべてのエントリを削除する | arp -d * |
| 静的エントリを追加する | arp -s <IP> <MAC> |
| 自分の MAC アドレスを確認する | ipconfig /all |