Connexion automatique au Hotspot WiFi

Définition : le but est de créer un script qui détecte les Hotspot communautaires de Orange, SFR, Free, ou Bouygues, etc... et qui s'y connecte automatiquement.

Cette fonctionnalité peut être utile pour avoir une connexion internet sur des systèmes mobiles, ou  pour se connecter à un Hotspot voisin en cas de défaillance de la box internet.

Dans ce tutoriel, on utilisera un Raspberry Pi associé à une clé USB WiFi; mais il est  transposable à tout système tournant sous Linux

Matériel utitlisé : RaspberryPi 2 model B+ et clé USB WiFi

Attention : ceci est une ébauche !!




Configuration de la clé USB WiFi
Brancher la cle sur le Raspberry Pi et vérifier son fonctionnement avec la commande :

iwlist scan

La liste des hotspot au voisinnage doit s'afficher, montrant le bon fonctionnement du WiFi

Remarque : insister si tu as le message "Device or ressource busy"

il faut modifier le fichier /etc/wpa_supplicant/wpa_supplicant.conf pour y intégrer ces informations

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="FreeWifi"
    key_mgmt=NONE
}
network={
    ssid="SFR WiFi FON"
    key_mgmt=NONE
}


Dans l'exemple ci-dessus on intègre 2 hotspots ouvert; on peut rajouter autant de section "network" que néccessaire.

Le démarrage est parfois néccessaire pour la prise en compte des modidifcations
reboot

Après redémarrage :
root@test:~# iwconfig
wlan0     IEEE 802.11bgn  ESSID:"SFR WiFi FON"
          Mode:Managed  Frequency:2.462 GHz  Access Point: 6A:A1:D7:32:DE:4D
          Bit Rate=72.2 Mb/s   Tx-Power=20 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=53/70  Signal level=-57 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:2  Invalid misc:13   Missed beacon:0

lo        no wireless extensions.

eth0      no wireless extensions.

la clé WiFi s'est connecté automatiquement au réseau SFR WiFi Fon,ou autre

A ce stade, nous sommes connecté au hotspot, mais il va encore falloir s'authentifier via un formulaire Web


Chapitre 1.

=========================================

La clé USB sera opérationnelle et configurée pour se connecter au Hotspot


=========================================
Script de gestion du formulaire de connexion

Les hotspot WiFi ouverts présentent génralement un formulaire de connexion, qui s'ouvre avec le navigateur Web;

Ce n'est qu'après avoir rempli ce formulaire, qui comprend éventuellement la saisie d'un identifiant/ mot de passe, que l'accès intenet sera fonctionnel.

Le script de connexion doit donc intercepter cette page de connexion et renvoyer la réponse adéquate;

SFR Wifi FON
(source : vincesafe.fr, modifié)

#!/bin/bash

uname=identifiant
pass=motdepasse
target=https://hotspot.wifi.sfr.fr/nb4_crypt.php

# Step 1: get the location with wget
wget -O /dev/null -o loc http://perdu.com
echo `grep Emplacement loc` > loc
location=`awk 'BEGIN { FS=" " } { print $2 }' loc`


# Step 2: extract challenge, MAC addresses, ... from location

challenge=`awk 'BEGIN { FS="&" } { print $4 }' loc | awk 'BEGIN { FS="=" } { print $2 }'`
nasid=`awk 'BEGIN { FS="&" } { print $6 }' loc | awk 'BEGIN { FS="=" } { print $2 }'`
mac=`awk 'BEGIN { FS="&" } { print $7 }' loc | awk 'BEGIN { FS="=" } { print $2 }'`
uamport=`awk 'BEGIN { FS="&" } { print $3 }' loc | awk 'BEGIN { FS="=" } { print $2 }'`
uamip=`awk 'BEGIN { FS="&" } { print $2 }' loc | awk 'BEGIN { FS="=" } { print $2 }'`
mode=`awk 'BEGIN { FS="&" } { print $8 }' loc | awk 'BEGIN { FS="=" } { print $2 }'`
channel=`awk 'BEGIN { FS="&" } { print $9 }' loc | awk 'BEGIN { FS="=" } { print $2 }' | awk 'BEGIN { FS=" " } { print $1 }'`


# Step 3: prepare POST with target URL (set in the code)
postdata="choix=neuf&username=$uname&password=$pass&conditions=on&challenge=$challenge&username2=$uname&accessType=neuf&lang=fr&mode=$mode&userurl=http://perdu.com&uamip=$uamip&uamport=$uamport&channel=$channel&mac=$nasid|mac&connexion=Connexion"

# Step 4: send POST request
wget -O debug $target --post-data="$postdata"


# Step 5: get a page on local AP
newloc=`grep location debug | awk 'BEGIN { FS="\"" } { print $2 }'`
wget $newloc -O newloc


FreeWifi

à venir...

Autres

à venir...


Chapitre 2.

=========================================

Répondre de façon automatisée au formulaire de connexion


=========================================
Gestion des connexions
à venir...
Chapitre 3.

=========================================

Passer automatiquement sur un hotspot alternatif en cas de défaillance de l'accès internet


=========================================
Annexes
à venir...

Chapitre 4.

=========================================

Annexes


=========================================