web-dev-qa-db-fra.com

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

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

8
Vadim Peretokin

Quel problème amusant.

Je suis sûr que la réponse d'ændrük fonctionnerait probablement, mais je suis un peu opposé à l'idée de laisser un logiciel dépendant du logiciel de bureau gérer la disponibilité du réseau.

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

Sudo apt-get install python-mechanize

Ensuite, prenez des scripts. Vous devez commencer par déterminer la structure de la page à laquelle vous vous soumettez. Vous devez trouver où votre formulaire vient et quels champs doivent être entrés pour être soumis. Une fois que vous le savez, c’est aussi simple que d’écrire un petit analyseur et présentateur de formulaire. La mécanisation fait tout le travail lourd. Voici un exemple rapide adapté de leurs docs 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 pourrait être suffisant. Il se peut que vous deviez associer des cookies pour maintenir une session active tout en activant la connexion, mais techniquement, rien ne dit pourquoi ils devraient en avoir besoin.

Ensuite, il vous suffit de relier cela au système de réseau pour qu’il soit appelé. Le charger à partir de /etc/network/if-up.d devrait fonctionner, mais je vous suggère de préfixer votre code avec une coche pour vous assurer que vous êtes bien sur le hotspot pour lequel votre identifiant fonctionne.

5
Oli

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 connaître les données à envoyer) ou en utilisant un script iMacros dans Firefox.

Vous pouvez ajouter un script à /etc/network/if-up.d pour le faire fonctionner à chaque fois qu'une connexion réseau est établie. Demandez au script de vérifier le réseau sur lequel vous êtes sur iwconfig avant de faire quoi que ce soit et assurez-vous de lancer les commandes en utilisant Sudo -u yourusername afin de ne pas exécuter votre navigateur Web en tant que root.

2
ændrük