SyntaxHighlighter

---SyntaxHighlighter ウィジェット---

2015年12月14日月曜日

FlashAirの設定ファイルを自動で書き換えたい人向けLuaスクリプト

FlashAirの設定ファイルを自動で書き換えたい人向けLuaスクリプト。
今までの手抜き置換実装ではなく、本格的にCONFIG丸ごと書き換えられるように作ってみた。
配布Luaスクリプトで設定を自動で書き換えたい場合なんかにどうぞ。
動作確認はしていますが、必ず動作する・設定ファイルを破壊しない保証はありません。

三条項BSDライセンス。

--設定データテーブル。無くてもいいっちゃいい。
ini={
    APPAUTOTIME="",
    APPINFO="",
    APPNAME="",
    APPNETWORKKEY="",
    APPSSID="",
    BRGNETWORKKEY="",
    BRGSSID="",
    CID="",
    CIPATH="",
    DELCGI="",
    LUA_RUN_SCRIPT="",
    LUA_SD_EVENT="",
    MASTERCODE="",
    PRODUCT="",
    STA_RETRY_CT="",
    TIMEZONE="",
    UPDIR="",
    VENDOR="",
    VERSION="",
    IP_Address="",
    Subnet_Mask="",
    Default_Gateway="",
    DNS_Server1="",
    DNS_Server2="",
    Proxy_Name="",
    Port_Number="",
    APPMODE="",
    DNSMODE="",
    IFMODE="",
    LOCK="",
    NOISE_CANCEL="",
    UPLOAD="",
    WEBDAV="",
    DHCP_Enabled="",
    Proxy_Enabled="",
 
--[[
      APPCHANNEL="",
    HTTPDMODE="",
    HTTPDUSER="",
    HTTPDPASS="",
    APPMINTIME="",
    APPMAXTIME="",
    REDIRECT="",
    APPEXT="",
    APPTYPE="",
    AGINGTIME="",
    WLANSTAMODE="",
    DOMAINNAME="",
    COMMAND="",
    APMODE="",
    NOGATEWAYMODE="",
    SCRIPT="",
]]--
}

-- CONFIG READER ---
print "HTTP/1.1 200 OK\nPragma: no-cache\nCache-Control: no-cache\n";

--READ START
f = io.open("/SD_WLAN/CONFIG","r");
if(f==nil) then print ("Not Found.");return; end;

--ANALYZE
for l in f:lines() do
    s = string.gsub(l," ","");
    h = string.sub(s,1,1);
    print(s);
    if (h ~= "[") then
        for key, value in string.gmatch(s, "([^=]+)=([^=]+)") do
            ini[key] = string.gsub(value,"\r","");
        end
    end
end

f:close();

--CONFIG...
--ここで書き換えたい設定を記入する。
--ここで変更しなかったデータはそのまま残る。(順序はシャッフルされるが)

ini["DNSMODE"]="0";

--DELETE VOID KEY
for key,value in pairs(ini) do
    if(value == "")then
        ini[key]=nil;  
    end
end

--OUTPUT a-z
fa.rename("/SD_WLAN/CONFIG","/SD_WLAN/CONFIG.bak");

fo = io.open("/SD_WLAN/CONFIG","w");

print("-----")
print("[Vendor]\n");
fo:write("[Vendor]\r\n\r\n");
for i=0,26,1 do
    n = 0x61 + i;
    for key,value in pairs(ini) do
        h = string.byte(string.lower(key));
        if(h == n) then
            print(key.."="..value.."");
            fo:write(key.."="..value.."\r\n");
          end
    end
end
fo:close();

print "Done";

0 件のコメント:

コメントを投稿