Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/02/2013, à 13:55

sebastien4

[Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)

Pour faire suite à ce topic : http://forum.ubuntu-fr.org/viewtopic.php?id=448343, je lance un sujet sur l'activation/désactivation du WiFi sur Freebox V6.
C'est devenu plus compliqué depuis la màj qui amène le token CSRF.

Voilà mon script actuel de désactivation du WiFi, basé sur celui de Vinky41 :

#!/bin/sh

resultCurl=$( mktemp )

curl -S -d "login=freebox&passwd=XXXXXX" http://mafreebox.freebox.fr/login.php -v > $resultCurl 2>&1
if grep -q "Set-Cookie:" $resultCurl; then
    echo "Login to Freebox succeeded!"
else
    echo "Login to Freebox failed!"
    rm $resultCurl > /dev/null 2>&1
    exit 1
fi

csrfToken=`grep "X-FBX-CSRF-Token" $resultCurl | cut -f 3 -d ' ' | sed "s/\r//"  `
fbxSid=`grep "FBXSID" $resultCurl | cut -f 3 -d ' ' | sed "s/FBXSID=//" | sed "s/;//" | sed "s/\r//" `

curl -s -b FBXSID=$fbxSid -D - -o /dev/null -e http://mafreebox.freebox.fr/settings.php?page=wifi_conf http://mafreebox.freebox.fr/wifi.cgi --data-urlencode "csrf_token=${csrfToken}" -d "channel=11&ht_mode=disabled&method=wifi.ap_params_set&config=Valider" -H "X-Requested-With: XMLHttpRequest" -H "Accept: application/json, text/javascript, */*" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" > $resultCurl 2>&1
if grep -q "HTTP/1.1 200 OK" $resultCurl; then
    echo "Setting Freebox wifi OFF succeeded!"
else
    echo "Setting Freebox wifi OFF failed!"
fi

rm $resultCurl > /dev/null 2>&1
echo "Logout to Freebox succeeded!"

exit 0

Lancé en LAN depuis un NAS Synology, le script ne fonctionne pas en l'état.
Si je le passe à la main, il marche de tps à autre. Je suspecte les valeurs de fbxSid et csrfToken.

Merci pour votre aide ..

Dernière modification par sebastien4 (Le 07/02/2013, à 14:26)

Hors ligne

#2 Le 07/02/2013, à 15:06

dca77

Re : [Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)

Merci pour l'ouverture du sujet, j'ai avancé un peu entre temps, en modifiant un peu le script, j'obtiens les bonnes valeurs pour FBXID et CSRFTOKEN. mais je n'arrive pas à les réutiliser, surement un problème avec la déclaration de mes variables.

Voici le script actuel :

#!/bin/sh

$fbxSid=`grep "FBXSID" "/volume1/opt/mktemp" | cut -f 2 -d ' ' | sed "s/FBXSID=//" | sed "s/;//" | sed "s/\r//"`
$csrfToken=`grep "X-FBX-CSRF-Token" "/volume1/opt/mktemp" | cut -f 2 -d ' '`


curl -s -D - -o /dev/null http://mafreebox.freebox.fr/login.php -d 'login=freebox&passwd=mon_mot_de_passe > /volume1/opt/mktemp

curl -s -b FBXSID=$fbxSid -D - -o /dev/null -e "http://mafreebox.freebox.fr/settings.php?page=wifi_conf" http://mafreebox.freebox.fr/wifi.cgi --data-urlencode "csrf_token=$csrfToken" -d "channel=11&ht_mode=disabled&method=wifi.ap_params_set&config=Valider" -H "X-Requested-With: XMLHttpRequest" -H "Accept: application/json, text/javascript, */*" 

Donc si j'affiche le contenu du fichier j'ai bien les valeurs que je souhaite récupérer :

 Homeserver> cat mktemp
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Thu, 07 Feb 2013 13:40:02 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: FBXSID="0telHGZMPRcjDcwkAK5L+m34ZY02lnE/Klr6Y07HGxJ/jFQJEPOh8+Dz1VTXJmJb"; Max-Age=86400; HTTPOnly
X-FBX-CSRF-Token: DEWSkAUs4Zfq2+9Xi1TWXUVLEYDGH7KOIGXYDpljseX+ypwj9SfolNjTSgVRGV/L
Location: /settings.php

et quand le script se lance bien que j'ai une erreur les valeurs sont les bonnes :

 sh test.sh
test.sh: line 5: syntax error: unexpected word (expecting ")")
Homeserver> nano test.sh
Homeserver> sh test.sh
test.sh: line 5: ="0telHGZMPRcjDcwkAK5L+m34ZY02lnE/Kl6Y07HGxJ/jFQJEPOh8+Dz1VTXJmJb": not found
: not foundne 6: =DEWSkAUs4Zfq2+9Xi1TWXUVLEYDGH7KOIGXYDpljseX+ypwj9SfolNjTSgVRGV/L
HTTP/1.1 403 Forbidden
Server: nginx
Date: Thu, 07 Feb 2013 13:40:02 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
X-Reason: please log-in

Quand je fais les grep un par un ils fonctionnent bien  :

