Правильно! Связаться с вебстримом!
У них опять началось. Умудряются вгонять модем в состояние такого висюка, когда простой сброс сессии не помогает, лечится только полным рестартом железки.
Ничего-ничего. Три часа, изучение перловых скриптов, вдумчивое чтение западных и немецких (хе-хе) форумов и вуаля. Дописан мой тупой зацикленный батник, который является попингуем, если пинг не идет - сбрасывается сессия и снова пингуется, если и так облом - делается рестарт модема.
На перле было бы несколько изящнее, но меня и так устраивает. Эстетам предлагаю копать в сторону cURL, с его помощью все тоже вполне решаемо.
Все актуально для Zyxel 660-HTW2
Имеем базу:
- запущенный файрфокс
- плагин lastpass
- заходим на роутер, запоминаем в lastpass админский пароль
- заходим в ластпасс, исправляем url с
http://192.168.1.1 на
http://192.168.1.1/Forms/rpSysReboot_1, пароль правим на свой
- клепаем батник вида
:START
sleep 180
ping irkutsk.wstream.ru | find "TTL=" > nul
if %errorlevel% == 0 (
goto start
) else (
ZTnBatch -h 192.168.1.1 -p dizzy -c "poe drop poe0"
)
sleep 180
ping irkutsk.wstream.ru | find "TTL=" > nul
if %errorlevel% == 0 (
goto start
http://192.168.1.1/Forms/rpSysReboot_1goto start
Скачиваем ztnbatch и кидаем его куда-нибудь, куда тыкается переменная Path из винды. c:\windows, если совсем впадлу.
Пихаем батник в автозагрузку. Все.
Аэробика. Танцуем все. Работоспособность автопилотом проверю завтра, в ручном режиме вроде все работает, как запрошено.
p.s. Они думали, что им все можно и с ними бороться не выйдет. Ага, щаз.
p.p.s. Перловый скрипт для cURL, необходима доработка напильником, я его так толком и не победил:
#!/usr/bin/perl
my $ROUTER_IP = 'your_router_ip_address'; # your router's IP address on the LAN, here
my $ADMIN_PASSWORD = 'your_password'; # your router's password here
# ----------------------------------------
-----------------------------------
use Digest::MD5 qw(md5_hex); my $pwdmd5 = md5_hex($ADMIN_PASSWORD);
my $url_login = "
http://$ROUTER_IP/Forms/rpAuth_1?"
.
"hiddenPassword=$pwdmd5&LoginPassword=ZyXEL+ZyWALL+Series";
my $url_reset = "
http://$ROUTER_IP/Forms/rpSysReboot_1";
print "Logging in...\n";
system ("curl -s '$url_login'") and die "curl $url_login failed";
print "Rebooting...\n";
# hit the reset URL. this will immediately trigger a reset without closing the
# connection (duh!), so kill the local "curl" process once we do it
my $resetpid = fork();
if ($resetpid == 0) {
exec("curl -s '$url_reset'");
die;
}
sleep 5;
kill 15, $resetpid;
kill 9, $resetpid;
# wait for reboot to complete and line to reenable
print "Waiting for reconnection...\n";
my $start = time;
for ($retry = 0; $retry < 180; $retry++) {
my $gotit;
open (IN, "ping -c 1 ya.ru |");
while (
) {
if (/bytes from ya.ru: /) { $gotit = 1; }
}
close IN;
if ($gotit) {
my $secs = time - $start;
print "Rebooted and reconnected after $secs seconds\n";
exit;
}
sleep 1;
}
die "timed out before we got a ping reply!\n";