用 Python Requests “一键”重启天翼路由器


不知道什么原因,我的网络有时候会很慢,而通过重启天翼路由器(版本 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 ,所有的业务接口都是可以直接调用的,也就是说,登录界面只是一个摆设。

Python 

也可以看看

comments powered by Disqus