• <table id="0ws66"></table>
  • <noscript id="0ws66"><source id="0ws66"></source></noscript>

    openwrt updateDns.lua代碼分析

    作者: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)



    評論:共2條

    貝殼物聯 評論于:2016-05-02 16:17:04
    多謝分享!!
    WECAN 評論于:2017-08-27 16:18:00
    感謝樓主的分享啊!
    返回頂部
    国产综合在线