Принудительный реконнект может потребоваться для получения нового IP-адреса при
пользовании, к примеру, таких сервисов, как rapidshare.
Для браузера Firefox существует дополнение "Tamper Data", с помощью которого
можно отлавливать и разбирать по полочкам запросы GET/POST. Так вот, основа
того, что можно реконнектить модем через веб-интерфейс настроек модема, как раз
и лежит в этом способе. Всего (обычно) действий четыре: логин с паролем, разрыв
соединения и через некоторое время (5-10 секунд) - восстановление соединения с
внешним миром и выход из настроек.
Рассмотрим два шага, для случая, если в локальной сети к установкам модема
можно "дотянуться" без пароля.
Если мы уже находимся в веб-интерфейсе настроек модема, то нужно найти кнопки
"Disconnect" и "Connect". После этого включаем "Tamper Data" через панель
расширений и созерцаем соединения GET/POST в нашем окне. Жмём "Disconnect" в
веб-интерфейсе модема и смотрим, что происходит в нижнем левом окне:
POSTDATA=controller=Internet&action=DisconnectInternet&id=0&ReturnPage=%2Fdiagnostic.htm
В верхнем окне, в строке "POST" видим
http://192.168.1.1/cgi-bin/Hn_wan.cgi
Таким же образом определяем восстановление соединения с внешним миром:
POSTDATA=controller=Internet&action=ConnectInternet&id=0&ReturnPage=%2Fdiagnostic.htm
для
http://192.168.1.1/cgi-bin/Hn_wan.cgi
Затем пишем простой shell-скрипт:
#!/bin/sh
# by Karbofos
echo "disconnect"
wget -q -O /dev/null --post-data="controller=Internet&action=DisconnectInternet&id=0&ReturnPage=%2Fdiagnostic.htm" http://192.168.1.1/cgi-bin/Hn_wan.cgi >/dev/null 2>&1
sleep 5
echo "connect"
wget -q -O /dev/null --post-data="controller=Internet&action=ConnectInternet&id=0&ReturnPage=%2Fdiagnostic.htm" http://192.168.1.1/cgi-bin/Hn_wan.cgi >/dev/null 2>&1
Как видно, текст из буфера обмена нужно немного переработать, выкинув текст
"POSTDATA=" и обращаться нужно не просто по IP адресу модема, а вызывать нужное
cgi приложение, в нашем случае Hn_wan.cgi
Пауза в 5 секунд необходима для получения нового IP адреса, величина зависит от
провайдера, устанавливается экспериментальным путём. Если пауза будет меньше,
то есть вероятность того, что вы получите предыдущий IP.
Конечно, если у вас доступ к настройкам возможен через ввод пароля, то и скрипт
нужно расширить, добавив к wget опции "--http-user=логин
--http-password=пароль". Если машина не однопользовательская, параметры
аутентификации можно поместив их в файл ~/.wgetrc, указав http_user=логин и http_password=пароль.
Или же логин можно "отловить" через веб-интерфейс и расширить скрипт,
основываясь на данных (для вышеприведенного примера):
POSTDATA=controller=Overview&action=Login&id=0&idTextPassword=YourPassword
для приложения http://192.168.1.1/cgi-bin/Hn_login.cgi
Часть 2. Написание реконнект-скрипта для DSL модема с использованием telnet
Собственно, была небольшая проблема реконнекта модема от Zyxel с целью
получения нового IP-адреса. Этот скрипт я использовал еще до того, как нашёл
возможность проделывать сию процедуру через веб-интерфейс.
При входе на модем через telnet, необходимо пройдись по пунктим меню:
telnet 192.168.1.1
superadmin,yourpassword
24
8
poe drop poe0
dev dial 1
99
Зная эту последовательность команд, пишем скриптик для реконнекта:
#!/bin/sh
host=192.168.1.1
port=23
login="superadmin"
passwd="yourpassword"
(echo open ${host} ${port}
sleep 1
echo ${login}
sleep 1
echo ${passwd}
sleep 1
echo "24"
sleep 1
echo "8"
sleep 1
echo "poe drop poe0"
sleep 1
echo "dev dial 1"
sleep 1
echo exit) | telnet
Или циклом:
#!/bin/bash
host=127.0.0.1
port=23
arr=( "superadmin" "yourpassword" "24" "8" "poe drop poe0" "dev dial 1" "99" )
(echo open ${host} ${port}
sleep 1
for j in "${arr[@]}"
do
echo $j
sleep 1
done
echo exit) | telnet
Задержки в секунду (sleep 1) вводились сугубо из-за опасения за медленную реакцию модема.
|