OpenWrt packages
Sign in or create your account | Project List | Help
OpenWrt packages Git Source Tree
Root/
| 1 | #!/usr/bin/env lua |
| 2 | |
| 3 | local io = require "io" |
| 4 | local os = require "os" |
| 5 | local table = require "table" |
| 6 | |
| 7 | function trim (s) |
| 8 | return (string.gsub(s, "^%s*(.-)%s*$", "%1")) |
| 9 | end |
| 10 | |
| 11 | function split(delim, text) |
| 12 | local list = {} |
| 13 | if string.len(text) <= 0 then |
| 14 | return list |
| 15 | end |
| 16 | delim = delim or "" |
| 17 | local pos = 1 |
| 18 | -- if delim matches empty string then it would give an endless loop |
| 19 | if string.find("", delim, 1) and delim ~= "" then |
| 20 | error("delim matches empty string!") |
| 21 | end |
| 22 | local first, last |
| 23 | while 1 do |
| 24 | if delim ~= "" then |
| 25 | first, last = string.find(text, delim, pos) |
| 26 | else |
| 27 | first, last = string.find(text, "%s+", pos) |
| 28 | if first == 1 then |
| 29 | pos = last+1 |
| 30 | first, last = string.find(text, "%s+", pos) |
| 31 | end |
| 32 | end |
| 33 | if first then -- found? |
| 34 | table.insert(list, string.sub(text, pos, first-1)) |
| 35 | pos = last+1 |
| 36 | else |
| 37 | table.insert(list, string.sub(text, pos)) |
| 38 | break |
| 39 | end |
| 40 | end |
| 41 | return list |
| 42 | end |
| 43 | |
| 44 | function exec(command) |
| 45 | local pp = io.popen(command) |
| 46 | local data = pp:read("*a") |
| 47 | pp:close() |
| 48 | |
| 49 | return data |
| 50 | end |
| 51 | |
| 52 | function iwscan(iface) |
| 53 | local siface = iface or "" |
| 54 | local cnt = exec("iwlist "..siface.." scan 2>/dev/null") |
| 55 | local iws = {} |
| 56 | |
| 57 | cnt = trim(cnt) |
| 58 | for i, l in pairs(split("\n Cell", cnt)) do |
| 59 | local ESSID = l:match("ESSID:\"(.-)\"") |
| 60 | if ESSID then |
| 61 | local Q = l:match("Quality[:=](.-)[ ]") |
| 62 | local A = l:match("Authentication Suites.- : (.-)\n") |
| 63 | local P = l:match("Pairwise Ciphers.- : (.-)\n") |
| 64 | |
| 65 | local enc |
| 66 | if not l:find("Encryption key:on") then |
| 67 | enc = "none" |
| 68 | else |
| 69 | local wpa = l:find("WPA Version 1") |
| 70 | local rsn = l:find("WPA2 Version 1") |
| 71 | if wpa and rsn then enc = "psk+psk2" |
| 72 | elseif rsn then enc = "psk2" |
| 73 | elseif wpa then enc = "psk" |
| 74 | else enc = "wep" end |
| 75 | end |
| 76 | |
| 77 | local a = Q:match("(%d-)/") |
| 78 | local b = Q:match("/(%d-)$") |
| 79 | Q = math.floor(tonumber(a)/tonumber(b)*100) |
| 80 | |
| 81 | local r = Q .. "%," .. ESSID .. "," .. enc |
| 82 | |
| 83 | table.insert(iws, r) |
| 84 | end |
| 85 | end |
| 86 | |
| 87 | return iws |
| 88 | end |
| 89 | |
| 90 | local t = iwscan("wlan0") |
| 91 | if t == {} then |
| 92 | print(); |
| 93 | else |
| 94 | for k,v in pairs(t) do print(v) end |
| 95 | end |
| 96 | |
| 97 |
