北京移动办理套餐送的免费宽带比电信联通的宽带差一些,不过比起长城歌华宽带通还是好很多。
2017年办理免费宽带赠送的烽火通用型GPON-HG260GT光猫,使用中发现光猫长时间不重启,上网就故障了,只要一重启故障就消除了。看来重启对电子产品来说,是解决故障的灵丹妙药啊。
接下来,就是看如何实现光猫的定时重启罗。研究看光猫的系统配置,没有发现定时重启的功能,倒是有手动重启的功能。而且也没有发现烽火通用型GPON-HG260GT光猫能开启telnet或者ssh登录的功能。看来在光猫中写shell脚本或上传GO程序的方法不可行了。
此路不通那就另辟蹊径!既然光猫可以手动重启,那么就说明是可以在网络上通过程序去实现自动重启的。不说废话。上干货:
电脑上安装wireshark或Fiddler转包监控手动重启光猫的全过程。大概分为3步:
登录路由器,url:http://xxx.xxx.xxx.xxx/ctlogin.cmd
获取sessionKey,url: http://xxx.xxx.xxx.xxx/resetrouter.html
重启路由器 url: http://xxx.xxx.xxx.xxx/rebootinfo.cgi?sessionKey=xxxxxxxx
找个方便的语言写个几十行的代码接口,因为我的路由器中有Python环境,所以我就用Python罗。如你的路由器没有Python,最好用Golang编写(Golang编写的程序默认有点大,可在编译时候增加参数将生成的二进制变小,再用upx压缩一下),Python代码如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
import requests
import json
import time
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s [%(threadName)s] [%(name)s] [%(levelname)s] %(filename)s[line:%(lineno)d] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
class modemApi:
def __init__(self, User=None, UserPwd=None, modemUrl=None):
self.__User = User or "Q01DQ0FkbWlu"
self.__UserPwd = UserPwd or "YURtOEglTWRB"
self.__url = modemUrl or "http://192.168.1.1"
self.session = None
# self._log = configure_logger('default', 'logs/service.log')
def create_session(self):
session = requests.session()
session.headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'text/html'}
session.headers[
'User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
return session
def admin_login(self):
if not self.session:
self.session = self.create_session()
url = self.__url + '/ctlogin.cmd'
print(url)
r = self.session.post(url, data={"commonName": self.__User, "commonPsd": self.__UserPwd})
if r.status_code != 200:
logging.error(r.text)
return None
db = r.text
return db
def access_page(self, pageurl):
if not self.session:
self.session = self.create_session()
url = self.__url + '/' + pageurl
print(url)
r = self.session.get(url)
if r.status_code != 200:
logging.error(r.text)
return None
db = r.text
return db
def reboot_modem(self, sessionKey):
if not self.session:
self.session = self.create_session()
url = self.__url + '/rebootinfo.cgi?sessionKey=' + sessionKey
print(url)
r = self.session.get(url)
if r.status_code != 200:
logging.error(r.text)
return False
return True
if __name__ == '__main__':
modemapi = modemApi()
modemapi.admin_login()
pagedata = modemapi.access_page('resetrouter.html')
result = None
if pagedata:
result = re.findall(".*sessionKey='(.*)';.*", pagedata)
if len(result) == 1:
print("sessionKey:", result[0])
if len(result[0]) == 10:
if modemapi.reboot_modem(result[0]):
print("reboot successful")
上传到路由器中运行测试一下。效果极好。
在路由器中增加个定时任务。