不知道什么原因,我的网络有时候会很慢,而通过重启天翼路由器(版本 V1.0 )大概率能够恢复。重启的次数多了之后会我觉得好麻烦,本着偷懒的原则,就想写一个脚本来自动重启,一劳永逸。
经过查看控制台的网页代码等一番折腾,最后终于搞定。
通过使用 Python Requests 库串联登录及重启两个步骤,可以达到“一键”自动重启路由器的目的。 Python 脚本如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
import re
# 这里的配置,请按需修改。
DEVICE_IP="192.168.1.1"
USERNAME='admin'
PASSWORD='foobar'
def reboot():
'''Reboot the Tianyi Gateway automatically'''
s = requests.Session()
login_data = "username={}&password={}".format(USERNAME, PASSWORD)
response = s.post("http://{}/login.cgi".format(DEVICE_IP), login_data)
response_html = response.text
matches = re.findall('var mysessionid=([0-9]+);', response_html)
if 1 != len(matches):
raise "No session id matched!"
session_id = matches[0]
# session_id = 1111 # It doesn't care what it REALLY is
response = s.post("http://{}/restartGateWay.json?sessionKey={}".format(DEVICE_IP,
session_id),
"action=restartGateWay&actionid=8")
text = response.text # { "status": "success", "actionid": "8" }
return_object = response.json()
if "success" == return_object["status"]:
print("Device rebooted successfully, wait a minute!")
else:
print("Failed to reboot the device, return json: {}".format(text))
if __name__ == '__main__':
reboot()
此脚本依赖 Python Requests 库,可以通过 pip
来安装;我使用 Python3 ,不过 Python2 应该也不会有太大问题。
把上述脚本保存到文件中,比如 ~/bin/reboot-tianyi-gateway
,并且增加可执行权限( chmod +x ~/bin/reboot-tianyi-gateway
),在需要的时候在终端中执行 ~/bin/reboot-tianyi-gateway
即可。 :)
另外,正如注释中提到的,其实 /restartGateWay.json
这个是一个裸接口,并没有校验 sessionKey
的有效性;甚至登录接口在用户登录之后也不会设置 cookie ,所有的业务接口都是可以直接调用的,也就是说,登录界面只是一个摆设。