pslaboが試したことの記録

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

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

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


OpenWRT/LEDEの各種ログの閲覧時にMACアドレス情報にホスト名を追記するスクリプトを書いてみる

OpenWRT/LEDEではログ表示に logread コマンドを用いるわけですが、このログには WiFi への接続情報や DHCP に関する情報が出力されており、ここには MAC アドレスも記録されています。

この MAC アドレスとホスト名の紐付けは /tmp/dhcp.leases に記録されているのですけど、どの機材がどのようにアクセスしてきたかを確認したいときに logread と dhcp.leases を交互に見比べれるのは面倒です。

そこで、dhcp.leases を使って MACアドレス→ホスト名の変換を行ってくれるフィルタを描いてみました。

使用前、使用後の比較

普通に arp するとこんな感じですね。

root@LEDE:/# arp
IP address       HW type     Flags       HW address            Mask     Device
192.168.1.80     0x1         0x2         b8:e8:56:00:00:00     *        br-lan
192.168.1.1      0x1         0x2         00:26:92:03:be:e8     *        br-lan
192.168.1.78     0x1         0x2         f4:0f:24:00:00:00     *        br-lan

これはあまりわかりやすくない。で、今回作成した mac2hostname を使うとこんな感じ。

root@LEDE:/# arp | mac2hostname 
IP address       HW type     Flags       HW address            Mask     Device
192.168.1.80     0x1         0x2         b8:e8:56:00:00:00(Macbook)     *        br-lan
192.168.1.1      0x1         0x2         00:26:92:03:be:e8     *        br-lan
192.168.1.78     0x1         0x2         f4:0f:24:00:00:00(iPhone7)     *        br-lan

これならわかりやすい。そして置換が行われていない表示されるホスト名は各機材で設定のものが用いられます。ホスト名が追記されない箇所はIPアドレス固定割当でしょうから特に支障はないはず。

#!/usr/bin/awk -f
#
# /usr/bin/mac2hostname
#
BEGIN {
    # DHCPリースの読み込み
    readDHCPLeases();
}

{
    "date -r /tmp/dhcp.leases +%s" | getline LastUpdateDHCPLease

    # DHCPリースが更新されていたら再読み込みする
    if ( LastCheckDHCPLease < LastUpdateHDCPLease ) {
        readDHCPLeases();
    }

    # 1行読み込むたびに既知のMACADDRESSを探してホスト名に置換する
    for (macaddr in mac2hostname) {
        gsub(macaddr, mac2hostname[macaddr] "(" macaddr ")" )
    }
    print $0
    fflush()
}

function readDHCPLeases() {
    LastCheckDHCPLease = systime();
    while((getline < "/tmp/dhcp.leases") > 0) {
        mac2hostname[$2]=$4
    }
}