arpで表示されるMACアドレスにベンダー名も表示したい

水曜日, 2月 03, 2021

UNIX

t f B! P L

以下のコマンドで同一LAN内の他のデバイスのIPアドレスとMACアドレスを確認できる。
arp -a

スマートスピーカー、キャストデバイスやらの普及で家の中にプライベートIPアドレスをもつデバイスが増えた。

そういう人ほどarp -aで大量のMACアドレスが表示されるはず。

arpコマンドで表示されるMACアドレスのベンダーが知りたい

家のデバイスのMACアドレスくらい把握してるよねって人や、有名メーカーのMACアドレス先頭24ビットくらい暗記しているよねって人は読む必要ないです。

そんな人なかなかいないと思いますが笑

MACアドレスは48ビットで、最初の24ビットがベンダーコード(メーカーごとに固有の番号)。

つまり、最初の24ビットを見るとそのデバイスがどこのメーカー製なのかわかる。

実際は、8ビットごとにコロン区切りで6分割され、16進数で表記される。一区切りが8ビット、16進数は4ビットなので、2桁の16進数が6個ならぶ格好になる。

ただし、これは数字の羅列でしかないので、どのIPアドレスとMACアドレスが、家の中にあるどのデバイスなのかはぱっと見わからない。

実際の用途しては、何か不具合が起きていて、デバイスがちゃんとLANに繋がっているか、つまり、ちゃんとIPアドレスが割り振られてarpでMACアドレスが表示されているかを知りたいケースが大半だと思う。

ソリューション

まず、MACアドレスの管理団体であるIEEEが以下のURLでテキスト形式でMACアドレス・ベンダー対応表を公開しているので、これをダウンロードしておく。

http://standards-oui.ieee.org/oui/oui.txt

ちなみに、このファイルは無料でDLできるので、MACアドレスからベンダー名を検索するサービスはネット上に無数にある。

自分の持っている機器のMACアドレスからベンダー名を調べるのは、そこそこ好奇心を満たす行為なので、何か不具合で困っていなかったとしても、需要があるのかもしれない。

次に以下のコマンドを実行する。

arp -a | sed -nr 's/^.+?(..):(..):(..):(..):(..):(..).+$/\1\2\3/p' \
| tr a-z A-Z | xargs -IXXX grep oui.txt -e XXX

arpで見つけたMACアドレスをsedで取り出し、trでUpperCaseへ変換した後、1行ごとにout.txtの中から検索している。

余談

余談というかツッコミどころがいくつかある。

まず、arp -aでは、実行したパソコンが知っている(=通信した)IP・MACアドレスの対応表しか出力されない。
そのため、pingなどであらかじめ疎通確認を行いarpのテーブルに追加しておく必要がある。

次に、grepする関係で、上記コマンドではMACアドレスの上位24ビットしか表示されない。
例えば、Google製のChromecastとGoogle Nest Miniを両方所持していると、先頭24ビットだけではどっちがどっちかわからない場合がある。
これは、シェルスクリプトを修正するなりして解決可能だが。

最後になりますが、arp-scanという気の効いたコマンドもあります。

QooQ