Homeserver> grep "X-FBX-CSRF-Token" "/volume1/opt/mktemp" | cut -f 2 -d ' '
a8IrV3aybHghQ2nuzcro/Jz5nHVCJh/ElsL6Sm/Gdivp69g6EH8AfhCVq5vlXNZI
Homeserver> grep "FBXSID" "/volume1/opt/mktemp" | cut -f 2 -d ' ' | sed "s/FBXSID=//" | sed "s/;//" | sed "s/\r//"
"CIL7fGQ1QljVwfgNOgcRZB3NeBWPpCk6y0VgoTYB2hlJOOokcZZaadwiw7dipwoC"
Homeserver>
 

et pour finir si je mets à la main les valeurs récupérées précédemment par les grep, cela fonctionne bien et le wifi se désactive.

Sorry pour le roman, si vous avez des idées je suis preneur.

Hors ligne

#3 Le 08/02/2013, à 17:39

dca77

Re : [Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)

Bon je tombe sur la même chose que toi, 403 Forbidden...

J'ai fait un petit echo en fin de script et mes valeurs de FBXID et CSRFTOKEN sont bonnes pourtant :

Homeserver> sh test.sh
HTTP/1.1 403 Forbidden
Server: nginx
Date: Fri, 08 Feb 2013 16:32:42 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive

1dpKsPPrUm+91cK2u4GOi0f44dLnp4RwgvShOsWHjkSoMZFTixn+Weuz4KUOO8cH
o+bk9jPDOlnj2q9HxfPywSfdK+2uZMQgDTXQVJ9ROcV2JisFgAfibYIBADMvwoAM

et les mêmes valeurs dans le fichier tmp :

Homeserver> cat mktemp
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 08 Feb 2013 16:32:42 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: FBXSID="1dpKsPPrUm+91cK2u4GOi0f44dLnp4RwgvShOsWHjkSoMZFTixn+Weuz4KUOO8cH"; Max-Age=86400; HTTPOnly
X-FBX-CSRF-Token: o+bk9jPDOlnj2q9HxfPywSfdK+2uZMQgDTXQVJ9ROcV2JisFgAfibYIBADMvwoAM
Location: /settings.php

Donc les valeurs sont les bonnes, peut-être un soucis avec la ligne qui utilise ces valeurs mais là ça dépasse mes compétences dans le domaine.

Hors ligne

#4 Le 08/02/2013, à 18:00

sebastien4

Re : [Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)

Ok, ça me rassure quelque part sad Bizarre qu'il marche chez Vinky41 ..

Hors ligne

#5 Le 08/02/2013, à 18:56

dca77

Re : [Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)

Tu sais s'il l'a lancé depuis un Syno ou pas ? je suspecte nos variables d'être mal interprétés/appelées par le Syno car à la main cela fonctionne.

J'ai ouvert  ici  un sujet sur le forum Syno à l'aide duquel j'ai bien avancé mais là je bloque.

Hors ligne

#6 Le 16/02/2013, à 21:41

marc31

Re : [Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)

c'est un peu le marteau pilon pour écraser un mouche, mais j'ai développé une API Php et Ruby pour interface assez simplement TOUTE l'API de l'interface dite "Mafreebox". Tu peux essayer de t'en inspirer. Si besoin, je peux apporter un peu d'aide si tu fais les spécifications. J'ai vu que tu voulais activer ou désactiver le wifi par ligne de commande. Ca doit être tout à fait possible.

lien : https://github.com/mqu/mafreebox


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#7 Le 18/02/2013, à 10:49

sebastien4

Re : [Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)

Nickel, merci !

Pour notre besoin, ça donnerait quoi le script ? Tu gères le CSRF introduit récemment ?
Ravi de tester ..

Hors ligne

#8 Le 18/02/2013, à 22:19

sputnick

Re : [Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#9 Le 18/02/2013, à 22:44

sebastien4

Re : [Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)

@marc31 : d'entrée, j'ai une erreur dans Mafreebox.php ligne 160 (if($res->headers()['Status-Code'] != 302))
PHP Parse error:  syntax error, unexpected '[' in lib/Mafreebox.php on line 160
Comprend pas ..

PHP 5.3.10 (cli) (built: May 10 2012 03:08:19)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

Hors ligne

#10 Le 22/02/2013, à 14:55

marc31

Re : [Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)

hello Seb,

pour ma part, quand je lance : php -q test-mafreebox.php  wifi, j'obtiens bien les infos concernant ma connexion Wifi.
ci-dessous, ma config PHP sur Ubuntu/quantal.

marc@quantal:~/Bureau/Dev/github/mafreebox/php$ php -v
PHP 5.4.6-1ubuntu1 (cli) (built: Aug 22 2012 21:13:52) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

tu peux voir avec ruby éventuellement.

Dernière modification par marc31 (Le 22/02/2013, à 14:56)


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#11 Le 03/05/2013, à 21:00

marc31

Re : [Utilitaire Freebox] Script pour ON/OFF le WiFi sur V6 (CSRF)

- il semble que pour paramétrer le Wifi, il faille envoyer des requêtes de type XMLHttpRequest  cf :  https://github.com/mqu/mafreebox/blob/m … ox.rb#L222
- pour ceux qui font du CURL en ligne de commande, le caractère de fin de ligne (de fichier) CTRL^M peut être présent et perturber les requêtes (en particulier, celle qui gère le token x-fbx-csrf-token.

on trouvera des scripts (fonctionnels?) à cette adresse : http://linuxfr.org/forums/programmation … ifi-reboot

Dernière modification par marc31 (Le 03/05/2013, à 21:02)


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne