作者:z494627 | 更新时间:2016-05-02 | 浏览量:3671
背景:
贝壳物联提供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.bigiot.net/Dns/updateDns?id="..DNSID.."\&ip="..myipv4.."\&pw="..DNSPWD.."\&pt="..DNSPort)