“光猫”是光调制解调器(Optical modem)的简称,“光猫”也称为单端口光端机,是针对特殊用户环境而研发的一种三件一套的光纤传输设备。该设备采用大规模集成芯片,电路简单,功耗低,可靠性高,具有完整的告警状态指示和完善的网管功能。我们可以使用简单的Python程序令光猫按我们的需要进行重启。
前言
这应该算是比较好玩的东西(也很有用,至于有什么用,自己体会去),所以我写了一个简单的Py程序,成功实现了命令式重启光猫。
另外,由于本人家里只有一台中国电信的光猫,所以我写的程序仅仅能够确保能在我家这个型号的光猫上使用。至于其他型号的光猫,可以根据之后的程序编写过程,自己修改部分代码,这应该是不难实现的。
附 我家的光猫参数:
名称 | 值 |
---|---|
品牌 | 长虹 |
类型 | AP 外置型EPON上行 e8-C家庭网关(2+1) |
型号 | CH801-A21 |
开始了
一、查看设备信息
我们首先将光猫翻个面,一般来讲,光猫的各种参数会被贴在底部。我们需要得到以下信息:
- 默认终端配置地址(举例:192.168.1.1)
- 默认终端配置账户(举例:useradmin)
- 默认终端配置密码(举例:n0bDZ)
提示:如果你曾经修改了默认终端配置密码,请使用你修改后的密码(什么?你说你忘了密码?to reset~)
二、浏览器重启光猫
为了确保光猫确实有通过网络重启的接口,我们先登录一下,看看是否能在浏览器里实现对光猫的重启。

登录后,可在 管理-设备管理 中 找到重启按钮(如果你的光猫没有类似的管理页面,说明你的光猫可能并不支持这样做,也就是说,你可以右上关闭此页面了 :<)

点击 重启 按钮尝试重启光猫(请在没人使用带宽时操作!)

不出意外的话,你可以看到光猫的指示灯已经熄灭,然后重新亮起并且开始闪烁。
三、研究如何用代码复现
让我们再一次访问默认的终端配置地址。熟练地按下F12打开网络监视(Network),然后填写好密码,并提交。

点击一下第一个发出的请求,查看具体的请求内容

可以看到,这个登录是将用户名和密码一起写入Cookies,然后提交的,相当简陋,不做加密,而且也不用POST。
同样的方式,我们可以查看管理页面的请求情况,这里我另外提一点:其实这个重启按钮是有个独立的页面的,只不过在这里是被用iframe的方式内嵌到主页中来了(没有单独截图),所以我们能在请求列表中直接找到对重启光猫的页面的请求。

这里直接访问这个重启页面试一试:

是不是感觉事情简单了许多呢?我们再一次按下F12,查看网页的源代码,找到重启按钮的元素:

不难发现它的点击事件调用了 btnReset()
这个函数,我们直接用Ctrl+F
寻找这个函数试试:

呃,虽然写法是真的奇葩,但是我们至少可以知道重启光猫需要用到一个sessionKey的随机数字值(经过实验,每次刷新时,在这个页面中获取的sessionKey值都会改变)。我们再回到Network中监视点击重启按钮后发送的请求:

显然,这个请求就是用来令光猫重启的,而GET请求的参数sessionKey正是之前页面中找到的sessionKey(不相同是因为页面刷新过了)。因此,我们只要能获取到重启页面的源码,然后用提取到sessionKey,再带Cookies发出重启请求即可实现光猫重启。
复现步骤
- 模拟登录光猫(获取到sessionId,作为通行标识)
- 获取重启页面源码(获取到sessionKey,作为重启请求的参数)
- 发出重启请求
这些就是最基本的步骤了,要说的话,其实这对于经常写爬虫的人来说很简单了,无非就是模拟登录,发送请求罢了,善用F12,其他必要的信息都相当容易获取的。另外还有些没有说到的东西,在代码中会有简单的注释,应该也不难理解的。