// ==========================市场元数据=========================================
// [title: 爱快重拨]
// [version: 1.0.5]
// [description: 爱快软路由的线路重拨、重启等,首次使用会让设置登录参数,修改参数使用指令:爱快重置,使用指令:爱快重拨,自定义断开重连间隔时间:set otto ikuai_reconnect_interval 5,表示间隔5秒。设置默认线路:set otto ikuai_reconnect_default 0,0是全部重拨,1,2是表示线路1和2。设置网络类型:set otto ikuai_reconnect_type pppoe/vlan,pppoe表示多wan口多拨,vlan表示一口adsl多拨,不涉及多拨不用设置。支持外部调用,外部调用代码:autMan.Session("爱快重拨")。抓包:http://bbs.zhelee.cn:9999/forum.php?mod=viewthread&tid=28]
// [platform: qq,wx,tg,web,tb,wxmp]
// [public: true]
// [price: 0.00]
// [service: qq282617666]
// [class: 工具类]
//==========================函数解析元数据======================================
// [rule: ^爱快重拨$ ]
// [rule: ^爱快重置$]
// [priority: 99998 ]
// [admin: true]
// [disable:false]
//==========================参数配置数据(最下面)===============================
// [param: {"required":true,"key":"otto.ikuai_host","placeholder":"http://192.168.31.1","name":"爱快地址","desc":"爱快地址,例:http://192.168.31.1"}]
// [param: {"required":true,"key":"otto.ikuai_username","placeholder":"登陆名","name":"登录名","desc":"登录名,例:admin"}]
// [param: {"required":true,"key":"otto.ikuai_passwd","placeholder":"passwd","name":"passwd","desc":"抓包登录body密码参数passwd的值,应为32位字母数字"}]
// [param: {"required":true,"key":"otto.ikuai_pass","placeholder":"pass","name":"pass","desc":"抓包登录body参数pass的值"}]
// [param: {"required":true,"key":"otto.ikuai_reconnect_type","placeholder":"pppoe","name":"网络类型","desc":"pppoe表示多wan口多拨,vlan表示单网口adsl多拨"}]
// [param: {"required":true,"key":"otto.ikuai_reconnect_interval","placeholder":"3","name":"断开重连间隔时间","desc":"断开重连间隔时间,单位秒"}]
// [param: {"required":true,"key":"otto.ikuai_reconnect_default","placeholder":"2","name":"默认线路","desc":"默认线路,0是全部重拨,1,2是表示线路1和2"}]
// 获取内容
var msg = GetContent()
//存储cookie
var cookie = ""
//登陆参数
var login, host, username, passwd, pass
//断开网络和重连间隔时间
var sec = get("ikuai_reconnect_interval")
var seconds = 3
try {
seconds = parseInt(sec)
} catch (err) {
seconds = 3
}
//重拨间隔时间
var lastTime = parseInt(get("ikuai_reconnect_last"))
//网络类型
var itype = get("ikuai_reconnect_type")
if (!itype) {
itype = "pppoe"
}
//默认线路
var dft = get("ikuai_reconnect_default")
if (!dft) {
dft = "0"
}
function checkAllParams() {
host = checkParams("爱快地址,例:http://192.168.31.1", "host")
if (!host) {
return false
}
username = checkParams("登录名,例:admin", "username")
if (!username) {
return false
}
passwd = checkParams("抓包登录body密码参数passwd的值,应为32位字母数字", "passwd")
if (!passwd) {
return false
}
pass = checkParams("抓包登录body参数pass的值", "pass")
if (!pass) {
return false
}
return true
}
//检查必要的参数,tip为说明,param为参数
function checkParams(tip, param) {
v = get("ikuai_" + param)
if (!v) {
sendText(tip + "未设置\n请两分钟内输入" + tip + "参数值:")
p = input(120000);
if (p) {
set("ikuai_" + param, p)
v = p
sendText(tip + "参数" + param + "设置成功")
} else {
sendText("输入有误, 请重新发送指令!");
}
}
return v
}
//执行重拨
function pppoe(id, type) {
Debug("重拨线路:" + id)
let up_action = "link_pppoe_up"
let down_action = "link_pppoe_down"
if (type == "vlan") {
up_action = "vlan_up"
down_action = "vlan_down"
}
//var id = param(1)
var stop, start
//下线
var url = host + "/Action/call"
var body = {
"func_name": "wan",
"action": down_action,
"param": {
"id": id
}
}
Debug(JSON.stringify(body))
var down = post(url, body)
Debug(JSON.stringify(down))
for (var x = 0; x < 5; x++) {
if (down.ErrMsg == "Success") {
stop = "线路" + id + "停用成功"
break
} else {
stop = "线路" + id + "停用失败"
down = post(url, body)
}
}
sleep(seconds * 1000)
//上线
var body = {
"func_name": "wan",
"action": up_action,
"param": {
"id": id
}
}
Debug(JSON.stringify(body))
var up = post(url, body)
Debug(JSON.stringify(up))
for (var x = 0; x < 5; x++) {
if (up.ErrMsg == "Success") {
start = "线路" + id + "启用成功"
break
} else {
var start = "线路" + id + "启用失败"
up = post(url, body)
}
}
//Debug(stop + "\n" + start + "\n线路" + id + "重拨完成")
sleep(3000)
if (ImType() == "fake" || ImType() == "carry") {
notifyMasters(stop + "\n" + start + "\n线路" + id + "重拨完成")
} else {
sendText(stop + "\n" + start + "\n线路" + id + "重拨完成")
}
}
//访问接口
function post(url, body) {
var jsons = request({
"url": url,
"method": "post",
"dataType": "json",
"headers": {
"Cookie": cookie
},
"body": JSON.stringify(body)
})
return jsons
}
function main() {
if (msg == "爱快重置") {
del("ikuai_host")
del("ikuai_username")
del("ikuai_passwd")
del("ikuai_pass")
}
//检查参数
if (!checkAllParams()) {
return
}
//赋值
login = {
"username": username,//"admin",
"passwd": passwd,//"6d7fa0844a5cbc93e8b4f98d87728b43",
"pass": pass,//"c2FsdF8xMUhkbGl6aGU4NTAzMTgqIw==",
"remember_password": true
}
//登录
var url = host + "/Action/login"
request({
"url": url,
"method": "post",
"dataType": "json",
"body": JSON.stringify(login),
"cookie": "username=" + login.username + "; login=1"
}, function (error, response, header, body) {
var content = header["Set-Cookie"]
var pattern = /sess_key=.*?;/
cookie = pattern.exec(content) + " username=" + login.username + "; login=1"
//Debug(cookie)
})
//获取当前ikuai几条线路
url = host + "/Action/call"
bd = {
"func_name": "monitor_iface",
"action": "show",
"param": {
"TYPE": "iface_check,iface_stream"
}
}
//Debug(JSON.stringify(bd))
b = post(url, bd)
wans = JSON.parse(JSON.stringify(b))
wansNum = wans.Data.iface_check.length
//notifyMasters("线路数量:" + wansNum)
if (parseInt(wansNum) == 1) {
//sendText("当前1条线路")
if (ImType() == "carry" || ImType() == "fake") {
// nowTime = Date.now()
// if (nowTime - lastTime > 300000) {
// bucketSet("otto", "ikuai_reconnect_last", Date.now())
// pppoe("1", itype)
// }
} else {
pppoe("1", itype)
}
} else {
if (ImType() == "carry" || ImType() == "fake") {
nowTime = Date.now()
if (nowTime - lastTime > 300000) {
let ps = dft.split(",")
Debug(ps)
for (i = 0; i < ps.length; i++) {
pppoe(ps[i].toString(), itype)
}
bucketSet("otto", "ikuai_reconnect_last", Date.now())
}
} else {
sendText("当前" + wansNum + "条线路,请输入重拨线路:\n(注:0.全部线路\n1,3,5为第一、三、五这三条线路)")
pi = input(60000);
Debug("输入的重拨线路:" + pi)
if (pi == 0) {
for (i = 1; i <= wansNum; i++) {
pppoe(i.toString(), itype)
}
} else {
let ps = pi.split(",")
Debug(ps)
for (i = 0; i < ps.length; i++) {
pppoe(ps[i].toString(), itype)
}
}
}
}
}
main()