ahelper

<<< Back

Получение внешнего IP из роутера Sagemcom F@ST 1744 V2

Подключаюсь к Роутеру Sagemcom f@st 1744 v2.2, по HTTP, для получения внешнего IP, выданным провайдером Ростелеком. Для проверки какой IP выдан, серый или белый. И если IP белый, то отправляю данные на сервис HLDNS.ru. Если IP серый, перезагружаю роутер пока не получу белый IP. Итог: сервер "Умного дома" всегда в глобальном доступе.

Теперь для чего все это!
Зарегистрировавшись на бесплатном сервисе HLDNS.ru, получил внешнее доменное имя. Но в какой то момент сервер умного дома стал недоступен. Анализ показал, что IP сменился и стал "серым". В моей сети серые адреса начинаются на 100.х.х.х. Для получения белого IP, приходится перезагружать роутер, иногда несколько раз если повторно выдается серый IP.

Кто то подумает, зачем? Настрой VPN. Но я пошел по такому пути! И эта информация, чтобы самому не забыть, что делал. Может кому и пригодится еще!
Пробовал использовать другие роутеры, но они не тянули две ТВ приставки в HD качестве. То WI-FI отваливался, то изображение сыпалось кубиками.

Перерыв просторы интернета, так и не нашел информации, как GET запросом перезагрузить роутер. И вообще какой либо информации по подключению к нему, только через браузер. (Можно выполнить атаку на роутер POST запросом, тем самым он себя перезагружает, работает на многих роутерах) в Cценарии=>Связь=>Router_restart
Пришлось разбираться самому, в том чего никогда не делал (только пару строк на PHP могу).

Для этого решил использовать программу "SmartSniff" из набора программ NirLauncher. Она может отследить трафик запросов и ответов, и показать содержимое. Запускаю программу и начинаю с браузера логинится к роутеру, вводя сначала неправильные данные, а потом правильные. Тем самым получаю ответы от роутера разные, для сравнения. В программе нахожу запрос авторизации, все остальные запросы нам не к чему! Вот запрос и ответ удачной регистрации:

POST /login.cgi HTTP/1.1
Host: 192.168.1.1
Connection: keep-alive
Content-Length: 62
Cache-Control: max-age=0
Origin: http://192.168.1.1
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://192.168.1.1/login.htm
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: SessionID=

username=admin&password=admin&submit.htm%3Flogin.htm=Send
HTTP/1.1 200 OK
Server: Virtual Web 0.9
Set-Cookie: SessionID=65; path=/
Content-Type: text/html
Content-Length: 233

<html><head><meta HTTP-EQUIV="Pragma" CONTENT="no-cache"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script language='javascript'></script></head><body onload="window.location.href='index.htm';"></body></html>

В первой строке стало понятно, что используется POST запрос и обращение к "login.cgi". С помощью команд cURL PHP создаю аналогичный запрос, и все той же программой отслеживаю правильность. Сценарии=>Связь=>Router_IP. Добившись правильного запроса и аналогичного ответа только потом понял, что запрос может быть короче.

$url = "http://192.168.1.1/login.cgi";
$user = gg('Router.Login'); // логин
$pass = gg('Router.Pass'); // пароль
$post='username='.$user.'&password='.$pass.'&submit.htm%3Flogin.htm=Send'; // запрос авторизации

// STEP 1 -- LOGIN
$ch = curl_init(); //инициализация сеанса
    curl_setopt($ch, CURLOPT_URL, $url); //урл сайта к которому обращаемся
    curl_setopt($ch, CURLOPT_HEADER, 1); //выводим заголовки
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); //теперь curl вернет нам ответ, а не выведет
    curl_setopt($ch, CURLOPT_POST, true); //передача данных методом POST
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //тут переменные которые будут переданы методом POST

$result = curl_exec($ch); // Выполняем запрос и получаем HTML в качестве результата

if ($result === FALSE) {
    echo "cURL Error: " . curl_error($ch);
    return;
}
//print_r($result); // смотрим ответ HTML

Ответ запроса в программе SmartSniff:

POST /login.cgi HTTP/1.1
Host: 192.168.1.1
Accept: */*
Content-Length: 62
Content-Type: application/x-www-form-urlencoded

username=admin&password=admin&submit.htm%3Flogin.htm=Send
HTTP/1.1 200 OK
Server: Virtual Web 0.9
Set-Cookie: SessionID=279; path=/
Content-Type: text/html
Content-Length: 233

<html><head><meta HTTP-EQUIV="Pragma" CONTENT="no-cache"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script language='javascript'></script></head><body onload="window.location.href='index.htm';"></body></html>

Ответ HTML после запуска сценария вручную:

Not Found
The requested URL /objects/index.htm was not found on this server.

Авторизоваться получилось!!! Так как нас перенаправило на страницу "index.htm". При неправильной авторизации в моем случае перенаправляет на "login.htm" или еще куда подальше.

Следующим шагом будет получение статистики в HTML, и извлечение внешнего IP. Таким образом можно получать другую информацию (состояние, количество подключенных и тд).

Продолжение следует...
https://connect.smartliving.ru/profile/1594/blog55...

Discuss (0) (2)

See also:
2018-06-25 Использование своей сборки шрифтов в сценах и меню.
2018-05-08 Виджет: Пульт Кондиционера.
2018-05-05 Виджет: Универсальный пульт 3в1.
2018-04-13 Получение внешнего IP из роутера Sagemcom F@ST 1744 V2 (продолжение2)
2018-03-30 Получение внешнего IP из роутера Sagemcom F@ST 1744 V2 (продолжение)

Малоярославец, Россия

На форуме: ahelper