PROJET AUTOBLOG


bfontaine.net

Site original : bfontaine.net

⇐ retour index

Connectez-vous facilement à up7d

jeudi 8 mars 2012 à 21:37

À l’université Paris 7, plus précisément sur le campus PRG, est accessible une borne WiFi dont le SSID est up7d. Pour s'y connecter, il faut avoir un compte ENT (seuls les étudiants et le personnel en ont un). Le principe de connexion est le même que pour une borne Free WiFi ou Neuf WiFi : il n'y a pas de clef WEP ou WPA(2), et on tombe sur une page de connexion lorsqu'on y accède, nous demandant login et mot de passe. Il est assez fastidieux de devoir entrer son login et mot de passe à chaque fois, surtout que la page est parfois lente à charger, et nécessite de façon totalement injustifiée l'activation du Javascript.

Pour résoudre ce problème, j'ai développé un petit script en Ruby, up7connect.rb, qui automatise l'authentification. Lors du premier lancement, il demande le login et mot de passe à utiliser. Ces informations sont chiffrées et stockées localement. Ensuite, il suffit de le lancer pour qu'il vous authentifie. Si tout est bon, il affiche Connection ok. Si l'on est déjà connecté, il le précise. À noter qu'il faut avoir déjà sélectionné le réseau sur son ordinateur, le script vérifie d'ailleurs si une borne dont le SSID est up7d est bien accessible. Il nécessite Ruby 1.9 pour fonctionner, et s'utilise en ligne de commande (option --help ou -h pour l'aide.)

Au niveau technique, pour la connexion j'utilise le module net/http pour envoyer les données du formulaire originel à la bonne page. La page est en HTTPS, mais le certificat SSL n'est pas valide, donc je ne le vérifie pas (OpenSSL::SSL::VERIFY_NONE). J'utilise un user-agent personnalisé, et j'envoi un header Referer avec l'adresse de la page de login originelle, sinon je suis bloqué par une erreur 405 (méthode de requête non autorisée). Pour le stockage du login et du mot de passe, mon algorithme est le suivant:

j1 = caractère au hasard dans [a-z]
j2 = caractère au hasard dans [a-z]
s = login + <chaîne arbitraire> + mot de passe
l1 = liste des codes des caractères de s
s1 = éléments de l1 joints avec j1
l2 = liste des codes des caractères de s1
s2 = éléments de l2 joints avec j2
pour chaque chiffre e dans s2 faire:
e = caractère correspondant à 33+e
fin pour
écrire s2 dans un ~/.up7connect.conf

Le déchiffrage se résume à faire la manipulation inverse à coup de split avec des expressions régulières.

Le script fonctionne sur les machines sous UNIX-like. Pour Windows, je n'ai pas pu tester, n'ayant pas d'environnement adéquat (i.e. un laptop sous Windows). Par défaut, le fichier chiffré contenant login et mot de passe est situé dans le répertoire courant sous Windows, et dans le répertoire de login pour les autres. Pour Linux, j'utilise la commande iwlist wlan0 scan last pour voir si le SSID up7d est visible, tandis que je ne fais pas cette vérification sous Windows/Mac/FreeBSD (je ne connais pas la commande correspondante pour Windows/Mac, c'est à venir pour FreeBSD).

Le script est actuellement en version 0.1, sous licence libre GPL v3, et disponible ici. Il fonctionne bien, malgré parfois une petite difficulté à déterminer si le SSID up7d est visible (il arrive rarement qu'il le considère comme invisible alors qu'il est bien là).

MàJ du 11 mars 2012 : Le script n'essaye plus d'utiliser la commande iwlist sous Mac, car elle n'y est pas disponible. Cette version est la 0.1b et remplace la précédente.