arpとは
arp(Addresss Resolution Protocol)はざっくり言うと、IPアドレスからMACアドレスを取得するプロトコルです。arpについて詳しい事はここでは解説しませんが、端末同士の通信にはIPアドレスに加えてMACアドレスも必要なので、普段意識していないかもしれませんが実はこのarpというプロトコルは重要なものです。
arpコマンドを使うとarpテーブルという同セグメント内のホスト(同じネットワークにいるホスト)のIPアドレスとMACアドレスの紐づきを確認することが出来ます。IPアドレスは変わりますがMACアドレスは不変です。つまり「あのホストのIPアドレス何だっけ?」みたいな状況で、arpを上手く利用する事ですぐにMACアドレスから調べる事が可能になります。今回はその方法をまとめました。
ちなみにarpコマンド単体でMACアドレスとIPアドレスの解決を行う方法は無さそうでしたので、今回はnmapコマンドを使用します。頑張ってarp単体で解決する方法を探してみましたが、nmapで出来る簡単な方法を覚える方が幸せになれると判断しました。
※調べられるのは同じセグメント内のホストに限ります
準備
nmapをインストールします。
$ brew install nmap
手順
まずはIPアドレスを知りたい機器のMACアドレスを確認しておいて下さい。(可能なら)
次に下記のコマンドを実行します。
$ nmap -sP [NWアドレス/サブネットマスク]
※例えば192.168.1.0/24みたいな形式
このコマンドでは指定したNWアドレス内の全てのIPアドレスに対してPINGを打っています。そして応答のあった端末のMACアドレスをローカルホストにキャッシュしていきます。総当たりでPING疎通確認を行うため多少時間が掛かります。
nmapが完了したら、次のコマンドでarpテーブルを確認して下さい。
$ arp -a
先程のnmapでarpテーブルが更新されたはずです。最初に取得したMACアドレスでgrepを掛けるとIPアドレスを確認する事が出来ます。
以上です。
終わりに
最後にユースケースを紹介するためにも何故この方法をまとめたかを話しておきます。
自分はこの記事のように、ラズパイをリモコンの代わりにしているのですが、電源が足りていないのかラズパイが落ちてしまうのです。そうしてリモコンプログラムを再実行するために再起動してsshを試みるのですがIPアドレスが変わってしまい接続出来なくなってしまうのです。
だから毎度毎度ラズパイのIPアドレスを取得するためにキーボードを繋いだりして本体から調べていて大変面倒でした。これからはarpを利用してラズパイのIPを調べる事が出来ます^^