J'aimerai avoir votre avis sur mon script d'auto-reconnexion à freewifi et s'il y a des choses améliorables.
j'y connais pas grand chose en bash, je ne fais que du javascript et du php habituellement donc excusez moi si le code est dégueulasse
Dans le principe j'ai cherché à faire un script pour me reconnecter automatiquement à freewifi et qui vérifie toutes les 10 secondes que je suis connecté à internet, si ce n'est pas le cas on recommence la connexion
#!/bin/sh
#script auto-reconnxion freewifi
url="https://wifi.free.fr/Auth"
utilisateur="**********"
motdepasse="**********"
texte1="CONNEXION AU SERVICE REUSSIE"
texte2="Site accessible uniquement à partir d'une Freebox:"
nombre=0
duree=10
function comptage {
nombre=$(($nombre+1))
echo $nombre
sleep $duree
}
while true; do
if ping 8.8.8.8 -c 1 &> /dev/null; then
clear
echo "Connecté à internet"
comptage
else
if curl -s -F "login=${utilisateur}" -F "password=${motdepasse}" "${url}" | grep -q -e "${texte1}" -e "${texte2}"; then
if ping 8.8.8.8 -c 1 &> /dev/null; then
#notify-send "Connecté à FreeWifi" "FreeWifi"
clear
echo "Identification ok - Connecté à internet"
comptage
else
clear
echo "Identification ok - Non connecté à internet"
comptage
fi
else
clear
echo "Identification échoué"
comptage
fi
fi
done
Je me demande si c'est pas mieux de faire un genre de ipconfig getifaddr [ton interface] ou du genre, au lieu de lâcher un paquet ICMP vers google ?
Le 21 novembre 2016 à 15:37:56 tolsadus a écrit :
Je me demande si c'est pas mieux de faire un genre de ipconfig getifaddr [ton interface] ou du genre, au lieu de lâcher un paquet ICMP vers google ?
Bah c'est pour tester si la connexion internet est vraiment active, parce qu'on peut être connecté à un hot-spot freewifi sans être connecté à internet, c'est un drôle de bug qui m'arrive souvent, et pas qu'à moi d'après ce que j'ai pu voir sur le forum free.
S'il n'y a pas de connexion internet juste après le login, il faut recommencer jusqu'à ce que la connexion soit active
En effet alors, étrange. Mais bon normalement les freebox marchent plutôt bien.
C'est surement un problème de distance ?
Je suis pas spécialement fan des variables en français mais bon.
Il parle des hotspots free-wifi.
T'as jamais ete etudiant avec pour seule connection les hotspots sfr et free de ton immeuble en allant gratter des mdp a droite a gauche?
Ce que tu peux faire c'est trouver une adresse IP plus proche de toi que 8.8.8.8, tu auras une reponse a priori plus rapide. (genre le DNS de free, ils utilisent quoi?)
Le 22 novembre 2016 à 10:05:17 f0c300 a écrit :
Ce que tu peux faire c'est trouver une adresse IP plus proche de toi que 8.8.8.8, tu auras une reponse a priori plus rapide. (genre le DNS de free, ils utilisent quoi?)
Ah oui pas bête
Par contre j'ai un doute, je me demande si les dns de free ne sont pas directement accessible sans même les logins, si c'est le cas ça fausserait la connexion à internet
Le 20 novembre 2016 à 18:54:25 ViceKitty a écrit :
- !/bin/sh
- script auto-reconnxion freewifi
url="https://wifi.free.fr/Auth"
Il manque un e : "reconnexion".
Le 22 novembre 2016 à 18:49:37 crevebedaine a écrit :
Il manque un e : "reconnexion".
lol
Je vais faire une petite interface avec glade pour rendre ça mieux que dans un terminal
shellcheck /tmp/test.sh
In /tmp/test.sh line 11:
function comptage {
^-- SC2113: 'function' keyword is non-standard. Use 'foo()' instead of 'function foo'.
In /tmp/test.sh line 12:
nombre=$(($nombre+1))
^-- SC2004: $ on variables in (( )) is unnecessary.
In /tmp/test.sh line 19:
if ping 8.8.8.8 -c 1 &> /dev/null; then
^-- SC2039: #!/bin/sh was specified, but &> is not standard.
In /tmp/test.sh line 26:
if ping 8.8.8.8 -c 1 &> /dev/null; then
^-- SC2039: #!/bin/sh was specified, but &> is not standard.
Autres remarques :
printf "foo\n"
à echo "foo"
car echo
ne réagit pas de la même façon sur les autres systèmes est printf
est à priori plus standard (et ça permet de faire de l'i18n un peu plus facilement)ok j'ai modifié le script :
#!/bin/sh
#script FreeWifi AutoRec
url="https://wifi.free.fr/Auth"
login="********"
password="********"
text1="CONNEXION AU SERVICE REUSSIE"
text2="Site accessible uniquement à partir d'une Freebox:"
dns="8.8.8.8"
#dns="212.27.40.241" #dns free
timeloop=10
waiting() {
sleep $timeloop
}
while true; do
if ping $dns -c 1 > /dev/null; then
clear
printf "Connecté"
waiting
else
clear
printf "Essai"
if curl -s -F "login=${login}" -F "password=${password}" "${url}" | grep -q -e "${text1}" -e "${text2}"; then
if ping $dns -c 1 > /dev/null; then
#notify-send -t 500 -u low -i /usr/share/icons/la-capitaine-icon-theme/apps/scalable/freewifi.svg "Connecté à FreeWifi" "FreeWifi"
clear
printf "Identifié"
fi
else
clear
printf "Non connecté"
waiting
fi
fi
done
Le 24 novembre 2016 à 16:55:59 ViceKitty a écrit :
ok j'ai modifié le script :#!/bin/sh #script FreeWifi AutoRec url="https://wifi.free.fr/Auth" login="********" password="********" text1="CONNEXION AU SERVICE REUSSIE" text2="Site accessible uniquement à partir d'une Freebox:" dns="8.8.8.8" #dns="212.27.40.241" #dns free timeloop=10 waiting() { sleep $timeloop } while true; do if ping $dns -c 1 > /dev/null; then clear printf "Connecté" waiting else clear printf "Essai" if curl -s -F "login=${login}" -F "password=${password}" "${url}" | grep -q -e "${text1}" -e "${text2}"; then if ping $dns -c 1 > /dev/null; then #notify-send -t 500 -u low -i /usr/share/icons/la-capitaine-icon-theme/apps/scalable/freewifi.svg "Connecté à FreeWifi" "FreeWifi" clear printf "Identifié" fi else clear printf "Non connecté" waiting fi fi done
Sinon j'avais une idée pour ton script, mettre en argument le login/password/dns voulu ?
Et si tu spécifies pas de dns, ca met ceux de google/free/whatever tu preferes
Le 05 décembre 2016 à 12:11:13 tolsadus a écrit :
Sinon j'avais une idée pour ton script, mettre en argument le login/password/dns voulu ?Et si tu spécifies pas de dns, ca met ceux de google/free/whatever tu preferes
j'ai mis une adresse dns en ping mais ça peut être n'importe quelle ip web, c'est juste pour tester on a accès au web.
Pour la connexion à freewifi tu es obligé d'utiliser les dns de free dans /etc/resolv.conf, tout autre dns ou l'utilisation de unbound fait échouer le login à freewifi
Le 05 décembre 2016 à 12:32:25 ViceKitty a écrit :
Le 05 décembre 2016 à 12:11:13 tolsadus a écrit :
Sinon j'avais une idée pour ton script, mettre en argument le login/password/dns voulu ?Et si tu spécifies pas de dns, ca met ceux de google/free/whatever tu preferes
j'ai mis une adresse dns en ping mais ça peut être n'importe quelle ip web, c'est juste pour tester on a accès au web.
De préférence, prend une ip qui tomberas jamais (un datacenter de chez google, le cdn de microsoft, etc...)
Pour la connexion à freewifi tu es obligé d'utiliser les dns de free dans /etc/resolv.conf, tout autre dns ou l'utilisation de unbound fait échouer le login à freewifi
Intéressant, je savais pas du tout ! Merci !