sysRestart Billion ADSL 路由器(SNMP v2 或 HTTP)
背景
我習慣於按計劃重新啟動我的伺服器。現在我想要我的 ADSL 路由器也一樣。
這是我的原因:當發生隨機故障時,我習慣於在進行任何其他故障排除(例如:更改配置等)之前嘗試重新啟動伺服器、介面和相關設備(如果可能)作為第一步。事實上,有時這可以解決問題(服務開始按預期工作)。這可能是因為當系統長時間執行時(有時,取決於軟體和服務),它可能會變得無響應或出現故障。可能是軟體無法釋放一些記憶體、解鎖一些資源等
現在對於一些在非工作時間可以接受計劃停機時間的服務,我安排了自動重啟。這樣,此類問題的出現頻率就會降低。現在,如果在工作時間出現問題,我不需要重新啟動整個服務,而是會像重新啟動它們之後一樣恢復故障排除。
我們有什麼
這是一款億萬5000系列路由器,支持TELNET、HTTP和SNMP進行管理。
Telnet 方法(更新)
這可以通過 telnet 命令重新啟動路由器:
C:\>telnet 192.168.1.1 Password:******** router>set reboot
這麼近,只需要一個自動遠端登錄、推送密碼字元並發出“ set reboot ”命令的腳本。[ SvenW建議的使用expect的方法]
HTTP方法
值得一提的是,我使用一個軟體[ 1 ] 應用程序通過 HTTP 介面監視我的 ADSL 連接速度和雜訊容限(軟體本身,而不是瀏覽器應用程序,連接、登錄並從 HTTP 介面讀取值並顯示它們在圖表中!)。
我想知道是否可以用類似的方法實現 SysRestart(自動登錄並點擊 SysRestart 按鈕的腳本!)
重啟頁面:
<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"> </td></tr><tr> <td width="150" height="30" class="title-main"> <font color="#FFFFFF">System Restart</font> </td><td width="10" class="black"> </td><td width="150"></td><td width="10"> </td><td width="440"></td></tr><tr> <td class="light-orange"> </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"> </td><td class="light-orange"></td><td class="tabdata"> </td><td class="tabdata"> </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"> </td><td class="light-orange"></td><td width="150"> </td><td width="10"> </td><td width="440"> </td></tr></table><table width="760" border="0" align=center cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="160" class="black" height="42" > </td><td width="160" class="orange"> </td><td width="440" class="orange"> <INPUT TYPE="SUBMIT" NAME="Restart" VALUE="RESTART"> </td></tr></table></div></form> </body></html>
SNMP 方法
該路由器還支持 SNMP v2 讀寫社區。我認為有可能以這種方式執行它。
事實上,通過一些搜尋,我發現[ 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 walk 我可以獲得超過 500 個 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)...
但是我目前不知道如何從中選擇一個(特別害怕在它們上測試 snmp-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
你怎麼能幫忙?
- 建議一種通過 SNMP 編寫重啟腳本的方法(需要先找到 OID!?)
- 建議一種通過 HTTP 編寫重啟腳本的方法
- 建議一種通過 telnet 編寫重啟腳本的方法
- 建議一種重新啟動腳本的方法(任何其他方式!)
腳註:
如果沒有適合 SNMP 的 MIB 文件,您最好的選擇是找到一些執行重啟的 telnet 命令,並可能在該
expect
工具的幫助下使用它,或者使用類似curl
使用 Web 界面的東西。使用 curl 可能需要多次呼叫它以首先登錄並保存會話 cookie,然後進行實際重啟。
不過,我確實想知道-您嘗試通過定期重啟來修復的設備是否存在實際問題?如果沒有,我看不出這樣做的理由。
編輯:
期望腳本的基本範例。
scriptname hostname password
使用或更改變數分配來呼叫它以包含實際的主機名和密碼:#!/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 "