LINUX.ORG.RU

Перезагрузка роутера через wget. Два действия в одном запросе??

 , , , ,


0

1
wget --load-cookies=wget_eltex --keep-session-cookies -U "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5" http://192.168.0.1/rebootinfo.cgi?sessisonKey=`ps ef | wget --load-cookies=wget_eltex --keep-session-cookies -U "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5" "http://192.168.0.1/resetrouter.html" -q -O - | grep [0-9] | awk -F"=" '{print $3}' | awk -F"'" '{print $1}'`

Выше это код до которого я дошел(авторизацию я оставил за сценой). Но вся суть ступора состоит в том что sessisonKey меняется при каждом новом запросе, что и не дает выполнить перезагрузку через wget потому как при обращении на rebootinfo.cgi?sessisonKey сам sessisonKey уже изменяется.

Вот так выглядит код самой страницы куда шлется последний первый запрос.

<html>
<head>
   <meta HTTP-EQUIV='Pragma' CONTENT='no-cache'>
   <link rel="stylesheet" href='stylemain.css' type='text/css'>
   <link rel="stylesheet" href='colors.css' type='text/css'>

   <script language="javascript">
function btnReset() {
   location = 'rebootinfo.cgi?sessionKey=1895756659';
}
   </script>
</head>

<body>
   <blockquote>
         Click the button below to reboot the router.
   <br><br>
      <input type='button' onClick='btnReset()' value='Reboot'>
   </blockquote>
</body>
</html>

В идеале запускать просто скрипт при обращении к странице, но как это и можно ли командой я не уверен.

Пробовал терминальные обозреватели но они скрипт(js) не запускаю, и не имеют командной строки чтобы не запускать их «гуй».

В идеале суть задачи, запихать все в bash файл и использовать для перезагрузки роутера без лишних манипуляций.

У кого есть варианты как выполнить запрос с тем же sessisonKey?

П.Н. Telnet есть, но при каждой перезагрузке через telnet настройки на доступ по telnet слетают, восстанавливать их ручками не вариант=бессмысленно, иначе тупо уже не нужен telnet.



Последнее исправление: nixbeast (всего исправлений: 2)

headless chrome + selenium

session key скорее всего в куках живет. мож конечно вгет и умеет куки хранить где-то...

NiTr0 ★★★★★
()

при обращении на rebootinfo.cgi?sessisonKey сам sessisonKey уже изменяется

значит что-то ты упускаешь. поснифь запросы из браузера и сравни с тем, что ты отправляешь wget'ом.

anonymous
()
Ответ на: комментарий от NiTr0

Эти данные нигде не живут, этот ключ используется на разных страницах, с «постом», и везде создается новый ключ при обновлении страницы вся его жизнь это текущий вывод HTML.

nixbeast
() автор топика

Решение через PhantomJS. Кому надо.

var page = require('webpage').create();

page.open("http://192.168.0.1/", function (status) {
    page.evaluate(function() {
        document.getElementById("username").value = "user";
    	document.getElementById("password").value = "user";
    	document.getElementById("submitBtn").click();
    });

    setTimeout(function () {
		page.render("eltex.png");

		page.open("http://192.168.0.1/resetrouter.html", function (status) {

			var a = page.evaluate(function() {
				return document.querySelector('input');
			});

			page.sendEvent('click', a.offsetLeft, a.offsetTop);

            setTimeout(function () {
                page.render("reset.png");
                phantom.exit();
            }, 5000);
        });

	}, 5000);
});

Решение готовое к использованию, только вырезать генерацию картинок. Перезагрузка Eltex роутера от ростелекома из «терминала» linux. Тестовый аппарат - NTE-RG-1402G-W:rev.B

П.Н. Если прете код на свой сайт, то ссылку на эту тему(Перезагрузка роутера через wget. Два действия в одном запросе??) не зажмите.

делонаше(.)(.)рф

nixbeast
() автор топика
Ответ на: комментарий от nixbeast

а откуда по-вашему страничка знает о текущем значении ключа (в том или ином виде), как не из куки?

NiTr0 ★★★★★
()
Ответ на: комментарий от NiTr0

Как я понимаю механизм

Есть кука авторизации, и да wget умеет их хранить и использовать, там есть данные самой авторизации - одна простая запись что этот персонаж авторизован. Куки статичны пока действуют.

Ключ для форм POST, генерируется вместе с текущим html, повторяю при каждом обновлении страницы ключ новый, простой F5, авторизация прежняя и куки тоже, создается он очевидно динамически и вписывается в инлайн скрипт в текущей выдачи html, формы все отправляются с этим ключем и подхватываются через js. Сами можете посмотреть код страниц если есть такой роутер.

Куки и ключ в js между собой никак не связанны, может быть только для генерации используется как соль/хеш но не более. Через куку sesseioKey не получить, потому что его там нет, и на каждое обновление страницы кука остается без перезаписи, проверял через браузер(и wget ходит по одной и той же кукиес), а ключ каждый раз новый, ключ судя по всему используется для подтверждения актуальности текущего документа а не пользователя.

