MACアドレスからベンダー情報を調べる方法は過去に2記事書いています。
しかしこの方法はパラメータ渡しで個別に調べる時は良いけど一括で調べたい場合は微妙にめんどくさい。 pslabo.hatenablog.com
この方法はオフラインな環境には向いているし、ログ閲覧時のフィルタとして使えるけれど、OpenWRTやLEDEのようなメモリの少ない環境には向かない。 pslabo.hatenablog.com
というわけで、2つ目の方法のようにフィルタとして動作しつつ、api.macvendors.com を呼ぶ方法を書いてみます。なお API 呼び出しデータはキャッシュさせていますので、MACアドレス先頭3バイトが同じデータが複数回発生する場合の API 問い合わせは省略されます。
なお、環境によっては curl の実行で証明書がチェックできずにエラーになると思いますが、その場合は --insecure をつければとりあえずエラーは止まります。
#!/usr/bin/awk -f match ($0, /([0-9A-Fa-f]{2}(:[0-9A-Fa-f]{2}){5})/) { macaddr=substr($0,RSTART,RLENGTH); macaddr3=substr(macaddr,0,8) #print macaddr #print macaddr3 if ( length(macaddr2vendor[macaddr3]) == 0 ) { cmd = "curl --silent https://api.macvendors.com/" macaddr #cmd = "curl --insecure --silent https://api.macvendors.com/" macaddr #print cmd cmd | getline vendor close(cmd) macaddr2vendor[macaddr3]=vendor system("sleep 1") } else { vendor=macaddr2vendor[macaddr3] } macaddr_vendor=sprintf( "%s=%s", macaddr, vendor ); #print macaddr_vendor gsub(macaddr,macaddr_vendor); print $0 }
これを使うと、例えばこんなログが...
Sat Dec 23 07:40:05 2017 daemon.notice hostapd: wlan0: AP-STA-CONNECTED b8:27:eb:xx:xx:xx
こんな風に表示されるわけです。
Sat Dec 23 07:40:05 2017 daemon.notice hostapd: wlan0: AP-STA-CONNECTED b8:27:eb:xx:xx:xx=Raspberry Pi Foundation
利用に当たっては、api.macvendors.comの利用条件を確認しつつご利用ください。