Как стать автором
Поиск
Написать публикацию
Обновить

Пишем оболочку для управления маршрутизатором ASUS WL-520GU.

Здравствуйте, уже как два года являюсь счастливым обладателем домашнего маршрутизатора фирмы ASUS, куплен он был потому как в семье начали появляться ноутбуки а провода это очень не удобно хотя быстро и безопасно. Перепрошивался аппарат только двумя прошивками это DD-WRT и OLEG firmware ставил я их для того что бы быть в курсе и может быть заменить оригинальную прошивку, но выбор пал на последнюю а проблема банальна настройка принтера легче и быстрее на оригинальной прошивке нежили на DD-WRT или OLEG, принтер у меня оказался очень капризный зовут его HP Deskjet D1300 настройка через RAW метод не удалась а LPR сервера на последних прошивках (DD-WRT) не было. И так девайс был прошит официальной прошивкой версии 3.0.0.8 дизайн в ней на много лучше чем у DD-WRT и OLEG но и она оказалась не без проблем подглючивает определение рабочих станции в прошивке 3.1.0.9 вроде бы убрали этот глюк

image

Так же тут нет теленета для удаленного управления. Скажите почему не обновил до последней беты, ответ прост лень которая управляется не хваткой времени. По умолчанию шифрование локальной сети было выставлено на Open system и тому есть причина, первая и основная причина фанатичные друзья линуксоиды у которых на то время были проблемы с установкой беспроводной сети, вторая причина это то что шифрование забирает часть полосы для пакетов безопасности по внутреннему убеждению я не хотел терять 10% производительности да и кто в маленьком городе будет воровать Wi Fi многие и интернета не видели но это было на тот момент. Спустя год я заметил визитеров в моей сети, часто замечал падение скорости интернета, снифер показал что качали с файловых обменников, акт вторжения быстро и жестоко пресекался :). Случаи вторжения были не частыми и узнавал я о них совсем случайно без обновления все станции что были подключены показывались в настройках так как лазить на маршрутизатор было не удобно я подумал о такой утилите которая управляет всем добром быстро и удобно а именно меня интересовали такие функции:

1. Просмотр клиентов подключенных к сети по Wi-Fi
2. Перезагрузка маршрутизатора
3. Смена IP адреса по возможности без перезагрузки

Хотелось не темного экрана а много кнопочек и что бы не пришлось устанавливать библиотеки размером 100 мегабайт, ноутбук то у меня слабый. И был еще один нюанс на ADSL модеме Callisto 821+ сгорели кондеры и теперь при выключение света он намертво вис помогал только сброс до заводских настроек пока электрики не выключали еще раз свет, раньше для быстрой смены IP я переводил модем в режим Роутера и скриптом быстро менял адрес, но когда появилась проблема с кондерами настраивать маршрутизатор оказалось накладно и нудно и так я стал жить без смены быстрого IP. Время шло и наконец прорвало, твердо решив довести все дело до конца я поспрашивал у Гугла что это и как реализовать нашел очень мало информации из этих крупиц я понял что писать придется на Delphi используя библиотеку Indi в которой я не очень разбирался, и еще проблема была в исходных кодах их нельзя было найти без проблем, на одном форуме добыл исходник регера почтовых ящиков, посмотрев на код понял что там полная жопа, в понимании библиотеки я знал что мне поможет книга а вот как быть с запросами GET и POST я не знал. После долгих поисков установил в Firefox два плагина Live Http Headers и Firebug и понял с индии все туго потому как нашел я конструктор программ под названием Hiasm

image

Для достижение цели тут нужно два компонента плюс запрос, да многие скажу что это не есть хорошо ламеризм и.т.д. но хочу не согласиться главное выбирать правильный инструмент к тому же программы на Hiasm имеют маленький размер что очень радует. После выбора инструмента взор пал на форум и его файлообменник быстро были найдены пару примеров, самый яркий из них это наверное выдирание ссылок из депозит-файлс =). С начала хотелось написать полноценную оболочку ну что бы вообще забыть за маршрутизатор но эта идея быстро отвалилась потому как долго это все будет происходить, решил выделить пару пунктов которые озвучены в верху. Самое интересно это запросы, ну вот например:

GET / HTTP/1.1
Host: 192.168.2.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; uk; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.2 YB/3.5.1 (.NET CLR 2.0.50727)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Authorization: Basic 9/LuIPXu9+X4/CDz5+3g8vwg7O7pIO/g8O7r/Dr18+kg8uXh5Q==

Для посылки запроса хватит первой(GET / HTTP/1.1) второй(Host: 192.168.2.1) и последней строчки, 9/LuIPXu9+X4/CDz5+3g8vwg7O7pIO/g8O7r/Dr18+kg8uXh5Q== непонятные символы это логин и пароль закодированные по алгоритму base64 но тут есть подводный камень этот запрос останется без ответа сервера если в конце запроса не вставить пустую строку, так делаются почти все GET запросы в двух случаях параметры передаются прямо в запросе в случае с перезагрузкой соединения WAN первая строка будет похожа на вот это GET /device-map/wan_action.asp?wanaction=Disconnect HTTP/1.1. Остальные запросы которые будут изменять разные настройки будут посылаться POST запросами эти запросы не намного отличаются в нашем случае их нужно правильно составить а именно не пропустить пустую строку только она теперь находится не в конце запроса а отделяет заголовок от тела запроса например вот так:

POST /start_apply.htm HTTP/1.1
Host: 192.168.2.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; uk; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.2 YB/3.5.1 (.NET CLR 2.0.50727)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: 192.168.2.1/device-map/clients.asp
Authorization: Basic 9/LuIPXu9+X4/CDz5+3g8vwg7O7pIO/g8O7r/Dr18+kg8uXh5Q==
Content-Type: application/x-www-form-urlencoded
Content-Length: 174

sid_list=LANHostConfig%3B&group_id=&action_mode=&action_script=networkmap_refresh&current_page=%2Fdevice-map%2Fclients.asp&next_page=%2Fdevice-map%2Fclients.asp&flag=nodetect

В этом запросе нужно обратить внимание на Content-Length: 174 после этого блока идет разделитель и переменные которые мы передаем разделяются они знаком &, можно передавать не всю стопку а только маленькую часть но при этом нужно изменить Content-Length на число равное количеству букв в теле запроса в нашем случае их 174. Собственно этой простой техникой делаются регеры мыл и разные программы такого рода. Что бы не превращать эту статью в занудную статью предлагаю посмотреть исходный код программы по это му адресу www.wuala.com/Hort/Soft/WWW/520GU в архиве лежат исполняемый файл, ини-файл (в нем пропишите логин пароль и адрес маршрутизатора) и сам исходный код или схема так будет точнее звучать. Для компиляции схемы понадобится сам Hiasm и желательно компилятор Delphi который лежит по ссылке выше но стандартный фрипаскаль идущий в комплекте тоже будет работать =) но весить на 10% больше. Эту схему можно переделать и под другой тип маршрутизатора хотя глядя на нее можно запутаться

image

Программку малость глючит в плане обновления данных но кнопка обновить должна избавить вас от проблем =), ну если не исправит можете с этим мирится. В данном случае программа умеет выводить список подключенных ПК, выключать соединение с модемом (менять IP пез перезагрузки), перезагружать девайс, показывает и копирует в буфер обмена WAN IP, показывает принтер его можно тоже включать и выключать правда в прошивке глюк который не дает произвести эту операцию. Не откажусь от инвайта если кому понравилась эта статья.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.