This site uses cookies! Learn More

Ce site utilise des cookies !

En continuant à utiliser ce site, vous vous engagez à nous permettre de stocker des cookies sur votre ordinateur.


Impression tract publicitaire avec Limprimeriegenerale
Impression de nos flyers : www.imprimerieflyer.com

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

14 messages dans ce sujet

Posté(e) · Signaler ce message

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Impression tract publicitaire avec Limprimeriegenerale
Impression de nos flyers : www.imprimerieflyer.com

Posté(e) (modifié) · Signaler ce message

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) par PiwiLAbruti

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

N'aurais-tu pas édité ton script avec un éditeur Windows qui ne gère pas les fins de lignes unix ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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//")

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) (modifié) · Signaler ce message

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) par CoolRaoul

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) (modifié) · Signaler ce message

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) par joebarteam77

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) (modifié) · Signaler ce message

j'essaie ça merci

EDIT :

Comme ça :

`FBXSID=$fbxSid`

ou

comme ça :

FBXSID=`$fbxSid`

:unsure:

Modifié (le) par joebarteam77

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant


Impression tract publicitaire avec Limprimeriegenerale
Impression de nos flyers : www.imprimerieflyer.com