pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


ログに出現するMACアドレスにベンダー名を付与するフィルタを書く

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の利用条件を確認しつつご利用ください。