1. 程式人生 > >mt7688 openwrt之lua初探

mt7688 openwrt之lua初探

Openwrt操作無線介面有很多值得借鑑地方,如獲取dhcp列表,獲取無線列表,獲取連線流量等。而這一切依靠Lua


背景:需要通過iw獲取無線列表,並根據無線加密型別進行連線。參考openwrt原生介面:


1.安裝lua
官網預設映象居然沒有lua的支援,那麼安裝之:
opkg install luci
/etc/init.d/uhttpd start


2.lua目錄相關資訊;
/usr/lib/lua/luci/controller/  controller實現目錄
/usr/lib/lua/luci/model/cbi/admin_network/wifi_add.lua    這裡應該是操作iw的檔案


一些對應關係:
一番搜尋後發現此頁面的原始碼在系統的/usr/lib/lua/luci/view/admin_network/wifi_join.htm檔案裡,對應openwrt的原始碼路徑
為./feeds/luci/modules/admin-full/luasrc/view/admin_network/wifi_join.htm。






由local iw = luci.sys.wifi.getiwinfo(dev)找到sys.lua模組,路徑/usr/lib/lua/luci/sys.lua,對應openwrt原始碼位置./feeds/luci/modules/base/luasrc/sys.lua


[email protected]
:/usr/lib/lua/luci# grep "scanlist" * -r
view/admin_network/wifi_join.htm:       function scanlist(times)
view/admin_network/wifi_join.htm:                       for k, v in ipairs(iw.scanlist or { }) do
view/admin_network/wifi_join.htm:                       <% for i, net in ipairs(scanlist(3)) do net.encryption = net.encryption or { } %>
[email protected]
:/usr/lib/lua/luci#


[email protected]:/usr/lib/lua# grep "scanlist" * -r
iwinfo.so:scanlist


除錯思路:
https://my.oschina.net/osbin/blog/298526


目前openwrt具體實現:


function format_wifi_encryption(info)
if info.wep == true then
return "WEP"
elseif info.wpa > 0 then
return translatef("<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>",
table.concat(info.pair_ciphers, ", "),
table.concat(info.group_ciphers, ", "),
(info.wpa == 3) and translate("mixed WPA/WPA2")
or (info.wpa == 2 and "WPA2" or "WPA"),
table.concat(info.auth_suites, ", ")
)
elseif info.enabled then
return "<em>%s</em>" % translate("unknown")
else
return "<em>%s</em>" % translate("open")
end
end


網友板:
#!/usr/bin/lua


