Bonjour,
J'ai fait un script pour piloter l'interface web de la livebox2 SAGEM. Il repond a mes besoins.
Si ca vous interesse..
Avec un environement perl et les librairies WWW::Mechanize::Sleepy, Getopt::Long, Pod::Usage, Digest::MD5 ca fonctione sur linux, windows et mac.
exemples:
Display adsl info
livebox.pl -page=infosys_adsl -v | html2text
Change wireless mode to 2 (b/g)
livebox.pl -page=wireless mode=2
Reboot
livebox.pl -page=reboot action=submit action=reboot
Stop broadcasting SSID, set WPA2-PSK (AES) and activate MAC filtering
livebox.pl -page=wireless broadcast=0,securitymode=6,macfiltering=1
Change WPA Passphrase to 12345678
livebox.pl -page=wireless key=12345678
Il y a aussi une version exe (en console donc) pour windows: livebox.exe
Pour verifier l'authenticité de l'exe, voici les sommes de controles MD5 et SHA256
0e0ade5c09e5875365cf179dd18f19e5
03582feedf1f335afadc15f3e2d7023a28ff9f72fe4e412e2b67b425a0918391
#!/usr/bin/perl use warnings; use strict; =head1 livebox.pl Control Livebox 2 =cut use Getopt::Long; use WWW::Mechanize::Sleepy "Sleepy"; use Pod::Usage; use Digest::MD5 "md5"; my ( $user, $passwd ) = ( 'admin', 'admin' ); my $ip = '192.168.1.1'; my $page; my ( $verbose, $progress ) = ( 0, 0 ); GetOptions( 'user=s' => \$user, 'pass=s' => \$passwd, 'ip=s' => \$ip, 'page=s' => \$page, 'progress' => \$progress, 'verbose' => \$verbose, help => sub { pod2usage( verbose => 2 ); }, ) or pod2usage( verbose => 2 ); =head1 SYNOPSIS livebox.pl [opt] [key=value,key=value, ...] [key=value,key=value, ...] opt: --user=user Set the username (defaults to admin) --pass=pass Set the password (defaults to admin) --ip=ip IP address of equipment (defaults to '192.168.1.1') --page=page Which page(s) to GET after index --progress Print Progress state --verbose Print html traffic --help Show this message =cut my $mech = WWW::Mechanize::Sleepy->new( cookie_jar => undef, autocheck => 1, show_progress => $progress, timeout => 10, sleep => 1) or die("mech"); if ($verbose) { $|++; $mech->add_handler( "request_send", sub { print ">" x 80, "\n", shift->as_string; return } ); $mech->add_handler( "response_done", sub { print "<" x 80, "\n", shift->as_string; return } ); } warn "Trying to connect to $ip ...\n"; #LB2 #Record Session Id $mech->get("http://$ip"); my $sessionid = $mech->value('sessionid'); #Hash password with authkey my $authmd5passwd = unpack( 'H*', md5( unpack( 'H*', md5($passwd) ) . $mech->value('authkey') ) ); #Post Form to Authenticate $mech->submit_form( with_fields => { authlogin => $user, authmd5passwd => $authmd5passwd } ); #Get the page if requested, otherwise exit $page or exit; $mech->get("http://$ip/index.cgi?page=$_&sessionid=$sessionid") for split m/,/, $page; #Post Form as many times as requested while ( my $values = shift ) { my %fields = map { m/^(.*?)=(.*)$/ } split m/,/, $values; $mech->submit_form( with_fields => \%fields ); } =head1 EXAMPLES =over 3 =item Display sys info livebox.pl -page=infosys_main -v | html2text =item Display adsl info livebox.pl -page=infosys_adsl -v | html2text =item Change wireless mode to 2 (b/g) livebox.pl -page=wireless mode=2 =item Reboot livebox.pl -page=reboot action=submit action=reboot =item Stop broadcasting SSID, set WPA2-PSK (AES) and activate MAC filtering livebox.pl -page=wireless broadcast=0,securitymode=6,macfiltering=1 =item Change WPA Passphrase to 12345678 livebox.pl -page=wireless key=12345678 =back =cut
Dernière modification par teebeenator (29-03-2012 19:45:47)
Hors ligne
Bonjour,
Merci pour ce tuto.
Hors ligne
Bonjour.
J'épingle
Hors ligne
Bonsoir !
Super bien pour la sécurité ton Script JoeKer
mais je ne comprends pas tout !
Apparemment il sagit d'une instalation avec la console (Ubuntu ' chez moi )
Mais pourquoi ce premier cadre
Display sys info
./livebox.pl -v -pa=infosys_main | html2text
Display adsl info
./livebox.pl -v -pa=infosys_adsl | html2text
Change wireless mode to 2 (b/g)
./livebox.pl mode=2 —page=wireless
Stop broadcasting SSID, set WPA2-PSK (AES) and activate MAC filtering
./livebox.pl -pa=wireless broadcast=0,securitymode=6,macfiltering=1
Change WPA Passphrase to 12345678
./livebox.pl -pa=wireless key=12345678
Reboot livebox
./livebox.pl action=submit action=reboot —page=reboot
puis ensuite les lignes de code
installées dans #!/usr/bin/perl
y a t'il une installation pour les 2 ?
Hors ligne
Bonsoir ramatus !
Désolé, mais je crois que tu fais erreur sur l'auteur du script
Hors ligne
Effectivement, il va falloir que je change mes lunettes !
je repose donc la question a teebeenator
Hors ligne
Salut Ramatus.
Pour utiliser le script (livebox.pl), il faut sauver la partie 'code' (qui commence par #!/usr/bin/perl) dans un fichier puis le rendre executable (chmod +x livebox.pl)
Ensuite il faut un environnement perl
sudo aptitude install perl
(aptitude ou autre package manager)
et installer les modules perl utilisés par le script, en console:
sudo cpan
install WWW::Mechanize::Sleepy
(repondre y[es] a toutes les questions, attendre la fin!) puis les autres:
install Getopt::Long
install Pod::Usage
install Digest::MD5
Pour les accès en lecture (demande d'info sur une des pages de la lb2), il faudra rajouter l'outil html2text
sudo aptitude install html2text
Ensuite, il faut lancer le script.. (plus besoin de sudo).
L'aide:
./livebox.pl --help
Pour les personnes sous windows,
Vous pouvez utiliser le .exe. Les options sont les memes mais il y a certaines differences entre cmd.exe et bash (sequence d'echappement,..) Il faudra une autre solution pour html2text: je ne sais pas ou le trouver et surtout il y a un problème d'encodage. Passer par wshell ou autre (je laisse les experts windows faire)
Le plus propre est d'utiliser le script. Pour avoir perl sous windows, il faut installer strawberry perl.
Dernière modification par teebeenator (27-08-2011 16:32:09)
Hors ligne
Petite mise à jour du script pour pouvoir, entre autre, passer directement le mot de passe:
Dernière modification par teebeenator (01-09-2011 00:01:57)
Hors ligne
Bonsoir! teebeenator
Merci pour ta réponse je vais voir si je peux l'utiliser sur mon
portable Ubuntu
Bonne soirée
Hors ligne
Lien HS !
Hors ligne
J'ai corrigé deux trois petites choses . La derniere version de l'exe je ne l'ai plus, il faut que j'en refasse une. Ca prendra qq jours..
Dernière modification par teebeenator (27-08-2011 17:40:38)
Hors ligne
Bonjour
Tout d'abord merci pour ce super travail.
Je voudrais savoir si quelqu'un avait testé ce script ou le exe sous Windows??
Car j'ai quelque problème pour l'exécuter il m'indique une erreur avec mechaze::sleepy.
EDIT : peut tu poster la dernière version du script merci
Dernière modification par Electro-X (27-08-2011 19:29:52)
Hors ligne
Voilà, j'ai mis à jour le post initial. Rajouté la documentation et les exemple DANS le code, on peut les voir avec --help et corrigé un pti bug.
Ca devrait marcher
Hors ligne
oui biensur
pour desactiver le wifi:
./livebox.pl -page=wireless wifistatus=0
pour le reactiver (depuis l'ethernet donc..) , tu mets 1
Hors ligne
Bonsoir.
Effectivement, ça aide
Dommage, avec le prochain firmware (Soft@Home), tout sera à remettre sur la planche
Hors ligne
C'est prévu pour ... bientôt (on n'en sait pas plus).
Normalement, les fonctions devraient être identiques à celles de la ZTE ... Les bugs aussi
La programmation du Wi-Fi devrait en faire partie (des nouveautés et des bugs).
Mais le programme de teebeenator ne devrait plus fonctionner .
Hors ligne
JoeKer: non, ce script risque de marcher encore longtemps... avec d'éventuelles minuscules modifications. (pour la partie "écriture")
En faite, même, ce script devrait marcher avec n'importe quelle box qui fournit une administration par "page web", en changeant 2/3 valeurs à l'intérieur. Il pourrait aussi servir à d'autres choses, comme poster automatique des messages sur www.forum-orange.com ! (Le module WWW::Mechanize est très utilisé pour faire des robots web)
Pour la "lecture" des valeurs, c'est encore plus simple: on a même pas besoin du script: des outils comme curl ou wget associés html2text font l'affaire. Par exemple, (sous linux), cette commande affiche la page "Information système":
wget --user=admin --password=admin 'http://192.168.1.1/index.cgi?page=infosys_main' -O -|html2text
teebeenator: Tout d'abord merci pour le script. Ensuite, il n'est pas utile de préciser aux utilisateurs d'ubuntu d'installer perl, car il est toujours installé. Il fait partie des programmes tagguer "required" et "Essential" (Celà vient de Debian, et cela risque donc de concerner une majorité de distribution linux). Il en va de même pour les modules Getopt::Long Pod::Usage Digest::MD5, qui sont inclus dans perl. En faite, il est pas trop conseillé de les installer via le cpan, car ces versions, installer localement, ne seront pas mise à jour automatiquement, ce qui augure des problèmes dans le futur (et pas qu'avec livebox.pl)
Le seul module qui réclame cpan, c'est WWW::Mechanize::Sleepy. Mais pourquoi avoir utilisé ce module ? La version "classique" (WWW::Mechanize) fonctionne très bien avec la box. La version "Sleepy", c'est pour faire les choses lentement, comme un humain. Le gros problème de ce module c'est qu'il n'est pas couramment paquagé dans les distrib', contrairement à WWW::Mechanize
(qui donc sera mis à jour automatiquement, et dont la version restera cohérente avec la version de perl installé).
J'ai donc fait une petite modif' pour n'utiliser que le vénérable WWW::Mechanize, au lieu du fainéant WWW::Mechanize::Sleepy
** Ligne 11: remplacer
use WWW::Mechanize::Sleepy "Sleepy";
par
use WWW::Mechanize;
** Ligne 43: remplacer
my $mech = WWW::Mechanize::Sleepy->new( cookie_jar => undef, autocheck => 1, show_progress => $progress, timeout => 10, sleep => 1) or die("mech");
par
my $mech = WWW::Mechanize->new( cookie_jar => undef, autocheck => 1, show_progress => $progress, timeout => 10, sleep => 1) or die("mech");
Et maintenant, les utilisateurs de Debian (ou d'une dérivée comme ubuntu), n'ont a installer que libwww-mechanize-perl :
sudo apt-get install libwww-mechanize-perl
Ça ne changera pas gras chose pour les utilisateurs de windows.
Hors ligne
Hi Diabolique, je viens de copier coller,
wget --user=admin --password=admin 'http://192.168.1.1/index.cgi?page=infosys_main' -O -|html2text
Dans une console ssh ouverte sur mon système linux ... en effet ça fait peur ...
A plus
Hors ligne
Et bien, ce qui fait peur, c'est surtout de laisser les identifiants à leurs valeurs par défauts (admin/admin) !
Après que ce soit un script ou être humain qui modifie la box, ça change pas trop. Il faut se méfier de l'excès de confiance que l'on pourrait avoir si l'on a pas coché "Administration à distance", car ces notions de distant/local sont relatives: distant, ça veut dire "directement distant", mais via une connexion sur une machine local (par exemple ssh), ça ne sera plus vue comme une connexion distante par la box.
Hors ligne
hi pour ce qui me concerne il y a belle lurette que le plan d'adressage réseau n'est pas le plan standard ainsi que le login .. mais ça c'est l'abc ...
Dernière modification par patrick_91 (28-03-2012 19:42:31)
Hors ligne
Salut tout le monde
Oui effectivement ce script est très générique, on peut l'utilise pour d'autres choses. Il aurait pu s'appeler web.pl .. C'est pourquoi dans cette version on voit #LB2 puisque les lignes en dessous concernant le login sont tout de même un peu specifique à la LB2.
Après, les lignes get et post_form sont réutilisables à souhait.
Lors de mes tests, le serveur web avait un léger temps de latence et certaines POST en rafale pouvaient ne pas être pris en compte. Au début j'avais mis des sleep entre les appels à mechanize jusqu'a ce que je decouvre Sleepy dont la seule utilité est de rajouter une attente automatique à chaque appel de Mechanize. Sans les mains.
Dans cette ligne : my $mech = WWW::Mechanize->new( cookie_jar => undef, autocheck => 1, show_progress => $progress, timeout => 10, sleep => 1) or die("mech");
je ne sais pas si c'est une erreur de copié coller mais le paramètre sleep=>1 ne sera pas utilisé par Mechanize donc il n'y aura effectivement pas d'attente. Donc certaines opérations, comme le reboot qui necessite 2 appels au while (rebooter, confirmation) risquent de ne pas marcher. En tout cas chez moi, ca m'est arrivé. Beaucoup de chose influe sur le timing donc chez d'autres, ca peut ne pas se presenter.
Ensuite, j'ai pas voulu être raciste, j'ai donné les prérequis pour toutes les architectures et pour toutes les distrib. Biensur sous debian (que j'utilise), pas besoin d'installer perl (puisque perl-base est le coeur du système de gestion des paquets sous debian). Sous Redhat, pas sûr que perl soit toujours là.
Concernant l'utilisation de CPAN ou des modules packagés pour la distrib. L'avantage tu as raison c'est que les updates se feront. En meme temps, si ca marche, ca marche Le cas mise à jour de sécurité, on s'en fout un peu comme ca tourne pas sur un serveur. Le gros inconvenient c'est que certaines distrib (redhat et consors) font n'importe quoi avec l'integration de perl (commentaires des mainteneurs de perl, pas les miens)
C'est pourquoi ces gens-là conseillent toujours d'utiliser CPAN et d'eviter les modules packagés par les distrib. Et je fais pareil. En pratique sur debian (et probablement ubuntu) c'est très bien fait mais toujours dans le soucis de faire marcher sur tout type de machine, j'ai préconisé cpan.
Et mon utilisation initiale du script était sous windows (via Strawberry perl) donc pas le choix.
Il tourne aussi sur iphone (pour le fun), sur ma tablette android et sur mon pc (sous debian of course)
L'avantage du libre c'est que tu peux modifier ce que tu veux et tu n'es pas forcé d'utiliser ma méthode.
Quand les nouveaux firmwares arriveront (en Aout qui disaient mais quelle année?), on avisera s'il faut modifier.
En fait avec curl, on pourrait remplacer ce script par 2 lignes. Avec curl, on peut tout refaire (envoyer des GET, des POST, des FORMs..) .Un exemple assez complexe:
curl -s -F "param1=foobar" -F "param2=@/etc/passwd" -F "param3=admin" www.example.com/test.php
Cette commande envoi le fichier /etc/password dans un FORM en passant aussi param1=foobar et param3=admin.
Donc une ligne pr l'authkey et une autre pour l'action.
Merci pour les commentaires, ca fait plaisir
Hors ligne