joebarteam77 Posté(e) le 7 février 2013 Partager Posté(e) le 7 février 2013 Bonjour, Je souhaite modifier un script pour intégrer une authentification et je bloque sur une étape. Je récupère le contenu de ma première commande dans un fichier, jusque là tout va bien et j'obtiens ceci : Homeserver> cat mktemp HTTP/1.1 302 Moved Temporarily Server: nginx Date: Thu, 07 Feb 2013 10:22:58 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive Set-Cookie: FBXSID="CIL7fGQ1QljVwfgNOgcRZB3NeBWPpCk6y0VgoTYB2hlJOOokcZZaadwiw7dipwoC"; Max-Age=86400; HTTPOnly X-FBX-CSRF-Token: a8IrV3aybHghQ2nuzcro/Jz5nHVCJh/ElsL6Sm/Gdivp69g6EH8AfhCVq5vlXNZI Location: /settings.php A partir de ce fichier, je souhaite récupérer le FBXID et le CSRF Toke, par une commande grep ce qui fonctionne quand je les lances en shell : 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" Par contre, si j'intègre ces commande dans mon script, ça ne passe pas ... Homeserver> sh test.sh test.sh: line 5: =grep "FBXSID" "/volume1/opt/mktemp" | cut -f 2 -d : not found test.sh: line 6: =grep: not found HTTP/1.1 403 Forbidden Server: nginx Date: Thu, 07 Feb 2013 10:22:58 GMT Content-Type: application/json Transfer-Encoding: chunked Connection: keep-alive X-Reason: please log-in Voici le script en question : #!/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, */*" J'ai testé avec /bin/grep mais problème identique. Please help 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
PiwiLAbruti Posté(e) le 7 février 2013 Partager Posté(e) le 7 février 2013 (modifié) As-tu essayé avec le chemin absolu /bin/grep ? Et il faut peut-être aussi encadrer tes commandes avec "`" : $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 ' '` Modifié le 7 février 2013 par PiwiLAbruti 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
joebarteam77 Posté(e) le 7 février 2013 Auteur Partager Posté(e) le 7 février 2013 Oui j'ai testé avec le chemin absolu PB identique. Par contre j'ai testé avec de simples quotes ' pas des guillemets " je vais essayer ça merci. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 7 février 2013 Partager Posté(e) le 7 février 2013 N'aurais-tu pas édité ton script avec un éditeur Windows qui ne gère pas les fins de lignes unix ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bud77 Posté(e) le 7 février 2013 Partager Posté(e) le 7 février 2013 Complément à ce que dit CoolRaoul : Tu verras çà en regardant ton fichier avec "vi" Comme l'a dit Piwi, il manque un ` devant le grep et à la fin des commandes (c'est un AltGr+7) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
PatrickH Posté(e) le 7 février 2013 Partager Posté(e) le 7 février 2013 Et puis il n'y a pas que le grep mais aussi le "sed" où il faudrait mettre un chemin absolu au cas où (et toutes les autres commandes !!) Tout dépends comment tu lance ta commande et quelle est à ce moment là la valeur de PATH Patrick 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 7 février 2013 Partager Posté(e) le 7 février 2013 Complément à ce que dit CoolRaoul : Tu verras çà en regardant ton fichier avec "vi" Comme l'a dit Piwi, il manque un ` devant le grep et à la fin des commandes (c'est un AltGr+7) Et aussi, comme le shell du syno supporte la syntaxe posix (plus lisible a mon avis), au lieu d'écrire: `commande`on peut mettre:$(commande) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
joebarteam77 Posté(e) le 7 février 2013 Auteur Partager Posté(e) le 7 février 2013 Merci pour le ALTGR+7 effectivement j'avance, il m'affiche les bonnes valeurs mais il ne les utilise pas dans la commande d'après. Pour l'édition, je suis sur notepad++ sous Windows et vi ou nano sur le syno. Voici ce que j'obtiens maintenant : Homeserver> 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 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 sinon pour le $(commande) j'ai testé ça mais sans succès : $fbxSid(grep "FBXSID" "/volume1/opt/mktemp" | cut -f 2 -d ' ' | sed "s/FBXSID=//" | sed "s/;//" | sed "s/r//") 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 7 février 2013 Partager Posté(e) le 7 février 2013 et sinon pour le $(commande) j'ai testé ça mais sans succès : $fbxSid(grep "FBXSID" "/volume1/opt/mktemp" | cut -f 2 -d ' ' | sed "s/FBXSID=//" | sed "s/;//" | sed "s/r//") la bonne syntaxe est: fbxSid=$(grep "FBXSID" "/volume1/opt/mktemp" | cut -f 2 -d ' ' | sed "s/FBXSID=//" | sed "s/;//" | sed "s/r//") et tu peux remplacer (mais la je chipote!): sed <cmd> | sed <cmd2> | sed <cmd3> par sed -e <cmd> -e <cmd2> -e <cmd3> Mais tout ça ne résoud pas ton problème, patience on va trouver ***EDIT*** Faudrait nous remettre la dernière version du script aussi 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 7 février 2013 Partager Posté(e) le 7 février 2013 (modifié) remplace les 2 premieres lignes de ton script par fbxsid=$(sed -n -e '/^X-FBX-CSRF-Token/s/^.*: //p' /volume1/opt/mktemp) csrfToken=$(sed -n -e '/Set-Cookie: FBXSID/s/^.*"(.*)".*$/1/p' /volume1/opt/mktemp) Je pense que ça va le faire Modifié le 7 février 2013 par CoolRaoul 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
joebarteam77 Posté(e) le 7 février 2013 Auteur Partager Posté(e) le 7 février 2013 (modifié) Merci beaucoup CoolRaoul effectivement les valeurs sorties par le script sont les bonnes : Homeserver> sh test.sh HTTP/1.1 403 Forbidden Server: nginx Date: Thu, 07 Feb 2013 14:26:56 GMT Content-Type: application/json Transfer-Encoding: chunked Connection: keep-alive X-Reason: please log-in Iu9rw/Z5hYECLWDYz0xVtVgNgKxFhAodZZz8g6luAUmqJsNvhlfe/WkK0sOQBC0+ RnomueQwChD3yZGfqUuhtfDE42cLbuwP4XKZfNkkXJvw+lt5VjrZ1XhWCsSntYFR Homeserver> cat mktemp HTTP/1.1 302 Moved Temporarily Server: nginx Date: Thu, 07 Feb 2013 14:26:56 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive Set-Cookie: FBXSID="RnomueQwChD3yZGfqUuhtfDE42cLbuwP4XKZfNkkXJvw+lt5VjrZ1XhWCsSntYFR"; Max-Age=86400; HTTPOnly X-FBX-CSRF-Token: Iu9rw/Z5hYECLWDYz0xVtVgNgKxFhAodZZz8g6luAUmqJsNvhlfe/WkK0sOQBC0+ Location: /settings.php Homeserver> Bon par contre il ne se connecte pas correctement alors que les variables sont bonnes mais ça s'est autre chose... pour le script, il doit permettre la désactivation du wifi la nuit sur la Freebox v6 (et il y a sont homologue pour le réactiver), mon précédent script fonctionnait bien mais Free en corrigeant une faille CSRF à intégré cette nouvelle authentification. Voici donc pour ceux que ça peut intéresser la globalité du script : #!/bin/sh curl -s -D - -o /dev/null http://mafreebox.freebox.fr/login.php -d 'login=freebox&passwd=Votre_mot_de_passe' > /volume1/opt/mktemp fbxSid=$(sed -n -e '/^X-FBX-CSRF-Token/s/^.*: //p' /volume1/opt/mktemp) csrfToken=$(sed -n -e '/Set-Cookie: FBXSID/s/^.*"(.*)".*$/1/p' /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, */*" En tout cas en utilisant la dernière ligne et en remplaçant les variables à la main cela fonctionne. Edit : pour commencer, il y a une inversion des variables par rapport au grep mais même en les mettant dans le bon ordre ca ne passe pas. Modifié le 7 février 2013 par joebarteam77 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bud77 Posté(e) le 7 février 2013 Partager Posté(e) le 7 février 2013 Pour les variables qui fonctionnent pas, met des ` avant et après la variable à appeler (car sinon elles sont pas "traduites" par la valeur de la variable) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
joebarteam77 Posté(e) le 7 février 2013 Auteur Partager Posté(e) le 7 février 2013 (modifié) j'essaie ça merci EDIT : Comme ça : `FBXSID=$fbxSid` ou comme ça : FBXSID=`$fbxSid` Modifié le 7 février 2013 par joebarteam77 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Deckard Posté(e) le 8 février 2013 Partager Posté(e) le 8 février 2013 Pour le même besoin, voici ma version du script : #!/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, */*" > $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 En lançant avec dash, on voit que les valeurs sont passées correctement. Mais je confirme, ça marche à la main mais pas via le script. Si j'ajoute des ` les valeurs sont vides. Bref, on sait que ça vient des valeurs de fbxSid et csrfToken mais on est bloqués :/ Merci pour votre aide. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.