Як виявилося, у гігабітному роутері TP-LINK TL-WR1042ND немає керування за допомогою консолі. Але роутери, як відомо, іноді виснуть. Точніше, сам роутер продовжує працювати та відгукуватися на команди управління з адмінки та VPN показує, що він підключений, але інтернет при цьому не доступний. Іноді це відбувається з вини самого пристрою, іноді проблеми з боку провайдера і перезавантаження часто вирішує проблему. До того ж, бажано, щоб це відбувалося автоматично. Тому було прийняте рішення перевантажувати роутер за допомогою HTTP GET запиту.
Після нетривалого дослідження було знайдено такі команди:
Розірвати з’єднання VPN:
http://login:pass@192.168.0.1/userRpm/StatusRpm.htm?Disconnect=Disconnect&wan=1
Підключити VPN:
http://login:pass@192.168.0.1/userRpm/StatusRpm.htm?Connect=Connect&wan=1
Перезавантажити роутер:
http://login:pass@192.168.0.1/userRpm/SysRebootRpm.htm?Reboot=1
Але, як виявилося, керувати цими командами роутером не виходить. Вони працюють тільки при авторизації в адмінці роутера через браузер і тільки можна побачити їх виконання за допомогою firebug, а безпосередньо, при введенні в адресний рядок працює тільки команди дисконнекту/коннекту VPN. Команди спрацьовують, але при цьому все одно видає помилку. Перезавантажити роутер таким чином не виходить.
Миттєво видає “You have no authority to access this router!” і нічого не відбувається..
Найцікавіше, що так:
http://login:pass@192.168.0.1/userRpm/StatusRpm.htm?Disconnect=Disconnect&wan=1
видає ту ж помилку, але з деякою затримкою, а запит виконується – тобто wan відключається.
При цьому в адмінку входить за посиланням з прописаною авторизацією: http://login:pass@192.168.0.1 та управління з адмінки далі працює!
Перезавантаження з Linux
Мене більше цікавило перезавантаження з лінуксу, але така команда не спрацьовувала:
wget --http-user=login --http-password=pass --post-data="reboot=true" http://192.168.0.1/userRpm/SysRebootRpm.htm
помилка:
Connecting to 192.168.0.1:80... connected. HTTP request sent, awaiting response... 401 N/A Reusing existing connection to 192.168.0.1:80. HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9 Length: unspecified Saving to: `SysRebootRpm.htm'
До того ж, за допомогою wget не вдалося навіть виконати Disconnect/Connect VPN.
На російському форумі TP-LINK була відкрита тема, але в результаті обговорення рішення знайти не вдалося.
Англійська техпідтримка на запит “How i can reboot my device by bash script?”
відповіла наступне: “this is not possible to reboot devices in a such way”.
Ticket#2013101610000131
Рішення все ж таки було знайдено. Не вдаючись у подробиці скажу, що роутер при GET запиті перевіряє:
- Http basic авторизацію.
- User-Agent браузеру.
- Коректне поле рефер, яке буде просто http://IP адресою роутеру, бо роутер використовує редиректи.
Cookie для авторизації не використовуються.
З цим усім чудово справляється команда curl.
Скрипт перезавантаження роутера
Отже, наводжу скрипт перезавантаження роутера, який у мене вийшов:
#!/bin/sh WATCHED_IP="8.8.8.8" ROUTER_IP="192.168.0.1" USERNAME="login" PASSWORD="pass" # watch for remote host ping -q -c 1 "$WATCHED_IP" > /dev/null && exit # exit if router is down ping -q -c 1 "$ROUTER_IP" > /dev/null || exit curl --basic --user "$USERNAME:$PASSWORD" -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" --refer "http://$ROUTER_IP" "$ROUTER_IP/userRpm/SysRebootRpm.htm?Reboot=reboot"
Відповідно, скрипт реконнекту VPN:
#!/bin/sh WATCHED_IP="8.8.8.8" ROUTER_IP="192.168.0.1" USERNAME="login" PASSWORD="pass" # watch for remote host ping -q -c 1 "$WATCHED_IP" > /dev/null && exit # exit if router is down ping -q -c 1 "$ROUTER_IP" > /dev/null || exit curl --basic --user "$USERNAME:$PASSWORD" -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" --refer "http://$ROUTER_IP" "$ROUTER_IP/userRpm/StatusRpm.htm?Disconnect=Disconnect&wan=1" #sleep 1 curl --basic --user "$USERNAME:$PASSWORD" -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" --refer "http://$ROUTER_IP" "$ROUTER_IP/userRpm/StatusRpm.htm?Connect=Connect&wan=1"
Прописав до cron скрипт реконнекту за відсутності пінгу dns гугля – перевірка кожні 3 хвилини.
Скрипт перезавантаження перевіряє наявність інтернету кожні 15 хвилин.
login:pass, звісно, треба буде поставити свої. Файли скриптів назвати, наприклад, tplink_reboot.sh та tplink_reconnect.sh,
зберегти на сервері, дати права на виконання та додати до планувальника.
Вже кілька разів врятувало:
tplink_reconnect.zip
tplink_reboot.zip
PS:
на форумі https://forum.tp-linkru.ru Scorokhod поділився своїм варіантом перезавантаження роутера за допомогою WGET, за що йому велике спасибі:
wget --http-user=%login% --http-password=%password% --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" --referer=http://%router_ip%/userRpm/SysRebootRpm.htm http://%router_ip%/userRpm/SysRebootRpm.htm?Reboot=1
Замість“login”, “password” та “router_ip” підставити відповідно логін, пароль та IP маршрутизатора без лапок та відсотків :-)
WGET для Windows можна взяти тут: http://gnuwin32.sourceforge.net/packages/wget.htm, скачати потрібно “Complete package, except sources – Setup”.
Перезавантаження з Windows
Готова сбірка Wget + Bat скрипт для перезавантаження (тільки перевантажує):
скачати tplink_reboot_wget.zip (підходить для більшості моделей Tplink, не лише WR1042ND)
Перезавантаження з Android
(дякую за цей код neolead)
Для андроїда в цьому викладі потрібно root. Якщо немає рута.. то в кінці checknet замінити на step1
–manual
Requirements:
Встановити Busybox https://play.google.com/store/apps/deta … on.busybox
та Android Terminal emulator https://play.google.com/store/apps/deta … ndroidterm
–to do list
Перемонтувати /system на запис “su -c mount rw,remount /system”
Покласти припустимо до /system/script,”su -c chmod 0777 /system/script/”
Дати скрипту права на виконання “su -c chmod 0755 /system/script/ping2.sh”
Додати до автозапуску у налаштуваннях терміналу.
у мене працює в машині як перепідключення, потім перезавантаження wifi після трьох фейлів.
-----ping2.sh
#!/system/bin/sh
pingip=8.8.8.8
login=admin #Username
password=admin #Password
router_ip=192.168.0.1 #Ip of router
sleep_time=30 #Time to next check
sleep_rbt_time=70 #Time to waiting of reboot
f1=10 #First pause in sec
f2=30 #Second pause in sec
increment=0
b64_auth=$(echo $login:$password | base64|rev|cut -c 2-|rev)
network=toyota #SSID name of wifi
while true
do
function checknet()
{
ssid=0
while [ "$ssid" != "$network" ]
do
ssid=$(su -c dumpsys wifi|grep "* ID:"|cut -f 2 -d \")
echo ssid=$ssid
echo network=$network
if [ "$ssid" = "$network" ]; then
echo "Correct Wifi Network"
else
echo "False Wifi Network,press Enter key"
read -rs
fi
done
}
function slp()
{
increment=0
echo "will sleep $sleep_time sec"
sleep $sleep_time #check again
}
function wifi_conn()
{
echo modem reconnect
printf "GET /userRpm/StatusRpm.htm?Disconnect=Disconnect&wan=1 HTTP/1.0\r\nReferer: http://$router_ip/userRpm/StatusRpm.htm\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.1.1650.63 Safari/537.36\r\nAccept: */*\r\nHost: $router_ip\r\nConnection: Keep-Alive\r\nAuthorization: Basic $b64_auth=\r\n\r\n"|nc -w 5 -i 1 $router_ip 80 >/dev/nul
printf "GET /userRpm/StatusRpm.htm?Connect=Connect&wan=1 HTTP/1.0\r\nReferer: http://$router_ip/userRpm/StatusRpm.htm\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.1.1650.63 Safari/537.36\r\nAccept: */*\r\nHost: $router_ip\r\nConnection: Keep-Alive\r\nAuthorization: Basic $b64_auth=\r\n\r\n"|nc -w 5 -i 1 $router_ip 80 >/dev/nul
}
function wifi_rst()
{
#echo LOGIN:$b64_auth=
increment=$(( $increment +1 ))
echo Reboot Times=$increment
if [ "$increment" -eq 3 ]; then
echo "We Already Reboot = $increment times"
echo "We Stop Rebooting"
read -rs $'Press any key to continue monitoring...\n' -n1 key
else
printf "GET /userRpm/SysRebootRpm.htm?Reboot=1 HTTP/1.0\r\nReferer: http://$router_ip/userRpm/SysRebootRpm.htm\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.1.1650.63 Safari/537.36\r\nAccept: */*\r\nHost: $router_ip\r\nConnection: Keep-Alive\r\nAuthorization: Basic $b64_auth=\r\n\r\n"|nc -w 5 -i 1 $router_ip 80 >/dev/nul
echo "Now reboot request was send,will sleep $sleep_rbt_time sec"
sleep $sleep_rbt_time
fi
}
checknet
if ping -c 1 $pingip >/dev/null
then
echo "all good step 1"
slp
else
if ping -c 1 $router_ip >/dev/null
then
echo Router is pinging - channel is down
else
echo Router is down - channel is down
increment = 3
wifi_rst
fi
echo Bad Ass step 1 - will wait $f1 sec!
sleep $f1 #give it a few seconds to complete
fi
if ping -c 1 $pingip >/dev/null
then
echo "all good step 2"
slp
else
echo Bad Ass step 2 - will wait $f2 sec!
sleep $f2 #give it a few seconds to complete
fi
if ping -c 1 $pingip >/dev/null
then
echo "all good step 3 "
slp
else
wifi_conn
echo Bad Ass step 3 - Reconnect!
wifi_conn
fi
if ping -c 1 $pingip >/dev/null
then
echo "all good step 4 "
slp
else
echo Bad Ass step 3 - Reconnect!
wifi_rst
fi
done
Скетч Arduino для плат на базі мікроконтролера ESP32
(дякую за цей код p-a-h-a)
#include <WiFi.h>
#include <HTTPClient.h>
const char* IP_port = "http:// 192. 168. 0.1:80"; // Прибрати пробіли, замінити на свою адресу
#define RouterLogin "admin"
#define RouterPassword "admin"
void setup() {
Serial.begin(115200);
WiFi.begin("ssid", "pass");
while (WiFi.status() != WL_CONNECTED) {
delay(500); Serial.print(".");
}
HTTPClient http;
http.begin(String(IP_port) + "/userRpm/SysRebootRpm.htm?Reboot=1");
http.setAuthorization(RouterLogin, RouterPassword);
http.addHeader("User-Agent","ESP32 wrower");
http.addHeader("Referer", String(IP_port) + "/userRpm/SysRebootRpm.htm");
Serial.printf("[HTTP] GET...code: %d\n", http.GET());
// Serial.println(http.getString()); // Видає вебсторінку відповіді
http.end();
}
void loop() {}
Спасибо, очень интересная статья и полезная!!!
В новой версии опять поменяли….. (
Что именно изменилось, что-то не работает?
у меня каждый день в 00.04 перегружается роутер и пропадает сеть на 1 минуту. модель TP link – TL-WR340GD. провайдер говорит что к ним это никакого дела не имеет. в настройках роутера по этому времени ничего нету. помогите разобраться – заранее благодарен (можете опубликовать может у кого то тож такие проблемы)
попробуй сменить время во всей квартире и в роутере. если будет по новому времени перезагружаться значит провайдер не виноват!
Спасибо большое
Большое спасибо!
Работает и в случае с TL-WR841N.
спасибо. полезная инфа.
дак под виндоус то как запускать?
ну скачал, ну установил wget а дальше то что? что куда вводить чтобы заработало?
anatoly, wget работает в режиме командой строки. Т.е. для использования можно или написать .bat файл, или создать ярлык с параметрами.
как проверть работоспособность вгет?
не работает!!!
c:\Program Files (x86)\GnuWin32\bin>wget.bat
c:\Program Files (x86)\GnuWin32\bin>wget –http-user=xxx –http-password=xxx
–user-agent=”Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, li
ke Gecko) Chrome/31.0.1650.63 Safari/537.36″ –referer=http://192.168.1.1/userRp
m/DateTimeCfgRpm.htm http:/192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=1
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:\Program Files (x86)\GnuWin32/etc/wgetrc
–2015-04-07 18:43:55– ftp://http//192.168.1.1/userRpm/SysRebootRpm.htm?Reboot
=1
=> `.listing’
Распознаётся http… сбой: No data record of requested type.
wget: невозможно распознать адрес `http’
unlink: No such file or directory
ну и че он ftp:// добавил перед http:// ?
проблему решил удалив в коде скрипта “%”.
Вечером проверю. Я все делал в Ubuntu и использовал curl, а не wget. С wget у меня изначально не получалось. Проверю под Windows – отпишусь.
Так же не работает, вот лог из cmd, помогите пожалуйста
C:\Users\bmite>wget –http-user=%admin% –http-password=%admin% –user-agent=”Mo
zilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/
31.0.1650.63 Safari/537.36″ –referer=http://%192.168.10.1%/userRpm/SysRebootRpm
.htm http://%192.168.10.1%/userRpm/SysRebootRpm.htm?Reboot=1
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\Program Files (x86)\GnuWin32/etc/wgetrc
–2015-04-08 12:57:49– http://%192.168.10.1%25/userRpm/SysRebootRpm.htm?Reboot
=1
Распознаётся 312.168.10.1%… сбой: No data record of requested type.
wget: невозможно распознать адрес `↓2.168.10.1%’
У Вас вместо http://%192.168.10.1% должно быть везде http://192.168.10.1
А вместо %admin% просто admin
Не совсем понятно куда эти скрипты ставить? Брать VDS?
Можете запускать со своего компьютера или локального сервера.
т.е. Denwer?
Я хотел сказать с отдельного компьютера – сервера, который работает в режиме 24/7. Хотя, не у всех такое имеется, но для них и автоматическая перезагрузка роутера не так важна.
Для wget команды, возможно, потребуется заменить –http-password на –http-passwd
Спасибо большое.
tplink MR3020. На прошивке 130xxx работает вариант с wget, проверил на двух роутерах с прошивками 130123 и 130-какой-то (не помню).
В серии 140xxx через C# и сниффер выкручивались.
Соврал по поводу прошивок. Проверял на 140123 и 130xxx. На 140408 уже писали на C#
Добавил в конце статьи архив, содержащий готовую сборку Wget + bat скрипт автоматической перезагрузки.
1. Если не поправить все некорректно указанные в примере двойные кавычки (» и »), возникает ошибка:
ping: unknown host «8.8.8.8»
ping: unknown host «192.168.1.2»
2. Если кавычки поправить, возникает другая ошибка:
13: /home/tvbung/Загрузки/router.sh: Syntax error: “(” unexpected
Я имел в виду скрипт для перезагрузки роутера
Скачайте архив в конце статьи – там все корректно работает.
Спасибо – не заметил вложени
Спасибо! Полезная статья
Наконец-то оформил статью для удобочитаемого вида. Кроме того, проверил скрипт перезагрузки из Windows на роутере TL-WR840 – работает!
Здравствуйте. Скачал, распаковал, в Reboot Router указал логин и пароль (admin,admin), запускаю wget.exe от имени администратора, ничего не происходит. Windows 10, TD-W3151N. Роутер не подходящий? Или что-то не так делаю?
Запускать нужно Reboot Router, из него происходит вызов wget.exe с нужными параметрами.
Права админа в Windows для этого скрипта необязательны.
Запускаю, выдаёт это:
*****************************************************
ROUTER REBOOTED
*****************************************************
Press any key to Exit
Но роутер не ребутится.
1. Задавайте Login и Password без кавычек.
set Login=admin
set Password=admin
2. Попробуйте варианты задачи IP:
set IP=192.168.1.1
или
set IP=192.168.0.1
Спасибо большое, искал очень долго и вот помогла ваша “Готовая сборка”. главное все в файле заменить)
у меня не работает
Запускаю, выдаёт это:
*****************************************************
ROUTER REBOOTED
*****************************************************
Press any key to Exit
Но роутер не ребутится.
Заполните правильно(!) в файле Reboot Router.bat следующие переменные:
set IP=192.168.0.1
set Login=admin
set Password=admin
А можно глянуть скрипт проверки и перезагрузки по крону.
Спасибо.
Ссылки на архив с готовыми скриптами находятся в конце статьи.
Вот такой вопрос…
Я запустил этот самый bat для rebootА роутера и ребут произошёл.
Захотел сделать это в виде ежедневной задачи и всё настроил.
Но почему-то, сколько бы я сейчас не пробовал запустить этот скрипт заново, ничего не выходит!
Мистика какая-то!
Помогите!
Возможно, Вы в диспетчере задач (планировщике) не указали папку в которой лежат исполняемые файлы.
То же самое и у меня происходит – в ручном режиме скрипт работает, и ребутит роутер, но если его запускает планировщик – то выпадает черное окошко о ЯКОБЫ выполнении скрипта, но роутер по факту не перегружается… чо за фигня???
Разобрался )) Автор прав – нужно указать не только САМ бат-файл, а еще и папку с исполняемыми файлами, чтобы все эти фалы были задействованы вместе! Все работает, СПАСИБО!
Не проходит перезагрузка в роутере mr3020. Операционная система: windows 7. Параметры настроены верно, т.е. и ip и логин с паролем. Но вот перезагрузки почему-то не происходит :(
На mr3020 скрипт не тестировался. Скорее всего, там совершенно другая админка с другими адресами ссылок на перезагрузку.
Спасибо за ответ! Да, на другом Tp-link роутере работает вполне норм. Не подскажете ли, в каком направлении копать, чтобы поправить ссылку для именно этой марки роутера? Где можно эту ссылку посмотреть, чтобы изменить код?
Просто роутер будет стоять у людей, скажем так, несколько далёких от техники :) Поэтому и ищу решение для перезагрузки скриптом.
У меня нет mr3020, поэтому я не смогу переписать и отладить скрипт под него. В моем скрипте строка перезагрузки задается “/userRpm/SysRebootRpm.htm?Reboot=reboot”. Насколько я понял, mr3020 поддерживает терминальное подключение, что автоматически снимает необходимость использования программы curl или wget для доступа по http. Вам не подойдет скрипт с этой страницы, точнее, вероятно, его можно адаптировать, но можно проще. Достаточно просто написать скрипт в bat файле. Когда-то давно писал такой скрипт для Dlink.
П.С.
Здесь в комментариях mustik писал, что “tplink MR3020 на прошивке 130xxx работает вариант с wget, проверил на двух роутерах с прошивками 140123 и 130xxx. В серии 140408 через C# и сниффер выкручивались.” Т.е. мой скрипт с этой страницы на новой прошивке запустить не удалось.
Может, покажете скрипт для dlink? Я бы постарался адаптировать. Просто вы писали в статье “После непродолжительного исследования были найдены такие команды”, но я не совсем понимаю, что скрывается под словом “исследование” :) В какую сторону исследовать? :) Откуда можно выцепить эту команду? Мне хотя бы примерно знать, в какую сторону копать нужно, а там бы уже постарался бы найти.
Пока что откопал только Bash скрипт для линукса (ubuntu/debian). Хотя когда-то делал и для обычного bat/cmd через telnet без vbs скриптов.
#!/bin/sh
WATCHED_IP="www.ru"
MODEM_IP="192.168.1.1"
USERNAME="admin"
PASSWORD=""
# watch for remote host
ping -q -c 1 "$WATCHED_IP" > /dev/null && exit
# exit if modem is down
ping -q -c 1 "$MODEM_IP" > /dev/null || exit
expect - << EOF set send_slow {1 .1} spawn /usr/bin/telnet "$MODEM_IP" expect -exact "ADSL Router" expect -exact "Login: " send -s -- "$USERNAME\r" expect -exact "Password:" send -s -- "$PASSWORD\r" expect -exact "> "
send -s "reboot\r"
expect -exact "The system shell is being reset. Please wait..."
exit
EOF
Скачал, запустил – все работает! Но как поместить .bat в планировщик задач с условием выполнения при обрыве связи мозгов не хватает.
Не понимаю ! Запуск .bat из папки нормальный. Из планировщика-никакой реакции. Путь к файлу .bat прописан через “обзор” так что неправильным быть не может. Исполняемый файл лежит в одной папке с .bat. что еще может быть не так ?
Укажите в планировщике рабочую папку, в которой лежит скрипт.
прошу прощения! Первый раз работал с планировщиком и не обратил внимание на поле “рабочая папка”. Еще бы условие как то подставить при обрыве связи. Не может быть, чтобы в windows в каком нибудь журнале это не отражалось
Проверка на обрыв связи добавьте в начало скрипта:
ping -q -c 1 "8.8.8.8" > /dev/null && exit
Теперь Вам нужно только установить интервал выполнения в планировщике – каждые 5, 10 или 15 минут – на Ваше усмотрение. Если пинг не проходит – скрипт перезагрузит роутер.
Спасибо !
Но, к сожалению, 5 минут меня не устраивают. Специфика работы требует не более одной.
Поставьте в планировщике сколько угодно. Будет каждую минуту проверять. Хотя, проблем может добавить т.к. модем не успеет перегрузиться за минуту и поднять соединение, а скрипт его повторно уже в ребут отправит.
Попробовал в планировщике привязаться к событию BROWSER код 8033. Интересно, что при отключении питания роутера сразу проходит команда на перезагрузку, а при отключении кабеля интернета планировщик не реагирует, несмотря на то, что событие в журнале появляется.
Ваш вопрос выходит за рамки данной темы.
Согласен, тем более, что проблему решил.
Спасибо автору за статью, реально помогла )) перерыл кучу сайтов ниче не найти или не работает (( а тут все гуд ..
только про обрыв связи не понял… сюда что ли дописать – Reboot Router.bat
Дай Бог вам здоровья! :)
Спасибо
Глядя на все эти мучения убеждаешься, что использование стоковой прошивки – это бег в ластах. В OpenWrt это делается простейшим скриптиком по крону. ИЗНУТРИ роутера (чуствуете разницу?)
Жорик, для данной модели роутера не существует альтернативных прошивок.
Для TPlink Archer C20 скрипт не работает. Wget из под Win ((
tl-mr3420 работает. Спасибо
Заметил изменения в новых прошивках из-за которых не работает скрипт.
Например, прошивка 3.16.9 Build 150514 Rel.39242n для роутера TL-WR842ND.
Если раньше в адресной строке после авторизации было:
http://192.168.0.1/userRpm/Index.htm
то теперь стало:
http://192.168.0.1/SVSJAQKBMSYTYZXB/userRpm/Index.htm
т.е. сделали:
http://192.168.0.1/хешфункция/userRpm/Index.htm
Т.к. “хешфункция” все время разная и генерируется случайно, я пока не знаю как рассчитать команду для перезагрузки, которая тоже должна выглядеть как:
http://192.168.0.1/WXBGWZPAKBCAAQWB/userRpm/SysRebootRpm.htm?Reboot=Reboot
т.е.:
http://192.168.0.1/хешфункция/userRpm/SysRebootRpm.htm?Reboot=Reboot
Refer при этом:
http://192.168.0.1/хешфункция/userRpm/SysRebootRpm.htm
т.е. проверка на корректность Refer уже, скорее всего, происходит, т.к. если после авторизации просто попробовать правильно составить URL для перезагрузки (с учетом хеша) и выполнить его в адресной строке браузера, роутер ругается на отсутствие авторизации и ничего не происходит.
И последнее – для авторизации стали использоваться куки:
Имя: Authorization
Содержимое: Basic%20YWRtaW46MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM%3D
Узел: 192.168.0.1
Путь: /
Срок действия истекает: В конце сессии
К сожалению, все это делает невозможным использование скрипта автоматической перезагрузки.
да, совершенно точно. У меня точка доступа TP-Link TL-WA801ND. Telnet не работает. Никаких конфигураторов или командной строки нет. Данный способ не работает из за генерируемого участка пути.
Остается на выбор – графический скрипт на сервере: запустить браузер – зайти на страницу – перейти в меню перезагрузки – нажать кнопку reboot; Либо второй вариант – управляемая розетка; Ну есть еще третий вариант – искать кастомную прошивку.
Спасибо большое за подсказку !
я сделал (на основе Вашего) 2 скриптика один для проверки сети (каждые 3 минуты) а вторым в час ночи перезагружаю принудительно так как у билайна надо переподключаться чтобы трафик с 1-8 часов не считался .
До этого перезагружал китайский таймер .
работает на ноуте с linux для перезагрузки TP-Link MR-3420v2(3.16.9 Build 150116 Rel.40997n) + ZTE MF823
#!/bin/sh
WATCHED_IP="8.8.8.8"
ROUTER_IP="192.168.1.1"
#MODEM_IP="192.168.8.1" #Для будущих экспериментов с вебмордой 4G модема
USERNAME="name" # Вставить от своего роутера
PASSWORD="password" # Вставить от своего роутера
# DISPLAY=:0 gdialog --msgbox "Скрипт работает !" 25 20 > /dev/null # Проверочная строка
# Проверочная строка для того чтобы знать что скрипт запустился на этапе настройки CRONa
# Выведет на экран окошечко с надписью что скрипт работает
# Проверка наличия инета в частности пинг гугла
ping -q -c 1 "$WATCHED_IP" > /dev/null && exit
# Проверка пингуется ли роутер
ping -q -c 1 "$ROUTER_IP" > /dev/null || exit
# Перезагрузка
curl --basic --user "$USERNAME:$PASSWORD" -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" --refer "http://$ROUTER_IP" "$ROUTER_IP/userRpm/SysRebootRpm.htm?Reboot=reboot"
почему-то двойные кавычки местами заменились двойными стрелочками
Исправил.
Спасибо! Готовая сборка для windows работает. Запихнул в планировщик задачу на запуск bat файла. А то на удаленной точке раз в неделю зависал роутер до момента, пока не ребутнешь вручную =)
Забыл указать, роутер TL-WR841ND
Версия прошивки:
3.14.19 Build 130620 Rel.63894n
Версия оборудования:
WR841N v8 00000000
WR841N v9 00000000
Не работает! Там при загрузке ввод пароля и логина уже другой и не может ввести((( Может кто знает как решить проблему?
Как вариант, на Ваш роутер можно поставить прошивку DD-WRT – в ней есть управление с консоли. Нужно только написать или найти под нее скрипт перезагрузки.
Здравствуйте! Подскажите пожалуйста, как сделать такой скрипт для Win7. Роутер Zyxel Keenetic 4G II. У меня как-то наполовину решена проблема перезагрузки в час ночи. Тоже пользуюсь билайном, ночной безлимит. Ночью у меня загружаются торренты, днем смотрю фильмы. Человек я уже немолодой, но все же стараюсь чему-то научиться. Нашла где-то в интернете и прописала в коде файла config период между перезагрузками, равный 24 часа. Всё работает, Я сначала обрадовалась, но сын (живет в другом городе) мне сказал, что если у роутера отключится питание, то отсчет периода начнется с момента нового включения. А это значит, что следующая перезагрузка будет уже явно не в час ночи. Как бы реализовать точную по времени перезагрузку моего роутера на Windows? И свет кстати не редко отключают. Честно, уже устала не спать до часу ночи, чтобы вручную перезагрузить (просто выдергиваю и ставлю обратно модем). Может кто-то может мне ответить: почта***
Елена, здравствуйте! По Zyxel подсказать не могу т.к. у меня нет его в наличии чтобы посмотреть настройки.
Реализовал перезагрузку роутера с помощью SlimerJs/PhantomJs и вот такого скрипта reboot.js:
var webpage = require('webpage').create();
webpage.onConsoleMessage = function (msg) {
console.log(msg);
};
var vWidth = 640;
var vHeight = 480;
webpage.viewportSize = { width: vWidth, height: vHeight};
webpage
.open('http://' + phantom.args[0])
.then(function(){
webpage.evaluate(function (username, password) {
document.getElementById("userName").value = username;
document.getElementById("pcPassword").value = password;
document.getElementById("loginBtn").click();
}, phantom.args[1], phantom.args[2]);
slimer.wait(1000); // пауза, длительность в миллисекундах
var page = webpage.evaluate(function () {
window.frames["bottomLeftFrame"].document.getElementById("a49").click();
});
slimer.wait(1000); // пауза, длительность в миллисекундах
var page = webpage.evaluate(function () {
window.frames["mainFrame"].document.forms[0].onsubmit = function(){return true;}; :: // убираем confirm, с ним не работает slimerjs
});
var page = webpage.evaluate(function () {
window.frames["mainFrame"].document.getElementById("reboot").click();
});
slimer.wait(1000); // пауза, длительность в миллисекундах
slimer.exit();
});
Запускается вся эта красота батником reboot.bat:
:: ставим кодировку юникода
chcp 65001
:: перезагрузка роутера
call slimerjs.bat reboot.js ip login password
Спасибо! А скрипт на каком роутере пробовали?
TL-WR940N с последней прошивкой – работает отменно уже больше месяца! :) До их нововведения с рендомным набором букв в адресной строке пользовался скриптом wget – все было замечательно, пока не обновился…
Вечер добрый. Не могли бы Вы подробнее описать настройку системы для работы этого скрипта.
Как из Андроида перезагружать если он без рута?
АлекС, я перезагрузкой из Android не занимался.
Попробуйте спросить на форуме в этой теме:
https://forum.tp-linkru.com/viewtopic.php?f=236&t=4780&p=53927#p53927
Подскажите умоляю, как из Андроида без рута автоматически перезагружать роутер (модем) D-link 2650 по телнету, когда на нем пропадает интернет?? Андроид постоянно подключён к этому модему.
Я когда-то делал скрипт для D-Link под Linux (Ubuntu/Debian) и Windows.
Но это было очень давно. Попробую найти эти файлики.
Терминал, думаю, в андроиде аналогичен по командам Линуксу.
Доброго времени суток! Вы не могли бы сказать как правильно на Windows запустить скрипт, который будет пинговать сервер Google и в случае ошибки (отсутствия интернета) запускать перезагрузку роутера. Не совсем понял процесс виноват.
Вам нужно поставить исполнение этого скрипта в планировщик заданий windows.
Здравствуйте. Мне очень нужно нужно сделать авто ребут роутера, но проблема в том, что я полный ноль) Выше писали, что WR841N v9 00 Не работает. У меня TL-WR841N VER 9.2. Может ли кто-нибудь через скайп или вк растолковать мне что сделать. Могу за советы по настройке рублей 500 на киви скинуть к примеру.
Евгений писал выше, что Реализовал перезагрузку роутера с помощью SlimerJs/PhantomJs и скрипта reboot.js: У меня так не выйдет?
841-й можно перешить на прошивку DD-WRT, которую намного проще перегружать. А, возможно, после перепрошивки перезагрузка и не понадобится…
Благодарю за совет. Попробую. Мне для работы нужно каждый час перезагружать роутер. Надеюсь получится.
Здравствуйте. Извините за то, что тревожу. Вернулся к задаче. Я очень страшусь, так как чайник полный) Если я установлю DD-WRT, я смогу перезагружать роутер Готовой сборкой Wget + Bat? А потом сделать перезагрузку через планировщик задач на каждый час?
Wget + Bat = помогло, спасибо.
Здравствуйте! Подскажите пожалуйста правильно ли добавлено в скрипт проверка обрыва связи на перезагрузку роутера. Без проверки роутер перезагружается с помощью скрипта.
cls
Echo *****************************************************
Echo REBOOTING
Echo *****************************************************
ping -q -c 1 “8.8.8.8” > /dev/null && exit
wget.exe –http-user=****** –http-password=******* –user-agent=”Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36″ –referer=http://192.168.0.1/userRpm/SysRebootRpm.htm http://192.168.0.1/userRpm/SysRebootRpm.htm?Reboot=1
rem *****************************************************
rem Удаление лишних файлов
rem *****************************************************
Выручайте. Роутер TL-WR740N, Версия встроенного ПО: 3.13.2 Build 140814 Rel.39331n; Версия оборудования:WR740N v4 00000000
Не помогает скрипт который под виндовс.
Проверьте IP адрес роутера, если не 192.168.0.1, а 192.168.1.1 – исправьте в скрипте.
Здравствуйте! Правильно ли поставил ping -q -c 1 “8.8.8.8” > /dev/null && exit в начало скрипта для автоматической прооверки и перезагрузки роутера?
cls
Echo *****************************************************
Echo REBOOTING
Echo *****************************************************
ping -q -c 1 “8.8.8.8” > /dev/null && exit wget.exe –http-user=%Login% –http-password=%Password% –user-agent=”Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36″ –referer=http://%IP%/userRpm/SysRebootRpm.htm http://%IP%/userRpm/SysRebootRpm.htm?Reboot=1
Всем привет. А как это сделать на роутере TPlink Archer C5400
Там вообще в веб-строке вот такое и с хешем http://192.168.1.1/cgi-bin/luci/;stok=54574a57da788bb3c3e6053c6b9e0f35/admin/system?form=reboot
Это, конечно “не наш метод”, но все же. Для перезагрузки этого роутера можно приобрести программируемую механическую или электронную розетку…
Не получается…..
C:\Download\tplink_reboot_wget> wget.exe –http-user=admin –http-password=***** –user-agent=”Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36″ –referer=http://192.168.1.1/userRpm/SysRebootRpm.htm http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=1
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:/progra~1/wget/etc/wgetrc
–2020-02-03 20:07:17– http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=1
Connecting to 192.168.1.1:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: unspecified [text/html]
Saving to: `SysRebootRpm.htm@Reboot=1′
[ ] 8 865 –.-K/s in 0s
2020-02-03 20:07:17 (450 MB/s) – `SysRebootRpm.htm@Reboot=1′ saved [8865]
Роутер tp-link 1043
Добавьте в статью скетч Arduino для плат на базе микроконтроллера ESP32. Код для перезагрузки TP-Link.
#include
#include
const char* IP_port = “http://192.168.0.1:80”;
#define RouterLogin “admin”
#define RouterPassword “admin”
void setup() {
Serial.begin(115200);
WiFi.begin(“ssid”, “pass”);
while (WiFi.status() != WL_CONNECTED) {
delay(500); Serial.print(“.”);
}
HTTPClient http;
http.begin(String(IP_port) + “/userRpm/SysRebootRpm.htm?Reboot=1”);
http.setAuthorization(RouterLogin, RouterPassword);
http.addHeader(“User-Agent”,”ESP32 wrower”);
http.addHeader(“Referer”, String(IP_port) + “/userRpm/SysRebootRpm.htm”);
Serial.printf(“[HTTP] GET…code: %d\n”, http.GET());
// Serial.println(http.getString()); // Выдаст вебстраничку
http.end();
}
void loop() {}
Сьелся частично код. Вот исходник http://arduino.ru/forum/obshchii/udalennaya-perezagruzka-routera-tp-link#comment-588387
Спасибо! Добавил.
Вопросик, а если у меня к примеру archer 1200 v2 и он не имеет логина , толкьо пароль. Можно ли как то обойти это в .bat?
Файлы и готовые сборки не скачиваются.
Возможно были удалены?
Можно их снова выложить?
Нет, не удалены. Попробуйте скопировать ссылку на архив, открыть новую пустую вкладку в браузере, вставить в адрес эту ссылку и перейти по ней таким образом.
https://github.com/jonyrh/ArcherC7V2AutoReboot
для последней прошивки
Archer C7 v2 3.15.3 Build 180308 Rel.37724n