编写脚本实现定时重启天翼网关
2021.8.10
电信送的光猫长期使用,不重启性能堪忧,本文通过抓包分析,编写脚本实现定时重启网关拨号,优化网络质量。
代码分析
function realRestart()
{
showOrHidePopWindowFromIframe("hide");
//执行重启
(new XHR()).post('/cgi-bin/luci/admin/reboot', // Suroy: 异步请求,继续翻
{ token: '37b37e2d5d79ec966ec035748f7981ce' }, // Suroy: 好家伙,真不把用户当外人的,淦!
function(x){
parent.location = "/cgi-bin/luci";
});
}
function doRestart()
{
cleanPopWindowContent();
//填充内容
$("#pop_window_title").html("重启确认");
$("#pop_window_icon").html('<div class="pop_window_icon_help"></div>');
$("#pop_window_message").html("您真的要重启您的网关吗?");
//更改确认操作函数
var eid = document.getElementById("confirm");
eid.onclick = function() { realRestart() };
showOrHidePopWindow("show");
}
this.post = function(url,data,callback)
{
this.reinit();
var xhr = this._xmlHttp;
var code = this._encode(data); // Suroy: 关键代码,封装post数据,相关函数已经贴到下放
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4)
callback(xhr);
}
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send(code);
}
this._encode = function(obj)
{
obj = obj ? obj : { };
obj['_'] = Math.random(); // Suroy: 加了一个参数 _ 值是随机数,经测试不做校验可以随便填
if (typeof obj == 'object')
{
var code = '';
var self = this;
for (var k in obj)
code += (code ? '&' : '') +
k + '=' + encodeURIComponent(obj[k]);
return code;
}
return obj;
}
正片Python程序
# -*- encoding:utf-8 -*-
"""
@author: @Suroy
@site: https://suroy.cn/
@email: suroy@qq.com
@time: 2021/8/12 10:48 上午
"""
import requests, re
# 登陆
def login():
url = "http://192.168.1.1/cgi-bin/luci"
payload='username=useradmin&psd=xxxx' # 用户名密码
headers = {
'Host': '192.168.1.1',
'Content-Length': '28',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
'Origin': 'http://192.168.1.1',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Referer': 'http://192.168.1.1/cgi-bin/luci',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive'
}
try:
response = requests.request("POST", url, headers=headers, data=payload, allow_redirects=False) # 禁止自动重定向,以便于获取cookies
cookies = response.cookies
cookie = requests.utils.dict_from_cookiejar(cookies)
response = requests.request("POST", url, headers=headers, data=payload, cookies = cookie)
except Exception as err:
print('获取数据失败:\n{0}'.format(err))
# print(response.text)
matchObj = re.search(r'([a-z]|[0-9]){32}', str(response.text))
if matchObj:
return matchObj.group(), cookies['sysauth']
else:
return False
# 重启
def reboot(token, cookie):
url = "http://192.168.1.1/cgi-bin/luci/admin/reboot"
payload='token=' + str(token) + '&t=123'
headers = {
'content-type': 'application/x-www-form-urlencoded',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
'Origin': 'http://192.168.1.1',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Referer': 'http://192.168.1.1/cgi-bin/luci',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Cookie': 'sysauth=' + str(cookie)
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
if __name__ == '__main__':
token, cookie = login()
reboot(token, cookie)
print('Reboot Success!')
Comments | NOTHING