arpとは
arp(Addresss Resolution Protocol)はざっくり言うと、IPアドレスからMACアドレスを取得するプロトコルです。
普段意識していないかもしれませんが、端末同士の通信にはIPアドレスに加えてMACアドレスも必要なものです。そのためarpプロトコルは見かけによらず重要な働きをしています。
arp
コマンドを使うとarpテーブル呼ばれる同セグメント内のホスト(同じネットワークにいるホスト)のIPアドレスとMACアドレスの紐づきの一覧を確認することが出来ます。
IPアドレスは変わりますがMACアドレスは不変です。つまり「あのホストのIPアドレス何だっけ?」みたいな状況の時に、arpプロトコルを上手く利用する事ですぐにMACアドレスからIPアドレスを調べる事が可能になります。今回はその方法をまとめました。
調べてみたところ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を調べる事が出来ます^^