arp

ここでは、Windows2000/XP(ウィンドウズ2000/XP)を使ってネットワークの構築やトラブルシューティングを行う上で最低限知っておきたいコマンドのひとつであるarpを紹介します。 arpはIPアドレスとMACアドレスの対応表であるARP(Address Resolution Protocol)テーブルの表示や更新を行なうためのコマンドです。

arpコマンドを使ってARPテーブルを設定するような状況はあまり発生しませんが、ARPテーブルを見るという手法を知っているといざという時に便利です。 私がarpコマンドを使う状況で最も多いのが、ウィルスに犯されたPCの物理的な位置を発見する時です。 まず、何らかの方法でウィルスに犯されたPCのIPアドレスがわかったとします。 しかし、IPアドレスまではわかっても物理的にどこにあるかわかりません。 そこで、arpコマンドを使ってウィルスに犯されたPCのMACアドレスを調べます。 MACアドレスがわかったら、次はスイッチにログインしてそのMACアドレスのマシンがつながっているポートを探します。 ウィルスに犯されたPCが接続されているスイッチの物理ポートがわかれば容易に物理的位置の発見が出来ます。

これ以外にももちろん使い道はありますが、最近の私は上記の方法のためにarpを使うことが多いですね。

1. まずはやってみましょう

では、実際にやってみましょう。 登録されているARPテーブルを参照するだけならば非常に簡単です。 まず、DOSプロンプトを起動します。 次にそのDOSプロンプトで「arp -a」と打ち込みます。 すると、図1のような画面になります。

図1. arp -a 実行例
C:\> arp -a

Interface: 192.168.0.2 on Interface 0x1000002

  Internet Address     Physical Address      Type
  192.168.0.1          00-e1-01-6e-3c-08     dynamic
  192.168.0.3          00-29-b8-cd-19-52     dynamic

arp -aを実行して最初に表示されるのがインターフェース(Interface)の情報です。 ARPテーブルはインターフェース毎に管理されます。 これは、IPアドレスとMACアドレスの組がどのインターフェースから得られた情報なのかを分ける必要があるからです。 インターフェースが一つしかない場合には問題がないのですが、複数のインターフェースを持つPCでは、インターフェース毎にARPテーブルの情報を管理していないと、どのインターフェースから情報が得られたのかがわからなくなってしまいます。 図1の例では、PCには一つのインターフェース(Windows内でのIDは0x1000002)しか存在しておらず、同一セグメントに存在する機器は2台である事がわかります。 (ただし、機器が2台だけであるとは限りません。わかっている機器が2台であるというだけです。)

次にわかるのが、192.168.0.1というIPアドレスを持つインターフェースのMACアドレスは「00-e1-01-6e-3c-08」であることと、192.168.0.3というIPアドレスを持つインターフェースのMACアドレスは「00-29-b8-cd-19-52」であることです。

それぞれのエントリの最後に書いてある「Type」の「dynamic」というのは、ARPテーブルのエントリのタイプを表しています。 Windowsには、dynamicとstaticの2タイプがあります。 dynamicは、通常のキャッシュエントリを表しています。 これはキャッシュなので、一定時間UPDATEがないと削除されます。 (dynamicタイプのARPエントリは、そのエントリに対応するインターフェースから新しいパケットを受け取ると更新されます。更新され続けている間は削除されません。) staticタイプは、ユーザ設定により追加されたARPエントリです。 staticタイプはユーザが明示的に削除するまで存在し続けます。 staticタイプのエントリは「arp -s 192.168.0.5 00-ab-cd-ef-00-11」のようにして追加します。

ARPテーブルからエントリを削除したい場合には、「arp -d 192.168.0.5」のようにするとARPテーブルからエントリを削除できます。 当然ですが、「arp -a」コマンドで表示されないエントリは(エントリが無いものは)削除できません。

YouTubeで技術解説やってます!