Jak zrestartować router programowo?

Konkretnie chodzi o modem-router ADSL TD-8840

Adres routera: 192.168.1.1

Użytkownik: admin

Hasło: passwd

 

W zasadzie chodziło o zrobienie czegoś w rodzaju watchdoga do routera, a właściwie modemu. Zdarzało się, że jakieś harce Netii powodowały zawieszenie się połączenia internetowego. Skrypt został podwieszony na cronie, pingował trzykrotnie adres 208.67.222.222, jeżeli nie dostał ani jednej odpowiedzi – restartował router.

Bliższe przyjrzenie się metodom restartowania routera przyniosło niespodziewany wynik Uśmiech.

 

Pierwsza metoda: telnet

 

#!/bin/sh

(/bin/sleep 1; echo -e „admin\r”; /bin/sleep 1; echo -e „passwd\r”; /bin/sleep 1; echo -e „reboot\r”; /bin/sleep 3) | /usr/bin/telnet 192.168.1.1

 

 

Działać działa, zaprzeczyć się nie da, ale router się potrafi jakoś nie do końca restartować.

Więc spróbujmy poprzez stronę WWW: http://192.168.1.1/resetrouter.html

Treść strony wygląda tak:

<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”>

<!– hide

function btnReset() {

var code = ‚location=”rebootinfo.cgi”‚;

eval(code);

}

function frmLoad() {

var sysReboot = ‚0’;

var lanRefresh = ‚0’;

if ( sysReboot == ‚1’ )

btnReset();

else if ( lanRefresh == ‚1’ ) {

var code = ‚location=”resetrouter.cgi?lanRefresh=0″‚;

eval(code);

}

}

// done hiding –>

</script>

</head>

<body onLoad=’frmLoad()’>

<blockquote>

<center>

<br>

<strong>Click the button below to save and reboot the router.</strong>

</blockquote></center>

<p align=”center”>

<input type=’button’ onClick=’btnReset()’ value=’Save/Reboot’>

<br>

</p>

</body>

</html>

 

 

Zaczynamy od instalacji modułu Mechanize do perla.

perl -MCPAN -e ‚force install Mechanize’

force – bo instalować się nie chciał; po drodze trzeba było zainstalować nowszy moduł CPAN, drobiazg.

Skrypt autoryzuje się na routerze otwierając stronę resetrouter.html, a następnie otwiera rebootinfo.cgi, które normalnie jest uruchamiane poprzez naciśniecie przycisku na stronie.

 

 

use strict;

use LWP::Debug qw(+);

use WWW::Mechanize;

my $mech = WWW::Mechanize->new();

$mech->credentials( ‚admin’ => ‚passwd’ );

$mech->get( ‚http://192.168.1.1/resetrouter.html’ );

print $mech->content();

$mech->get( ‚rebootinfo.cgi’ );

print $mech->content();

 

 

Działa.

 

Teraz spróbujemy skrypt uprościć, otwierając od razu rebootinfo.cgi z autoryzacją.

 

use strict;

use LWP::Debug qw(+);

use WWW::Mechanize;

my $mech = WWW::Mechanize->new();

$mech->credentials( ‚admin’ => ‚passwd’ );

$mech->get( ‚http://192.168.1.1/rebootinfo.cg ‚ );

print $mech->content();

 

Też działa.

 

No to teraz spróbujmy jeszcze prościej – bez autoryzacji:

 

wget http://192.168.1.1/rebootinfo.cgi

 

No I proszę – też działa! I autoryzacji nie trzeba…

–2011-01-20 17:39:27– http://192.168.1.1/rebootinfo.cgi

Connecting to 192.168.1.1:80… connected.

HTTP request sent, awaiting response… 401 Unauthorized

Authorization failed.

 

Teoretycznie dostępu nie ma, ale praktyka pokazuje, że jest inaczej Uśmiech

Reklamy
Ten wpis został opublikowany w kategorii Komputery i Internet. Dodaj zakładkę do bezpośredniego odnośnika.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s