nixbeast
() автор топика
Ответ на: комментарий от Jopich1

Весь смысл в комментарии spec_po_kiskam.

Начинает тупить через какое-то время, и может не пускать по http сразу(для перезагрузки), без обновления подключения, походу с DHCP тупит, отказаться от него «вариант, но не вариант».

По этому лучшее решение в данной ситуации это просто перезагружать его периодически. Сейчас командой из терминала, позже добавлю в автозагрузку чтобы утром при включении ПК(по расписанию поднимается в 7 каждый день) он перезагружал роутер или в крон кину...

nixbeast
() автор топика
Ответ на: комментарий от boowai

А подробнее про наверно есть что сказать?

Я с wget в два подхода по паре часов с этой задачей просидел. Еще раз при работающем решении тратить время на «наверно», с направлением в пустоту как-то не особо желания.

В чем принципиальная разница, для этой задачи, между ними?

nixbeast
() автор топика
Ответ на: комментарий от Jopich1

Покупать не вариант, а ждать что другой от РТ будет лучше работать, какая-то сомнительная перспектива.

nixbeast
() автор топика
Ответ на: комментарий от nixbeast

Подробней не скажу. Только, что curl более поточный. И больше заточен на обмен данными, чем wget, который больше под загрузку заточен. Обычно его приводят в примерах работы с api по http. И есть ещё libcurl, где можешь сам открывать и закрывать соединения. Многие морды через libcurl связываются с серверами.

boowai ★★★★
()
Ответ на: комментарий от NiTr0

Первую строчку кода в моем запросе смотрел??

Хоть один мой ответ читал?

Ключ это ключ документа, при генерации страницы он каждый раз новый. Новый запрос - новый ключ. В куках нихера нет!

nixbeast
() автор топика
Ответ на: комментарий от nixbeast

Есть ли в роутере внешний доступ к командной оболочке? Можно было бы запускать скрипт для перезагрузки удаленно

Не разбираюсь в этом, но на openwrt было подобное, может при помощи RFS можно обращаться к файлу и на сервере выполнять действия при обращении

mazdai ★★★
()

Роутер проверяет UA, серьёзно?

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Первая строчка кода в вопросе. Там я так и делаю. Далее по теме не раз повторял, новое обращение = новый ключ. Ключ это ключ текущего документа, и только с ним - актуальным, можно выполнить любой запрос.

nixbeast
() автор топика
Ответ на: комментарий от nixbeast

в куках - session id. ключ - хранится в сессии, ессно генерится по новой. но пичаль в том, что без куков нет сессии, а без сессии нет ключа.

и я не вижу проблем грепнуть ключ и сделать второй запрос с этим ключом.

NiTr0 ★★★★★
()
Ответ на: комментарий от nixbeast

ну и чем по-вашему грепнутый из «текущего документа» ключ, подставленный в новый запрос, принципиально отличается от клика в браузере по ссылке с ключом/ajax get запроса с ключом? вы вообще понимаете как хттп работает-то? :)

NiTr0 ★★★★★
()
Ответ на: комментарий от NiTr0

Если Вы способны прочитать только одно сообщение за раз, то специально для Вас повторю код из первого сообщения

wget --load-cookies=wget_eltex --keep-session-cookies -U "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5" http://192.168.0.1/rebootinfo.cgi?sessisonKey=`ps ef | wget --load-cookies=wget_eltex --keep-session-cookies -U "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5" "http://192.168.0.1/resetrouter.html" -q -O - | grep [0-9] | awk -F"=" '{print $3}' | awk -F"'" '{print $1}'`
И объясняю почему оно не работает через wget, и чем отличается от клика в браузере.

Тут(с wget) ты два раза, в два разных запроса, обращаешься к одной и тоже странице на которой при каждом новом запросе генерируется ДРУГОЙ ключ проверки формы. Соответственно второй запрос, обращается с ключем полученным из первого запроса, уже передает устаревшие данные, а про http можете себе на ночь рассказывать.

Вам черным по белому объясняют что, форма актуально только в одном запросе на ее генерацию - ключ выводится в js скрипт инлайном в текущем документе html.

При клике в браузере, ты отправляешь запрос - форму без обновления из текущего документа, и все скрипты отрабатывают на раз.

Суть задачи, в один запрос wget не может и получить документ и отправить запрос с актуальными для него данными .так как каждый запрос wget = новому обращению к роутеру на что тот отвечает генерацией новой страницы, в которой динамичен только инлайн js в котором каждый раз появляется новый ключ.

nixbeast
() автор топика

Тему закрываю так как судя по всему этим путем решения не найти, а активные участники не все способны понять суть проблемы.

Меня вполне сейчас, и далее, устроит решение через PhantomJS

Благодарю за участие, всех внимательных!

nixbeast
() автор топика
Ответ на: комментарий от nixbeast

При клике в браузере, ты отправляешь запрос - форму без обновления из текущего документа, и все скрипты отрабатывают на раз.

Чушь какая. Браузер точно так же делает новый запрос.

