openwrt updateDns.lua代码分析

作者:z494627 | 更新时间:2016-05-02 | 浏览量:3414

背景:

  贝壳物联提供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)



评论:共2条

贝壳物联 评论于:2016-05-02 16:17:04
多谢分享!!
WECAN 评论于:2017-08-27 16:18:00
感谢楼主的分享啊!
返回顶部