問題
在夜間,我想關閉僅 WIFI 的 WLR-9500 路由器。我想使用我的 Synology NAS 中的 bash 腳本來完成此操作。不幸的是,我無法在路由器上安裝 OpenWRT,也沒有時間表可以在預定時間內打開和關閉 wifi。
到目前為止我嘗試了什么
我一直在用 curl 命令擺弄很多東西,但還是無濟于事。我設法登錄到路由器,并獲得管理收音機開/關的頁面,以及這個頁面/框架(使用網路瀏覽器允許打開收音機)
這是頁面框架的樣子:

這實際上是此頁面的子框架:

來自路由器的頁面框架 (html) 源代碼如下所示:
<!DOCTYPE>
<html>
<head>
<script type="text/javascript" src="incjs.htm"></script>
<script type="text/javascript">
IncJs({init:INC_ADV_PAGE});
</script>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<script type="text/javascript">
var sysOPMode=0;
var enableRadio="";
function saveChanges()
{
return true;
}
$(document).ready(function() {
$.getJSON("/cgi-bin/wlan.cgi",{info:wlan_info.WEB_WLAN_BASIC,radio_idx:r_idx.R_24G},function (data){
enableRadio = data.WLANINFO.basicINFO[0].radio_enable;
if (data.WLANINFO.basicINFO[0].radio_enable==1)
getById("radioEnable").checked=true;
else
getById("radioDisable").checked=true;
});
})
</script>
</head>
<body style="background-image:none;background-color:transparent;">
<br><br>
<blockquote>
<p><script type="text/javascript">dw(showText(80))</script></p>
<form name="wirelessseting" method="post" action="submit.cgi">
<input type="hidden" name="submitpg" value="wlmain.html">
<br>
<table width="900px" border="0" cellspacing="2">
<tr>
<td style="font-weight:bold;"><script type="text/javascript">dw(showText(81))</script> :
<input type="radio" id="radioEnable" name="radioEnable" value="1" ><script type="text/javascript">dw(showText(76) ' ')</script>
<input type="radio" id="radioDisable" name="radioEnable" value="0"><script type="text/javascript">dw(showText(88))</script> </td>
</tr>
</table>
<br>
<table width="100%" cellspacing="1">
<tbody><tr><td>
<div align="right">
<script type="text/javascript">dw('<input type="submit" value="' showText(46) '" onClick="return saveChanges()" width="105">')</script>
</script>
</div>
</td>
</tr></tbody>
</table>
</form>
</blockquote>
</body>
</html>
我已經嘗試了 curl 命令的許多 cariation,但沒有成功。一旦我得到這個 curl 命令(或 curl 命令序列?)正確,我很確定我會設法創建我的 bash 腳本,我也會把它放在這里。
我使用下面的 curl 陳述句來測驗我是否可以訪問該頁面,并且成功完成。雖然沒有生成 cjar 檔案,所以我猜沒有生成 cookie。
curl --anyauth --cookie-jar cjar -u admin:xxxpassxxx -g http://192.168.178.1/wlmain.html
接下來我嘗試像這樣禁用收音機:
curl --anyauth -u admin:xxxpassxxx --cookie-jar cjar -F "radioEnable=0" http://192.168.178.1/wlmain.html
(以及該命令列的許多變體)
問題
我如何使用 curl 從命令列執行此操作?
uj5u.com熱心網友回復:
正如@konsolebox 建議的那樣:解決方案是使用wireshark找出頁面實際發布的內容:
submitpg=wlmain.html&radioEnable=0
我在wireshark中使用的過濾器如下:
ip.addr eq 192.168.178.1 and ip.addr eq 192.168.178.100
并找出了http:\\192.168.178.1\submit.cgi從我的桌面上發布的帶有 ap 地址的內容192.168.178.100
所以...整個 curl 命令必須看起來像這樣,有 1 個引數用于radioEnable引數,一個用于submitpg
curl --anyauth -u admin:xxxPASSxxx -d "radioEnable=1&submitpg=wlmain.html" http://192.168.178.1/submit.cgi
在我的 Windows 桌面的命令列上測驗了這個,它作業得很好。下一步也為我的接入點做同樣的事情,但我很確定我可以從這里管理它。
一旦到位并開始作業,我也會將最終的 bash 腳本放在這里。
正如所承諾的那樣,打開或關閉 WIFI 的腳本由我的 Synology NAS 的自動任務表呼叫。這sleep是必需的,因為路由器在無線電模塊重新啟動期間“忙”并且不會接受任何其他命令。
路由器WifiOnOff
#turn off/on WIFI on AC2600/WLR9500 router
# 2.4GHz network
curl --anyauth -u admin:xxxPASSxxx -d "radioEnable=$1&submitpg=wlmain.html" http://192.168.178.1/submit.cgi
# allow the router to process this
sleep 15
# 5.0 GHz Wifi network
curl --anyauth -u admin:xxxPASSxxx -d "radioEnable=$1&submitpg=wlmain2.html" http://192.168.178.1/submit.cgi
# set RE200/OpenWRT access point wifi UP or DOWN
if [ $1 -eq 0 ]
then
ssh root@192.168.178.2 'wifi down'
else
ssh root@192.168.178.2 'wifi up'
fi
提供給腳本 (0或1)的引數決定是否啟用/禁用 wifi。任務表中的呼叫如下所示:
bash /volume1/homes/admin/WifiOnOffScripts/RouterWIFI_OnOff 0
我后來添加了該陳述句以顯示如何為我的 OpenWRT 接入點打開/關閉 wifi。這涉及在您實際運行它之前設定一個 RSA 密鑰對(您不能為 SSH 提供密碼),但這超出了主題范圍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/408701.html
標籤:
