sysRestart Billion ADSL路由器(SNMP v2或HTTP)

背景

我习惯按计划重启我的服务器。 现在我想要我的ADSL路由器一样。

这是我的理由:当发生随机故障时,我习惯于在任何其他故障排除之前(例如:更改configuration等),通常尝试重新启动服务器,接口和相关设备(如果可能)。 事实上,有些时候这可以解决问题(服务按预期开始工作)。 这可能是因为当一个系统很长时间(有时,取决于软件和服务),它可能变得没有响应或错误。 可能是软件未能释放一些内存,解锁一些资源等

现在对于某些在非工作时间内可以接受的服务,我会安排自动重启。 这样,这种types的问题就不那么频繁了。 而现在,如果在工作时间内发生问题,我不需要重新启动整个服务,而是在重新启动后恢复故障排除。

我们有什么

这是一个Billion 5000系列路由器,支持TELNET,HTTP和SNMP进行pipe理。

Telnet方法(更新)

这可以通过telnet命令重启路由器:

C:\>telnet 192.168.1.1 Password:******** router>set reboot 

如此接近,只需要一个脚本自动telnets,推送密码字符,并发出“ 设置重新启动 ”命令。 [使用SvenWbuild议的预期方法 ]

HTTP方法

不用说,我利用软件 [ 1 ]应用程序通过HTTP接口监视我的ADSL连接速度和噪声容限(软件本身,而不是浏览器应用程序,连接,无人值守login,并从HTTP接口读取值,并显示它们在图中!)。

我想知道是否有可能以类似的方法实现SysRestart(一个脚本自动login并点击SysRestartbutton!)

重新启动页面:

  • 页面图片: 带重新启动按钮的HTML页面
  • 该页面的源HTML:

     <html><head> <meta http-equiv=Content-Script-Type content=text/javascript> <meta http-equiv=Content-Style-Type content=text/css> <meta http-equiv=Content-Type content="text/html; charset= iso-8859-1"> <link rel="stylesheet" href="../css/style.css" type="text/css"> <script language="JavaScript"> function doRefresh() { alert("Reboot Complete"); parent.navigation.location.href = "/navigation-status.html"; window.location.href = "../status/status_deviceinfo.htm"; } function doLoad() { } </script> </head><body onload="doLoad()"> <FORM METHOD="POST" ACTION="/Forms/tools_system_1" name="System_Restore"> <table width="760" border="0" align=center cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td height="5" class="light-orange" colspan="5">&nbsp;</td></tr><tr> <td width="150" height="30" class="title-main"> <font color="#FFFFFF">System Restart</font> </td><td width="10" class="black">&nbsp;</td><td width="150"></td><td width="10"> </td><td width="440"></td></tr><tr> <td class="light-orange">&nbsp;</td><td class="light-orange"></td><td class="tabdata"><div align=right> <font color="#000000">System Restart with</font> </div></td><td class="tabdata"><div align=center>:</div></td><td class="tabdata"> <INPUT TYPE="RADIO" NAME="restoreFlag" VALUE="0" CHECKED> <font color="#000000">Current Settings</font> </td></tr><tr> <td class="light-orange">&nbsp;</td><td class="light-orange"></td><td class="tabdata">&nbsp;</td><td class="tabdata">&nbsp;</td><td class="tabdata"> <INPUT TYPE="RADIO" NAME="restoreFlag" VALUE="1"> <font color="#000000">Factory Default Settings</font> </td></tr><tr> <td class="light-orange">&nbsp;</td><td class="light-orange"></td><td width="150">&nbsp;</td><td width="10">&nbsp;</td><td width="440">&nbsp;</td></tr></table><table width="760" border="0" align=center cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="160" class="black" height="42" >&nbsp;</td><td width="160" class="orange">&nbsp;</td><td width="440" class="orange"> <INPUT TYPE="SUBMIT" NAME="Restart" VALUE="RESTART"> </td></tr></table></div></form> </body></html> 

SNMP方法

路由器还支持SNMP v2读写社区。 我认为这样做可能是可能的。

事实上,通过一些search,我发现 [ 2 ]有些人使用SNMP重新启动他们的设备(但我找不到我的路由器通过执行复位的OID)

例如,看起来拥有这些设备的人可以使用这些OID重新启动它们:

 '.1.3.6.1.4.1.207.8.4.4.3.2.0', # Allied Telesyn restart '.1.3.6.1.4.1.11.2.14.11.1.4.1.0', # Hewlett-Packard hpicfReset '.1.3.6.1.4.1.9.5.1.1.9.0', # Cisco CatOS sysReset '.1.3.6.1.4.1.9.2.9.9.0', # Cisco IOS tsMsgSend '.1.3.6.1.4.1.529.9.8.0.0' # Ascend sysReset 

SNMP步行

使用SNMP漫游,我可以得到五百多个OID列表,例如:

 .1.3.6.1.4.1.16972.5.1.1.0 .1.3.6.1.4.1.16972.4.10.0 ...etc (568 more)... 

但是我现在还不知道怎么可以select其中的一个(特别怕testingsnmp-write)。

一些更多的信息

一些其他(走)的OID和值可能会有所帮助:

 .1.3.6.1.4.1.16972.1.3.0; Trendchip TC3162 T14F7_3.0 .1.3.6.1.4.1.16972.5.1.1.0; www.huawei.com .1.3.6.1.4.1.16972.1.6.0; Ras Ver:2.10.4.0(UE0.C2C)3.6.0.0 DMT Ver:3.6.0.0 

你怎么能帮忙?

  • build议通过SNMP脚本重新启动脚本(需要首先findOID !?)
  • build议通过HTTP脚本重新启动脚本
  • build议通过telnet脚本来重启脚本
  • build议脚本重新启动脚本(任何其他方式!)

脚注:

  • [ 1 ] http://vwlowen.co.uk/internet/files.htm
  • [ 2 ] http://www.skendric.com/nmgmt/device/Generic/reset-device

如果没有一个适当的MIB文件用于SNMP,最好的办法是find一些telnet命令来重新启动,或者在expect工具的帮助下使用它,或者使用类似curl东西来使用web界面。

使用curl可能需要多次调用它才能首先login并保存会话cookie,然后执行实际重新启动。

我不知道,但你有一个设备的实际问题,你试图解决与定期重新启动? 如果没有,我看不出这样做的理由。

编辑:

预期脚本的基本示例。 使用scriptname hostname password调用它,或者更改variables赋值以包含实际的主机名和密码:

 #!/usr/bin/expect set timeout 15 set hostname [lindex $argv 0] set password [lindex $argv 1] spawn telnet $hostname expect "Password:" send "$password " expect "router>" send "set reboot "