PowerShell 脚本实现登录光猫,并触发重启,解决政企网关长期开机死机导致的不能上网问题
问题由来:
中国电信的政企网关,型号MSG2100E-UPON-4V-G,4路千兆网口,4个电话口,1个GPON光口
这个光猫过3周左右就会出现一次不能上网,需要断电重启设备才能解决。
找遍所有后台配置界面,没有找到能设置定时重启的地方,但后台有个手动点击的重启按钮。
方案分析:
外接个智能插座应该可以解决定时重启的问题,可是本着折腾的习惯,尝试找其他方案。鉴于设备后台管理的设备管理页面,有个重启的按钮可以点击,所以只要用程序实现模拟登录,点这个按钮就可以实现重启了,然后把程序放到公司内网服务器上,定时运行下就可以。鉴于Python+selenium已经使用过,开发过一个自动开发票程序,不想再重复。所以选择PowerShell方案。
方案 | 优点 | 缺点 |
智能插座 |
简单粗暴 |
需要硬件,有成本。 断电时,亦断网,此时无法查看状态或者控制; 插座要能记忆断电前的状态,即插座本身停电再来电要是打开状态。 插座要能够做本地定时,网络定时会存在问题。 |
Python+selenium |
只要人能操作的,代码就能实现。 各个控件搜索定位方便。 操作过程可见。 |
代码重,有驱动,还要和Chrome版本配套。 |
PowerShell |
代码量很少。 Windows都自带环境。Linux也可实现。 |
操作过程不可见。要有点web应用基础才好。 |
PowerShell实现:
以下内容存为FiberHome.ps1, 然后在PowerShell 5.x环境运行,输入: ./FiberHome.ps1, 回车执行:
echo "Login FiberHome and reset device....." $LoginBody = @{ username2='useradmin' psd2= '' username1= '' psd1= '' loginSelinit=0 csrfmiddlewaretoken='Kadfbyj7CD2did7JKadsP1P3qafsdmkPt' #换成你自己的 username3='telecomadmin' psd3='nE7jA%5m' username='telecomadmin' psd='nE7jA%5m' } $LoginResponse = Invoke-WebRequest 'http://192.168.1.1/boaform/admin/formLogin' -SessionVariable 'Session' -Body $LoginBody -Method 'POST' echo "Login Session----------------------------------------------" $Session $ResetBody = @{ 'submit-url' = '/mgm_dev_reboot.asp' # key name with dash must quoted by ' } $ResetResponse = Invoke-WebRequest 'http://192.168.1.1/boaform/admin/formReboot' -SessionVariable 'Session' -Body $ResetBody -Method 'POST' echo "Reset FiberHome device Response------------------------------" Write-Output "Status Code : $($ResetResponse.StatusCode)"
执行代码的电脑应该和网关在同一个子网,代码中用到的IP如果和你的设置不一致,应改成你的。