dev = arg[1]
local sys = require "luci.sys"
local utl = require "luci.util"
local iw = luci.sys.wifi.getiwinfo(dev)


    function scanlist(times)
        local i, k, v
        local l = { }
        local s = { }


        for i = 1, times do
            for k, v in ipairs(iw.scanlist or { }) do
                if not s[v.bssid] then
                    l[#l+1] = v
                    s[v.bssid] = true
                end
            end
        end


        return l
    end


    function format_wifi_encryption(info)
        if info.wep == true then
            return "WEP"
        elseif info.wpa > 0 then
            return string.format("Pairwise: %s / Group: %s >%s - %s",
                table.concat(info.pair_ciphers, ", "),
                table.concat(info.group_ciphers, ", "),
                (info.wpa == 3) and string.format("mixed WPA/WPA2")
                    or (info.wpa == 2 and "WPA2" or "WPA"),
                table.concat(info.auth_suites, ", ")
            )
        elseif info.enabled then
            return unknown
        else
            return open
        end
    end




for i, net in ipairs(scanlist(3)) do
    net.encryption = net.encryption or { }
    print("channel:",net.channel);
    print("ssid:",net.ssid);
    print("bssid:",net.bssid);
    print("Mode:",net.mode);
    wep=net.encryption.wep and 1 or 0
    
    print("Encryption:",format_wifi_encryption(net.encryption));
    print("");
end

相關推薦

mt7688 openwrtlua初探

Openwrt操作無線介面有很多值得借鑑地方,如獲取dhcp列表,獲取無線列表,獲取連線流量等。而這一切依靠Lua 背景:需要通過iw獲取無線列表,並根據無線加密型別進行連線。參考openwrt原生介面: 1.安裝lua 官網預設映象居然沒有lua的支援,那麼安裝之: op

openwrt18.06版本原始碼編譯mt7688平臺韌體說明

映象編譯說明: 新增nodejs功能,參照OpenWrt Node.js Packages (nodejs),遇到Illegal instruction問題,參照部落格openwrt 編譯node.js功能(解決Illegal instruction錯誤),最好是把networ

Lua程序設計————Lua面向對象1

pre cal oca () cti 輸出 alt 想象 完整 完整代碼 local mt = {} mt.__add = function(t1,t2) print("兩個Table 相加的時候會調用我") end local t1 = {} loca

Lua程序設計————Lua面向對象2

eight 9.png {} turn one 結果 none 程序設計 key ----------------------------------------------------------- Lua面向對象3 local smartMan = { n

初玩OpenWRT編譯TP-Link WR841N V8固件

lan targe 分享 .com log 編輯 nwr 技術 blog 占坑,待編輯,先放一張圖 初玩OpenWRT之編譯TP-Link WR841N V8固件

Java集合初探(一)

lin 數據改變 排序。 方法 規則 找不到 集合 回收 for循環 一、集合概述、區別 集合是一種容器,數組也是一種容器 在Java編程中,裝各種各樣的對象(引用類型)的叫做容器。 為什麽出現集合類? 面向對象語言對事物的體現都是以對象的形式,所以為了方便對多個對象的操作

Java集合初探(二)Iterator(叠代器),collections,打包/解包(裝箱拆箱),泛型(Generic),comparable接口

基本 generate 等於 框架 ring bin list() each 是否 Iterator(叠代器) 所有實現了Collection接口的容器都有一個iterator方法, 用來返回一個實現了Iterator接口的對象 Iterator對象稱作叠代器, 用來

Python Web框架Django初探(一)

python django easy_install pip Python Web框架之Django初探 Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MVC的框架模式,即模型M,視圖V和控制器C。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站

小白學習大數據測試hadoop初探

itl atan 運行 -o dfs 應用 一起 ext testing Hadoop的歷史這裏就不多說了,網上很多資料,總而言之對於hadoop谷歌和雅虎對於ta的貢獻功不可沒。更多介紹請自行查看這裏:https://baike.baidu.com/item/Hadoop

[原創]Sharding-SphereProxy初探

利用 兩種模式 概覽 map benchmark 高水位 內存耗盡 tint 連接 大家好,拓海(https://github.com/tuohai666)今天為大家分享Sharding-Sphere推出的重磅產品:Sharding-Proxy!在之前閃亮登場的Shar

iOS開發Runtime初探

一:基礎概念 RunTime簡稱執行時,就是系統在執行的時候的一些機制,其中最主要的是訊息機制。 對於C語言,函式的呼叫在編譯的時候會決定呼叫哪個函式,編譯完成之後直接順序執行,無任何二義性。 OC的函式呼叫成為訊息傳送。屬於動態呼叫過程。在編譯的時候並不能決定真正呼叫哪個函式(

Python的學習筆記DAY7---關於爬蟲(2)Scrapy初探

        首先是安裝,python3+windows10 64位。         安裝Scrapy,安裝,直接pip install Scrapy.....下載了半天報錯。。好像是沒有lxml這

013-熱更新lua語言六

學習到現在我們對lua也是具有很深的瞭解,知道lua是熱更新的重要語言,所以我們要繼續學習lua。今天我們學習的是lua檔案 Lua檔案 I/O 其實這個都是我們是很熟悉的,它的內容也沒有多少。記得我們在考江蘇二級的時候,最後一題總是會考這個,其中最有名的是printf與fprintf了。只要知道一個是往

Java IOFileChannel初探

概述 對於檔案的複製,平時我們都是使用輸入輸出流進行操作,利用原始檔創建出一個輸入流,然後利用目標檔案創建出一個輸出流,最後將輸入流的資料讀取寫入到輸出流中。這樣也是可以進行操作的。但是利用fileChannel是很有用的一個方式。它能直接連線輸入輸出流的檔案通道,將資料直接寫入到目標檔案中去。

openwrt一個Makefile例項

一個Makefile例項 Makefile規則比較複雜,小白只能一點點學習,這裡以一個Makefile例項說明Makefile的一般結構 include $(TOPDIR)/rules.mk#一般在 Makefile 的開頭 PKG_NAME:=ralink-wifi-mt768

openwrt原始碼編譯node

openwrt原始碼檔案目錄說明 tools和toolchain:包含一些通用命令, 用來生成韌體, 編譯器, 和C庫 build_dir/host:臨時目錄, 用來儲存不依賴於目標平臺的工具 build_dir/toolchain:儲存依賴

openwrt原始碼編譯以及網路配置

參考連結 OpenWrt入門 OpenWrt開發者指南 智慧路由器開發指南核心筆記 openwrt原始碼編譯 搭建編譯環境 lede與openwrt合併後的編譯 openwrt的feeds機制 make原始碼時,根據feeds對映的地址自動下

【小白學LuaLua變長引數和unpack函式

一、簡介   Lua的變長引數和unpack函式在實際的開發中應用的還挺多的,比如在設計print函式的時候,需要支援對多個變數進行列印輸出,這時我們就需要用到Lua中的變長引數和unpack函數了。 二、Lua變長引數與unpack函式   Lua中支援可變引數,用 ... 表示。比如定義下面的這樣一

pythonunittest初探

最近幾天苦心鑽研unittest,終於略有所得,所以想來跟大家分享一下。有關python和unittest的基礎知識部分就不在一一細說,相信各位也不是小白了。如果需要我整理基礎知識,歡迎留言,我會看情況整理出來。下面直接貼上我的demo模板程式碼,註釋部分主要是思路,有疏漏的地方歡迎大佬們指正。 #!

Android四大應用元件ContentProvider初探

理解 首先談一談為什麼要有ContentProvider? 當一個應用想要訪問另一個應用的資料庫時,由於每個應用的資料庫檔案時應用私有的,不能直接訪問,這時,被訪問的應用就需要一個對外的資料庫內容提供者,也就是ContentProvider。 <p