Aller au contenu


Photo

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


  • Veuillez vous connecter pour répondre
13 réponses à ce sujet

#1 joebarteam77

joebarteam77

    Padawan

  • Membres
  • 189 messages
  • Gender:Male
  • Location:Marne la Vallée
  • Interests:Voyages, Moto, Photo.

Posté 07 février 2013 - 12:41

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


  • 0

#2 PiwiLAbruti

PiwiLAbruti

    Esprit NAS Syno

  • SynoCommunity
  • 3 163 messages
  • Gender:Male
  • Location:Paris, Nantes - FRANCE

Posté 07 février 2013 - 12:49

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, 07 février 2013 - 12:51 .

  • 0

#3 joebarteam77

joebarteam77

    Padawan

  • Membres
  • 189 messages
  • Gender:Male
  • Location:Marne la Vallée
  • Interests:Voyages, Moto, Photo.

Posté 07 février 2013 - 12:55

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

#4 CoolRaoul

CoolRaoul

    Brigade Synophile

  • Membres
  • 4 354 messages
  • Gender:Male
  • Location:Marseille

Posté 07 février 2013 - 12:55

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


  • 0

#5 bud77

bud77

    Esprit NAS Syno

  • SynoCommunity
  • 4 528 messages
  • Gender:Male

Posté 07 février 2013 - 13:40

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

#6 PatrickH

PatrickH

    Esprit NAS Syno

  • Modérateurs
  • 7 851 messages
  • Gender:Male
  • Location:Strasbourg

Posté 07 février 2013 - 13:46

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



#7 CoolRaoul

CoolRaoul

    Brigade Synophile

  • Membres
  • 4 354 messages
  • Gender:Male
  • Location:Marseille

Posté 07 février 2013 - 14:06

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

#8 joebarteam77

joebarteam77

    Padawan

  • Membres
  • 189 messages
  • Gender:Male
  • Location:Marne la Vallée
  • Interests:Voyages, Moto, Photo.

Posté 07 février 2013 - 14:45

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

#9 CoolRaoul

CoolRaoul

    Brigade Synophile

  • Membres
  • 4 354 messages
  • Gender:Male
  • Location:Marseille

Posté 07 février 2013 - 14:54

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

#10 CoolRaoul

CoolRaoul

    Brigade Synophile

  • Membres
  • 4 354 messages
  • Gender:Male
  • Location:Marseille

Posté 07 février 2013 - 15:09

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, 07 février 2013 - 15:09 .

  • 1

#11 joebarteam77

joebarteam77

    Padawan

  • Membres
  • 189 messages
  • Gender:Male
  • Location:Marne la Vallée
  • Interests:Voyages, Moto, Photo.

Posté 07 février 2013 - 15:38

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, 07 février 2013 - 15:45 .

  • 0

#12 bud77

bud77

    Esprit NAS Syno

  • SynoCommunity
  • 4 528 messages
  • Gender:Male

Posté 07 février 2013 - 15:43

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

#13 joebarteam77

joebarteam77

    Padawan

  • Membres
  • 189 messages
  • Gender:Male
  • Location:Marne la Vallée
  • Interests:Voyages, Moto, Photo.

Posté 07 février 2013 - 15:48

j'essaie ça merci

 

EDIT :

 

Comme ça :

 

`FBXSID=$fbxSid`

ou

 

comme ça :

 

FBXSID=`$fbxSid`

:unsure:


Modifié par joebarteam77, 07 février 2013 - 16:50 .

  • 0

#14 Deckard

Deckard

    Padawan

  • Membres
  • 111 messages

Posté 08 février 2013 - 21:43

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




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)

Publicité
Publicité