小米路由器操作源码,源码实现了登录路由器,获取WIFI信息,获取WAN信息,连接与断开拨号,重启路由器,计算_nonceCreat,提取后台主页。
.版本 2
.支持库 spec
.子程序 登录路由器, 逻辑型, 公开
.参数 password, 文本型
.参数 错误原因, 文本型, 参考 可空
.局部变量 str, 文本型
.局部变量 Code, 文本型
.局部变量 Json, 类_json
str = 到文本 (网页_访问 (“//192.168.31.1/cgi-bin/luci/web”)) ' //取数据
数据类.key = 文本_取出中间文本 (str, “key: '”, “',”)
数据类.nonce = 计算_nonceCreat ()
数据类.passwordKey = 校验_取sha1 (到字节集 (数据类.nonce + 校验_取sha1 (到字节集 (password + 数据类.key))))
调试输出 (#换行符 + “Nonce:” + 数据类.nonce + #换行符 + “Key:” + 数据类.key + #换行符 + “PasswordKey:” + 数据类.passwordKey)
str = 到文本 (网页_访问 (“//192.168.31.1/cgi-bin/luci/api/xqsystem/login”, 1, “username=admin&password=” + 数据类.passwordKey + “&logtype=2&nonce=” + 编码_URL编码 (数据类.nonce, 真)))
Json.解析 (str)
Code = Json.取通用属性 (“code”)
.判断开始 (Code = “0”)
数据类.Token = Json.取通用属性 (“token”)
数据类.HomeUrl = Json.取通用属性 (“url”)
调试输出 (#换行符 + “Token:” + 数据类.Token + #换行符 + “HomeUrl:” + 数据类.HomeUrl)
返回 (真)
.判断 (Code = “401”)
错误原因 = “密码错误”
返回 (假)
.默认
.判断结束
调试输出 (“其他错误”, str, Code)
错误原因 = Code
返回 (假)
.子程序 获取WIFI信息, 逻辑型, 公开
.参数 WIFI信息参考, WIFI信息数据, 参考
.参数 错误原因, 文本型, 参考 可空
.局部变量 str, 文本型
.局部变量 Code, 文本型
.局部变量 Json, 类_json
str = 到文本 (网页_访问 (“//192.168.31.1/cgi-bin/luci/;stok=” + 数据类.Token + “/api/xqnetwork/wifi_detail_all ”))
Json.解析 (str)
Code = Json.取通用属性 (“code”)
调试输出 (Code)
' info= 0=WIFI信息 1=访客WIFI信息
.判断开始 (Code = “0”)
WIFI信息参考.Ssid = 删首尾空 (编码_URL解码 (Json.取通用属性 (“info[0].ssid”), 真))
WIFI信息参考.password = Json.取通用属性 (“info[0].password”)
WIFI信息参考.bandwidth = Json.取通用属性 (“info[0].bandwidth”)
WIFI信息参考.channel = Json.取通用属性 (“info[0].channel”)
WIFI信息参考.hidden = Json.取通用属性 (“info[0].hidden”)
WIFI信息参考.Guest_Ssid = 删首尾空 (编码_URL解码 (Json.取通用属性 (“info[1].ssid”), 真))
WIFI信息参考.Guest_Password = Json.取通用属性 (“info[1].password”)
数据类.WifiInfo = WIFI信息参考
调试输出 (数据类.WifiInfo.Ssid, 数据类.WifiInfo.Guest_Ssid)
返回 (真)
.默认
.判断结束
错误原因 = Code
返回 (假)
.子程序 获取wan信息, 逻辑型, 公开
.参数 wan信息参考, wan信息数据, 参考 可空
.参数 错误原因, 文本型, 参考 可空
.局部变量 str, 文本型
.局部变量 Code, 文本型
.局部变量 Json, 类_json
str = 到文本 (网页_访问 (“//192.168.31.1/cgi-bin/luci/;stok=” + 数据类.Token + “/api/xqnetwork/wan_info”))
Json.解析 (str)
Code = Json.取通用属性 (“code”)
调试输出 (Code)
.判断开始 (Code = “0”)
wan信息参考.User = Json.取通用属性 (“info.details.username”)
wan信息参考.password = Json.取通用属性 (“info.details.password”)
wan信息参考.wanType = Json.取通用属性 (“info.details.wanType”)
wan信息参考.dnsAddrs1 = Json.取通用属性 (“info.dnsAddrs1”)
wan信息参考.dnsAddrs = Json.取通用属性 (“info.dnsAddrs”)
wan信息参考.ip = Json.取通用属性 (“info.ipv4[0].ip”)
wan信息参考.mask = Json.取通用属性 (“info.ipv4[0].mask”)
wan信息参考.gateWay = Json.取通用属性 (“info.gateWay”)
wan信息参考.link = Json.取通用属性 (“info.link”)
数据类.wanInfo = wan信息参考
返回 (真)
.默认
.判断结束
错误原因 = Code
返回 (假)
.子程序 连接与断开拨号, 逻辑型, 公开
.参数 类型, 逻辑型, , 真=开始拨号 假=断开拨号
.参数 错误文本, 文本型, 参考 可空
.局部变量 str, 文本型
.局部变量 Json, 类_json
.局部变量 Code, 文本型
str = 到文本 (网页_访问 (“//192.168.31.1/cgi-bin/luci/;stok=” + 数据类.Token + “/api/xqnetwork/” + 选择 (类型 = 真, “pppoe_start”, “pppoe_stop”)))
Json.解析 (str)
Code = Json.取通用属性 (“code”)
.判断开始 (Code = “0”)
返回 (真)
.默认
.判断结束
错误文本 = Code
返回 (假)
.子程序 重启路由器, 逻辑型, 公开
.参数 错误文本, 文本型, 参考 可空
.局部变量 str, 文本型
.局部变量 Json, 类_json
.局部变量 Code, 文本型
str = 到文本 (网页_访问 (“//192.168.31.1/cgi-bin/luci/;stok=” + 数据类.Token + “/api/xqsystem/reboot?client=web”))
Json.解析 (str)
Code = Json.取通用属性 (“code”)
.判断开始 (Code = “0”)
返回 (真)
.默认
.判断结束
错误文本 = Code
返回 (假)
.子程序 计算_nonceCreat, 文本型
.局部变量 Type, 文本型
.局部变量 mac, 文本型
.局部变量 Time, 文本型
.局部变量 random, 文本型
Type = “0”
mac = 到小写 (系统_取MAC地址 ())
Time = 时间_取现行时间戳 (真)
random = 到文本 (汇编_取随机数 (0, 10000))
返回 (Type + “_” + mac + “_” + Time + “_” + random)
' // 原文
' function nonceCreat() {
' var type = 0;
' var deviceId = 'e8:2a:44:dc:fc:31';
' var time = Math.floor(new Date().getTime() / 1000);
' var random = Math.floor(Math.random() * 10000);
' return [type, deviceId, time, random].join('_');
' }
.子程序 提取后台主页, 文本型, 公开
返回 (数据类.HomeUrl)