Forum de la communauté francophone autour du projet OpenMoko
Vous n'êtes pas identifié.
Bonjour à tous,
Vous connaissez probablement le réseau FreeWifi : il permet aux abonnés Free d'accéder à Internet lorsqu'ils sont à portée d'une freebox v5 : http://www.free.fr/adsl/pages/internet/ … iFree.html
J'essaie d'automatiser la connexion à ce réseau Wifi depuis le FreeRunner (j'utilise SHR unstable actuellement), un peu à la manière des applications iphone et Android qui font la même chose : cf http://code.google.com/p/freewifi-connect/ pour Android.
Ca permettrait, lorsqu'on est à proximité d'une freebox, d'accéder à Internet de manière bien + rapide qu'en GPRS.
Pour l'instant, j'essaie de faire cela en ligne de commande.
Il y a a priori 4 étapes :
1- activer le wifi
2- se connecter au réseau FreeWifi s'il est à portée (en contournant le problème de connexion à un Wifi open. Cf http://openmoko-fr.org/wiki/index.php/SHR#WiFi)
3- se connecter à https://wifi.free.fr, et récupérer le champ caché nommé "priv"
4- passer le login/mdp en GET à https://wifi.free.fr, avec le champ priv
J'ai pas encore creusé l'étape 1.
Pour l'étape 2 :
iwconfig eth0 essid FreeWifi udhcpc eth0
Pour les étapes 3 et 4, j'ai fait un petit script (quick and dirty) :
login=xxxxxxx password=yyyyyyyy priv=`wget https://wifi.free.fr -O - | grep "priv" | sed -e "/a href/d" | sed -e 's/.*value="\([^"]*\)".*/\1/' ` wget "https://wifi.free.fr?login=$login&password=$password&priv=$priv" -O - | grep "CONNEXION AU SERVICE"
Ce dernier script fonctionne bien sur mon PC avec ubuntu, mais pas sur SHR.
Le problème est en effet que la version de wget de busybox ne supporte pas le https, et me renvoie le message d'erreur ci-dessous :
wget: not an http or ftp url: https://wifi.free.fr
Evidemment, il serait possible de recompiler wget avec support du SSL, mais ça devient compliqué...
Je suis preneur de vos suggestions.
Hors ligne
Utiliser un navigateur en ligne de commande ?
Hors ligne
Pourquoi pas, mais je n'ai pas trouvé de package opkg, que ce soit pour lynx, links ou w3m
Hors ligne
Merci pour l'idée, misc.
Effectivement, je me suis fait un petit script wget.py qui utilise urllib pour renvoyer le contenu sur la sortie standard :
import urllib import sys sock = urllib.urlopen(sys.argv[1]) htmlSource = sock.read() sys.stdout.write(htmlSource)
Ca marche bien sur mon PC, mais sur SHR, il ne trouve pas le module urllib :
ImportError: No Module named urllib
Hors ligne
Je crois qu'il faut python-netclient installé.
Hors ligne
Effectivement, un opkg install python-netclient, et ça marche!
Il faudrait également que j'améliore qqs points :
- activer le wifi en début de script (pour éviter de devoir le faire manuellement)
- externaliser le login/mot de passe dans un fichier de conf
- vérifier s'il existe un hotspot FreeWifi avant de tenter de m'y connecter
- ajouter une icône qui lance le script
- gérer + proprement les cas d'erreur : pas de hotspot FreeWifi, login/mot de passe incorrect etc
Pour ceux que ça intéresserait, ou qui voudraient contribuer, voici les scripts dans leur état actuel :
wget.py :
import urllib import sys sock = urllib.urlopen(sys.argv[1]) htmlSource = sock.read() sys.stdout.write(htmlSource)
preparer_connexion_FreeWifi.sh :
iwconfig eth0 essid FreeWifi udhcpc eth0
authentifier_FreeWifi.sh :
login=xxx password=yyy priv=`python wget.py https://wifi.free.fr -O - | grep "priv" | sed -e "/a href/d" | sed -e 's/.*value="\([^"]*\)".*/\1/' ` python wget.py "https://wifi.free.fr?login=$login&password=$password&priv=$priv" -O - | grep "CONNEXION AU SERVICE"
et le script qui enchaine le tout, connecter_FreeWifi.sh :
preparer_connexion_FreeWifi.sh authentifier_FreeWifi.sh
Pour que cela fonctionne, il faut installer python et python-netclient :
opkg install python python-netclient
Dernière modification par mossroy (16-07-2009 09:02:21)
Hors ligne
j'ai un script à finir pour la video, et après je suis intéressé par ton travail.
Mais je vais aussi partir en vacances, loin de l'internet (pas de GPRS).
Donc on verra en septembre, si tu n'as pas fini d'ici là!
Hors ligne
Très intéressant tout ça je trouve, bon courage pour la suite, c'est un appli très utile!
Hors ligne
hum... Ce qui serait génial pour la suite, c'est de permettre laccès à un autre réseau. Personnellement, je suis chez Neuf-Sfr, donc les réseaux s'appellent "NeufWifi"
Faut que je regarde si on peut pas utiliser le même système. Si oui, un fichier de conf pour choisir le type de réseau serait tip top
Hors ligne
Bon, j'ai complété un peu mes scripts pour améliorer un peu la remontée d'erreurs, et externaliser le login/mot de passe.
J'ai aussi fait un petit fichier .desktop pour pouvoir le lancer au doigt depuis le menu principal. Si vous savez où trouver la doc de ces fichiers, ça m'intéresse. Parce que, tel quel, c'est une bidouille pour voir l'exécution du script.
C'est encore bien "malpropre" (je suis pas du tout un spécialiste des scripts shell et du python), mais ça marche pas trop mal chez moi.
Je ne sais pas encore allumer le Wifi en ligne de commande : si vous savez, dites moi, c'est le principal truc qui manque pour se connecter rapidement.
Pour l'utiliser, il faut donc : créer un fichier .om_freewifi dans /home/root, qui contient le login/mot de passe :
login=xxx password=yyy
Ensuite, il faut allumer le Wifi dans les settings de SHR, puis lancer l'icône FreeWifi.
Voici les codes sources, à placer dans /home/root pour l'instant (a priori ça pourrait être n'importe où en modifiant le .desktop donné en exemple)
Fichier wget.py :
import urllib import sys sock = urllib.urlopen(sys.argv[1]) htmlSource = sock.read() sys.stdout.write(htmlSource)
Fichier preparer_connexion_FreeWifi.sh :
num_etape=1
echo "Etape $num_etape : connexion au hotspot FreeWifi"
if ifconfig eth0 2>&1 >/dev/null
then
if iwconfig eth0 essid FreeWifi
then
udhcpc eth0
echo "Etape $num_etape : connecté au hotspot FreeWifi"
exit 0
else
echo "Etape $num_etape : hotspot FreeWifi introuvable"
exit 1
fi
else
echo "Etape $num_etape : interface eth0 introuvable : peut-être que le Wifi n'est simplement pas activé?"
exit 1
fiFichier authentifier_FreeWifi.sh :
num_etape=2
source ~/.om_freewifi
echo "Etape $num_etape : accès à la page d'accueil de FreeWifi"
if priv=`python wget.py https://wifi.free.fr -O - | grep "priv" | sed -e "/a href/d" | sed -e 's/.*value="\([^"]*\)".*/\1/' `
then
echo "Etape $num_etape : connexion avec le login $login"
if resultat=`python wget.py "https://wifi.free.fr?login=$login&password=$password&priv=$priv" -O -`
then
if echo "$resultat" | grep "REUSSIE"
then
echo "FreeWifi connecté!"
exit 0
else
echo "$resultat" | grep -i "ERREUR"
echo "Etape $num_etape : impossible de se logger au FreeWifi"
exit 1
fi
else
echo "Etape $num_etape : impossible de se logger au FreeWifi"
exit 1
fi
else
echo "Etape $num_etape : impossible d'accéder à la page d'accueil de FreeWifi"
exit 1
fiFichier connecter_FreeWifi.sh :
if preparer_connexion_FreeWifi.sh
then
authentifier_FreeWifi.sh
exit 0
else
exit 1
fiFichier freewifi.desktop, à placer dans /usr/share/applications/ :
[Desktop Entry] Name=FreeWifi Comment=Connexion au reseau FreeWifi Exec=vala-terminal -e ~/connecter_FreeWifi.sh Icon=vala-terminal Terminal=true Type=Application Categories=GTK;Application;Utility; MimeType=text/x-vcard; X-SingleInstance=true StartupNotify=true
kimaidou, si le réseau NeufWifi fonctionne de manière analogue (avec un login/mot de passe que l'on peut passer en GET), y'aurait peut-être moyen d'utiliser la même technique. Mais je n'ai pas moyen d'essayer chez moi (pas de login/mdp Neuf, et pas de réseau NeufWifi vraiment proche)
Pour que ça soit mieux intégré dans SHR, il faudrait faire une IHM (pour saisir le login/mdp, puis qui affiche l'avancement étape par étape, qui affiche les erreurs etc), et un package opkg. Il faudrait aussi certainement rendre le code + propre, voire le réécrire dans un autre langage que du script shell+python...
Mais ça commence vraiment à dépasser mes compétences, et le temps que je vais pouvoir y passer...
Dernière modification par mossroy (17-07-2009 02:16:18)
Hors ligne
Salut,
J'ai testé les scripts et cela fonctionne bien chez moi (il faut juste corriger le nom du script authentifier_FreeWifi.sh -> authentifier_connexion_FreeWifi.sh dans connecter_FreeWifi.sh)
Pour activer le Wifi en ligne de commande, il suffit de faire:
mdbus -s org.freesmartphone.odeviced /org/freesmartphone/Device/PowerControl/WiFi org.freesmartphone.Resource.Enable
Hors ligne
Cool !
Merci jay pour le test et l'activation du Wifi.
Du coup, j'ai rajouté cette première étape dans les scripts.
Comme ça commence à faire beaucoup de scripts, j'en ai fait une archive nommée om_freewifi_v0.1.tar.gz, avec un petit README.
Je l'ai mis sur dl.free.fr en attendant mieux : http://dl.free.fr/ubDj5gezK
Je suis preneur de vos retours
Hors ligne
reste plus qu'a faire un petit package, et le mettre sur opkg.org!
Je suis certains que mes collègues sur ephone n'ont pas un truc pareil ....
C'est vrai, ce n'est pas trés visuel ou amusant, mais tellement pratique!
Hors ligne
En effet, c'est très intéressant tout ça.
Comme le disais kimaidou, il faut externaliser les paramètres afin de pouvoir l'adapter à d'autres réseaux wifi.
D'ailleurs, pour ceux qui ont accès aux 2 réseaux, le script devrait pouvoir se connecter aux 2.
Enfin, c'est une très bonne idée d'essayer de partager le package, et je pense qu'il serait mieux de renommer les fichiers en anglais, voir l'ensemble afin qu'il soit partagé par l'ensemble de la communauté (vous avez déjà essayé de modifier des scripts en slovaque, vous?).
Bon, je vais me faire taper dessus car on est sur un forum francophone, mais je donne juste mon avis.
Merci en tout cas pour tout ce travail!
Hors ligne
Sans oublier de préciser sous quelle licence est distribué le script!
Comme d'ab, on commence à faire un petit truc perso dans son coin ça interesse du monde, ça prends de l'ampleur ...C'est ça le logiciel open source!
Il va bientôt falloir ouvrir un dépot SVN ou git!
Tiens, d'ailleurs, est ce que bearstech serait prêt à mettre en place ce genre de chose sur leur server ? Une sorte de forge francophone pour logiciels openmoko, liée à ce site ?
Hors ligne
Puisque ce programme "sera" adapté pour tous les réseaux free, neuf et cie, pourquoi ne pas l'appeler "OpenWifi" (si cela n'existe pas déjà), ou OpenMokoWifi ?
Pour créé un paquet, il faudra mettre tous les scripts dans
/usr/bin/openmokowifi/
et toutes les configurations dans
/home/root/.openmokowifi/
Je vais tester neuf, et je vous dis si y a une possibilité de passer les données en GET
Hors ligne
piratebab a écrit:
reste plus qu'a faire un petit package, et le mettre sur opkg.org!
Tu devrais la mettre dans ta signature cette phrase
J'ai l'impression que tu l'écris souvent ![]()
![]()
Hors ligne
C'est que je suis très frustré de ne pas avoir les compétences suffisante (et le temps) de développer mes propres applis !
Hors ligne
piratebab a écrit:
C'est que je suis très frustré de ne pas avoir les compétences suffisante (et le temps) de développer mes propres applis !
Idem pour moi ![]()
Hors ligne
Généraliser ce script pour NeufWifi me parait une bonne idée. Mais en regardant un peu, il me semble que ce ne sera pas exactement le même processus : il semble y avoir plusieurs champs à passer en plus du login/mot de passe, qu'il faut récupérer dans l'URL, et non dans le code HTML.
En tous cas, on ne pourra pas faire un script générique qui s'adapterait à n'importe quel réseau. Vu les différences, il faudrait se contenter d'un indicateur pour choisir FreeWifi ou NeufWifi.
Mais je n'ai pas de quoi tester sur NeufWifi : il me faudra de l'aide...
Je pense qu'il est encore bien trop tôt pour faire un package opkg avec ces scripts, ne serait-ce que parce qu'on n'a pas encore le nom. Et puis le lancement via terminal est vraiment pas terrible.
Pour le nom : OpenWifi, pourquoi pas, mais c'est peut-être un peu trop générique, je sais pas.
Traduire le code en anglais : pourquoi pas.
Pour la licence, je me suis vraiment pas penché sur la question. Pour l'instant, considérez que c'est en GPL, et n'hésitez pas à modifier le code (la gestion des erreurs est encore bancale par exemple. Et surtout il faudrait faire une IHM, ce qui devient + complexe pour moi)
A noter que cette application existe déjà sur iphone et android (mais c'est uniquement pour Free, je crois)
Pour le dépot SVN ou GIT, il me semble qu'il y a déjà http://projects.openmoko.org/
Ca fait pas mal de choses à faire pour peu de temps disponible!
Je ne pense pas pouvoir le faire seul : des volontaires pour donner un coup de main sur le code?
Hors ligne
Pour ceux que ça intéresserait, j'ai adapté ces scripts pour la SHR testing actuelle.
A télécharger à l'adresse http://mossroy.free.fr/om_freewifi/om_f … 0.2.tar.gz
Pas d'évolution fonctionnelle : juste une mise à jour technique pour que cela fonctionne à nouveau sur les dernières versions de SHR.
Voir le README pour + d'infos
Hors ligne
Apparemment, Free a changé son mode de connexion à FreeWifi il y a peu. Il va falloir modifier le script.
J'essaierai de jeter un oeil quand j'aurai un peu de temps
Hors ligne
Tant qu'à bien faire, il faudrait également vérifier que le certificat fourni par le site est bien le bon, sinon les "faux" FreeWifi qui ne manqueront pas de fleurir vont moissonner du mot de passe à tout va.
Et si veux te rendre un peu moins dépendant des modifications de la page web, tu peux te tourner vers l'extension "mechanize" de Python, qui permet d'interpréter le code de la page et de réagir en conséquence (en gros, c'est un navigateur programmable et muet). Donc tant que le nom de champs ne change pas, le programme reste valide.
Hors ligne
Et avec "curl", ça peut p'tet être plus simple?
Hors ligne