作者:z494627 | 更新時間:2016-05-02 | 瀏覽量:3132
背景:
貝殼物聯提供Dns網關功能,讓無固定IP地址的客戶端記錄自己的IP地址,便于通過web和手機app訪問.之前的實現是updateDns.sh使用sh腳本實現.正好學習lua,并且參照sysLoad.lua的代碼,直接讀取wan口的IP地址進行更新.
之前代碼已經貼過了,貝殼老大說我只貼代碼沒有講解,今天就給大家講解一下核心代碼部分.
預備知識:
1.ubus:為了在OpenWrt中提供守護進程和應用程序間的通訊,開發了ubus項目工程。它包含了守護進程、庫以及一些額外的幫助程序。openwrt中luci實現了對應的類luci.util.ubus,可以通過lua調用。
2.ubus命令:ubus -v list 列出所有的接口,其中包括lan(局域網口)和wan(廣域網,就是你的互聯網接口),我的wan口叫network.interface.wan
3.ubus命令查詢wan口IP: ubus call network.interface.wan status.這里會顯示wan口的所有狀態,因為我的openwrt版本支持IPv6,所以我要找ipv4-address就是我需要找到的IP,里面的address就是外網IP地址.
4.通過ubus獲取IP地址的代碼
--獲取到wan口信息 local address=luci.util.ubus("network.interface.wan","status") or {} --解析出ipv4的地址(ipv4-address是一個lua table,所以取第一個值,其中address就是IP地址 myipv4=address["ipv4-address"][1]["address"]
5.更新Dns網關記錄,這個是照抄sh腳本的,其中DNSIS和DNSPWD是在貝殼注冊的ID和password
local htpres=http.request("http://www.embanju.org/Dns/updateDns?id="..DNSID.."\&ip="..myipv4.."\&pw="..DNSPWD.."\&pt="..DNSPort)