DD-WRTからOpenWrtに移行するにあたって、デバイスが多いと何がつながってるのか調べるのにMACアドレス検索を使っていたんだけど、DD-WRTではクリックするだけで見れていたのにOpenWrtのLuCIにはそういう機能がないのでJavaScriptで試してみた。
最初ブックマークレットを作ってみたんだけど、自動リフレッシュのタイミングでリンクが消えてしまうのでluci.jsに追記する形にしてみた。
(function(){function l(n){let w=document.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,!1),t,m=/\b([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})\b/g,r=[];while(t=w.nextNode())t.parentNode&&"SPAN"!==t.parentNode.tagName&&"A"!==t.parentNode.tagName&&"SCRIPT"!==t.parentNode.tagName&&"STYLE"!==t.parentNode.tagName&&m.test(t.nodeValue)&&r.push(t);r.forEach(e=>{let p=e.parentNode;if(!p)return;let h=e.nodeValue.replace(m,o=>{let oui=o.replace(/[:-]/g,"").substring(0,6).toLowerCase();let u=["https:","","uic.jp","mac","address",oui,""].join("/");return'<span data-mac-link="1" title="MAC Vender: '+o+'" style="color:#0066cc;text-decoration:underline;font-weight:bold;cursor:pointer;" onclick="window.open(\''+u+'\',\'_blank\',\'width=800,height=600,scrollbars=yes,resizable=yes\');">'+o+"</span>"});let s=document.createElement("span");s.innerHTML=h;while(s.firstChild)p.insertBefore(s.firstChild,e);p.removeChild(e)})}let v=new MutationObserver(n=>{n.forEach(w=>{w.addedNodes.forEach(t=>{1===t.nodeType&&!t.querySelector('[data-mac-link="1"]')&&l(t)})})});if("loading"===document.readyState)window.addEventListener("DOMContentLoaded",()=>{l(document.body);v.observe(document.body,{childList:!0,subtree:!0})});else{l(document.body);v.observe(document.body,{childList:!0,subtree:!0})}})();
この一行を/www/luci-static/resources/luci.jsの一番最後に追記するだけ。後は設定画面を開いてCtrl+F5を押してリロードするとあらゆるMACアドレス表示部分がリンクに変更されているはず。
これでhostnameが表示されないデバイスでも、デバイスのメーカーがわかりやすくなったのでデバイスが増えても安心。MACアドレスをクリックするとこんな感じで検索サイトをそのまま小さいウインドウで出してくれる。DD-WRTの機能としては地味に便利だったのでこれでOpenWrtのLuCIも便利になったな。

