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