Суть задачи, в один запрос wget не может и получить документ и отправить запрос с

Суть задачи - надо сделать 3 wget: http://192.168.0.1/resetrouter.html , http://192.168.0.1/rebootinfo.cgi и http://192.168.0.1/rebootinfo.cgi?sessionKey=распарсенный в прошлый раз.

vodz ★★★★★
()
Ответ на: комментарий от nixbeast

Если Вы способны прочитать только одно сообщение за раз, то специально для Вас повторю код из первого сообщения

--save-cookies где? ну т.е. куда ваши куки должны сохраняться?

Тут(с wget) ты два раза, в два разных запроса, обращаешься к одной и тоже странице на которой при каждом новом запросе генерируется ДРУГОЙ ключ проверки формы. Соответственно второй запрос, обращается с ключем полученным из первого запроса, уже передает устаревшие данные, а про http можете себе на ночь рассказывать.

открою страшный секрет: браузер по клику на кнопку/лин тоже отправляет второй запрос. который не менее «разный», чем второй запрос вгета.

Вам черным по белому объясняют что, форма актуально только в одном запросе на ее генерацию - ключ выводится в js скрипт инлайном в текущем документе html.

При клике в браузере, ты отправляешь запрос - форму без обновления из текущего документа, и все скрипты отрабатывают на раз.

и чо? ворой запрос-то при этом что, отсутствует? если нет - то в чем проблема сформировать его точно с теми же заголовками что и в браузере?

NiTr0 ★★★★★
()

sessisonKey меняется при каждом новом запросе

Во, понакодили. Это очень плохо, т.к. если обновлять содержимое страницы очень быстро и множество раз, то нет никакой гарантии, что ты получишь ответ именно на последний отправленный запрос. Пусть для роутера это не актуально и пример притянут за уши, но он показывает, как легко можно просрать синхронизацию(авторизацию?) по динамическому ключу.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Да... накодили, я тоже когда понял что он «sessisonKey», динамически создается для текущего документа охренел слегка, и до сих пор не особо логики замечаю за этим, так как большого смысла в защите тут нет. Для выполнения запроса нужна авторизация так и так, какой смысл в этом?? Какой-то смысл за уши притянуть можно, а так глупость какая-то.

nixbeast
() автор топика
Ответ на: комментарий от NiTr0

Отвечу коротко. Вы меня не понимаете, и не хотите этого делать, даже код прочитать ровно не прилагаете никаких попыток.

Дальше пытаться продолжать с Вами вести какие-либо дискуссии не вижу смысла, для нас обоих.

Всего наилучшего!

П.Н. Если есть желание осознать в чем у нас непонимание, перечитайте сам вопрос, найдите такой же роутер(NTE-RG-1402G-W:rev.B) и «поиграйте» с ним.

«Видишь там, на горе, возвышается крест.»

nixbeast
() автор топика
Ответ на: комментарий от nixbeast

в том-то и дело - я прекрасно понимаю, как работает хттп. в отличие от вас. и никакой магии от «яваскрипта, запущенного в документе», нет и быть не может - на роутер приходят два GET-запроса, и ни о каком «новом документе» он знать не знает, все то он получает - GET-заголовки.

то что вы не осилили сформировать запрос, или просто херите сессию/куки т.к. забыли --save-cookies указать - то ССЗБ.

NiTr0 ★★★★★
()
Ответ на: комментарий от NiTr0

Теперь мне уже интересно ...

Ответьте мне на ряд простых вопроса.

1) Как по Вашему я без --save-cookies, выполняю --load-cookies, и получаю данные со страницы для которой нужна авторизация?

2) Вы видели в вопросе эти буквы??

Выше это код до которого я дошел(авторизацию я оставил за сценой).

wget --keep-session-cookies --save-cookies wget_eltex --post-data 'username=key&password=value' -U "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5" http://192.168.0.1/login

wget просто не может сделать, в данной ситуации, того что требуется. К моменту оправки полученного sesseionKey его актуальность уже теряется. Вопрос судя по всему реально в потоках, сессиях, куки тут не причем вообще. Ключ к примеру через браузер актуален будет пока не закрыть страницу роутера, куки остаются, а при повторном открытии, авторизация все еще актуальна, а ключ не работает.

Позже, возможно, для саморазвития таки попробую как советовал товарищ boowai

nixbeast
() автор топика
Ответ на: Теперь мне уже интересно ... от nixbeast

Вопрос судя по всему реально в потоках, сессиях, куки тут не причем вообще

какие потоки, сессии?... session ID - хранится в куках. никакими «потоками» тут и не пахнет - вебсокетов там нет.

Ключ к примеру через браузер актуален будет пока не закрыть страницу роутера, куки остаются, а при повторном открытии, авторизация все еще актуальна, а ключ не работает.

какое «повторное открытие»? открываете снова страничку с кнопкой и новосгенеренным ключом? так само собой старый ключ заменится новым.

смотрите, что в заголовках шлется в одом и втором случаях и думайте где отличие.

NiTr0 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.