ARPを使ってIPアドレスからMACアドレスを調べる

MACアドレスを確認したい機器のIPアドレスを知っていれば、IPアドレスからMACアドレスを知ることができます。ただし、同一ネットワークに所属している場合に限られます。
下の図の例で説明すると、端末Aから確認を実施する場合、サーバーAとサーバーBは同じネットワークに所属しているので、MACアドレスを確認できます。しかしながら、サーバーCとサーバーDは端末Aとは異なるネットワークに所属するため、MACアドレスを確認することはできません。

確認方法

確認したい端末にping を実行し、その後、arp -a コマンドでARPテーブルを表示するだけです。ARPテーブルはIPアドレスとMACアドレスの対応表です。ちなみにARPは「あーぷ」と読みます。

1. 調べたい機器のIPアドレスに対してpingを実行する

サーバーAのMACアドレスを調べたい場合は、まずサーバーAのIPをアドレスに対してpingを実行します。pingを実行することで、IPアドレスに対するMACアドレスがARPテーブルに書き込まれます。

>ping 192.168.1.21

192.168.1.21 に ping を送信しています 32 バイトのデータ:
192.168.1.21 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.1.21 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.1.21 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.1.21 からの応答: バイト数 =32 時間 <1ms TTL=128

192.168.1.21 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms

2. ARPテーブルを表示してIPアドレスとMACアドレスの対応を確認する

次に arp -a コマンドでARPテーブルを表示します。サーバーA(192.168.1.21)のMACアドレスが 5e-e2-16-8c-32-b5 であることがわかります。

インターフェイス: 192.168.1.3 — 0xc
インターネット アドレス 物理アドレス 種類
192.168.1.1 8c-dc-02-7c-31-05 動的
192.168.1.21 5e-e2-16-8c-32-b5 動的
192.168.1.255 ff-ff-ff-ff-ff-ff 静的
224.0.0.22 01-00-5e-00-00-16 静的
224.0.0.251 01-00-5e-00-00-fb 静的
224.0.0.252 01-00-5e-00-00-fc 静的
239.255.255.250 01-00-5e-7f-ff-fa 静的

仕組み

端末AがサーバーAに対して通信する場合、端末AはサーバーAのMACアドレスを知る必要があります。なぜなら、MACアドレスを宛先に指定してフレームと呼ばれる単位で通信をおこなうからです。

そこでまず、端末Aは自分が所属するネットワーク全体に対して「192.168.21は誰のIP?」というメッセージを送ります(①)。これをARPリクエストと呼びます。このときの宛先はブロードキャストアドレス(ff-ff-ff-ff-ff-ff)となります。

メッセージを受けとったサーバーAは「192.168.21は私のIPです」という応答を返します(②)。これをARPリプライと呼びます。

端末AはIPアドレス192.168.21とMACアドレス 5e-e2-16-8c-32-b5 の対応をARPテーブルに書き込みます。端末Aは次回からARPリクエストを省略して、サーバーAと通信がおこなえるようになります。

このあたりの仕組を勉強したい人には、以下の本をおすすめします。

以上。

<参考>
Linuxで動かしながら学ぶTCP/IPネットワーク入門
マスタリングTCP/IP 入門編(第6版)

コメント

大変申し訳ございません。当サイトは広告収入で運営しております。

当サイトを閲覧を継続するには広告ブロッカーをオフにするか、当サイトをホワイトリストに追加したうえで、再読み込みをしてください。