Aller au contenu

Erreur De Grep Dans Le Script Et Ok Sans...


joebarteam77

Messages recommandés

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 :D

Lien vers le commentaire
Partager sur d’autres sites

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é par PiwiLAbruti
Lien vers le commentaire
Partager sur d’autres sites

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)
Lien vers le commentaire
Partager sur d’autres sites

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//")
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

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é par joebarteam77
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.