Wget опубликовать форму для перезагрузки маршрутизатора

Я хочу перезапустить мой Fritz!Box 7390 с помощью wget. Веб-интерфейс получил форму перезагрузки, которая выглядит следующим образом:

<form action="/system/reboot.lua" method="POST">
<div id="btn_form_foot">
<input type="hidden" name="sid" value="beb5683181c2ab9f">
<button type="submit" name="reboot">Neu starten</button>
</div>
</form>

Я хочу отправить эту форму. До сих пор я пробовал это так, но это не похоже на работу:

wget --post-data "sid=beb5683181c2ab9f" "http://fritz.box/system/reboot.lua"

Кажется, sid меняется каждый раз, когда я загружаю страницу.

Но я не уверен, что это проблема, потому что я могу исправить sid, добавив? Sid = пример к URL

1 ответ

Решение

Вы не можете просто отправить этот URL в одиночку. Сначала вам нужно получить действительный идентификатор сессии. Это можно сделать, выполнив запрос GET на http://fritz.box/checklogin.lua и схватил его из LOCATION значение заголовка Затем вы можете использовать это, чтобы отправить в http://fritz.box/system/reboot.lua включая идентификатор сессии.

Вот минимальные шаги для его автоматизации:

SID=$(curl -s -I "http://fritz.box/logincheck.lua" | grep -Fi Location | awk -F'[=]' '{print $2}')
SID=$(curl -s -i -H "Content-Type: application/x-www-form-urlencoded" -H "Origin: http://fritz.box" -H "Referer: http://fritz.box/system/reboot.lua\?sid\=$SID" --data "reboot=&sid=$SID" -L http://fritz.box/system/reboot.lua | grep -Fi Location | awk -F'[=]' '{print $2}')
curl -s http://fritz.box/reboot.lua?ajax=1&sid=$REBOOT_SID

Я создал небольшой скрипт с некоторыми дополнительными проверками, которые вы можете найти здесь. Вы можете найти полный скрипт, включая проверку здесь: http://git.io/v3zQs

Предложения, каковы шаги для текущего программного обеспечения (v7.20+)?
Предпочтительно для маршрутизатора, защищенного паролем.

Я попытался обновить его, чтобы использовать недавний путь, используя информацию инструментов разработчика Chrome.
Он дает код состояния 200 и ответ: {"reboot_state":"extern"}.
Но без перезагрузки.

Инструменты разработчика Chrome говорят URL-адрес при нажатии Restart кнопка в пользовательском интерфейсе:

curl 'http://fritz.box/reboot.lua' \
  -H 'Connection: keep-alive' \
  -H 'Pragma: no-cache' \
  -H 'Cache-Control: no-cache' \
  -H 'User-Agent: Mozilla/5.0 (...) Chrome/86.0.4240.111 Safari/537.36' \
  -H 'DNT: 1' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Accept: */*' \
  -H 'Origin: http://fritz.box' \
  -H 'Referer: http://fritz.box/' \
  -H 'Accept-Language: en,en-US;q=0.9,nl;q=0.8,de;q=0.7,la;q=0.6' \
  --data-raw 'ajax=1&sid=1fd4370b50b14b07&no_sidrenew=1&xhr=1&useajax=1' \
  --compressed \
  --insecure

(sid очевидно меняется после каждого входа в систему)

Другие вопросы по тегам