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 } }