Comment se connecter par programmation à un réseau de type hotspot?

8

Je me connecte souvent à un réseau, qui est ouvert, mais nécessite une authentification par passe-clé avant d'être utilisé dans une page Web. Est-il possible d'automatiser l'authentification avec un script?

Vadim Peretokin
la source

Réponses:

5

Quel problème amusant.

Bien que je sois sûr que la réponse d'ændrük fonctionnerait probablement, je suis légèrement opposé à laisser quelque chose dépendant du logiciel de bureau gérer la disponibilité du réseau.

Je vous suggère de jouer avec la bibliothèque Mechanize de Python . Vous pouvez l'installer à partir des référentiels via:

sudo apt-get install python-mechanize

Obtenez ensuite des scripts. Vous devez commencer par découvrir la structure de la page à laquelle vous soumettez. Vous devez trouver d'où vient votre formulaire et quels champs doivent être entrés pour soumettre. Une fois que vous le savez, c'est aussi simple que d'écrire un petit analyseur de formulaire et un émetteur. Mechanize fait tout le travail lourd. Voici un exemple rapide adapté de leurs documents sur les formulaires :

import sys
from mechanize import ParseResponse, urlopen, urljoin

# replace this with the actual login page
# you'll need to do some research
uri = "http://theloginpage.com/"

response = urlopen(uri)
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
print form
form["username"] = "your username"
form["username"] = "password"

# form.click() returns a mechanize.Request object
# (see HTMLForm.click.__doc__ if you want to use only the forms support, and
# not the rest of mechanize)
print urlopen(form.click()).read()

Selon le fonctionnement de leur système, cela peut suffire. Vous devrez peut-être attacher des cookies pour garder une session en vie pendant qu'ils activent la connexion, mais techniquement, il n'y a aucun argument pourquoi ils devraient l'exiger.

Ensuite, il vous suffit de lier cela au système de mise en réseau pour qu'il soit appelé. Le chargement depuis /etc/network/if-up.ddevrait fonctionner mais je vous suggère de préfixer votre code avec une vérification pour vous assurer que vous êtes vraiment sur le hotspot pour lequel votre connexion fonctionne.

Oli
la source
Magnifique, je ne connaissais pas la mécanisation. Je suis ravi de l'essayer.
ændrük
2

Selon le type de portail captif en place, vous pourrez peut-être vous authentifier via une demande POST envoyée à l'aide de Wget (utilisez Tamper Data pour savoir quelles données doivent être envoyées) ou à l'aide d'un script iMacros dans Firefox.

Vous pouvez ajouter un script pour /etc/network/if-up.dle faire fonctionner chaque fois qu'une connexion réseau est établie. Demandez au script de vérifier le réseau sur lequel vous vous trouvez iwconfigavant de faire quoi que ce soit et assurez-vous de démarrer les commandes à l'aide sudo -u yourusernameafin de ne pas exécuter votre navigateur Web en tant que root.

ændrük
la source