¿Cómo iniciar sesión programáticamente en una red de tipo punto de acceso?

8

A menudo me conecto a una red, que está abierta, pero requiere una autenticación de paso de clave antes de usarla en una página web. ¿Es posible automatizar la autenticación con un script?

Vadim Peretokin
fuente

Respuestas:

5

Que problema tan divertido.

Si bien estoy seguro de que la respuesta de ændrük probablemente funcionaría, soy un poco adverso al permitir que algo dependiente del software de escritorio gestione la disponibilidad de la red.

Te sugiero que juegues con la biblioteca Mechanize de Python . Puede instalarlo desde los repositorios a través de:

sudo apt-get install python-mechanize

Luego obtén scripts. Debe comenzar por descubrir la estructura de la página a la que se está enviando. Debe encontrar de dónde viene su formulario y qué campos deben ingresarse para enviar. Una vez que sepa eso, es realmente tan simple como escribir un pequeño analizador y remitente de formularios. Mechanize hace todo el trabajo pesado. Aquí hay un ejemplo rápido adaptado de sus documentos en formularios :

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()

Dependiendo de cómo funcione su sistema, esto podría ser suficiente. Es posible que tenga que vincular un poco de discordancia de cookies para mantener viva una sesión mientras activan la conexión, pero técnicamente hablando, no hay argumento por qué deberían requerir eso.

Entonces solo necesita vincular esto con el sistema de red para que se llame. Cargarlo /etc/network/if-up.ddebería funcionar, pero le sugiero que prefija su código con una marca de verificación para asegurarse de que realmente está en el punto de acceso para el que funciona su inicio de sesión.

Oli
fuente
Maravilloso, no sabía sobre mecanizar. Estoy emocionado de probarlo.
ændrük
2

Dependiendo del tipo de portal cautivo existente, es posible que pueda autenticarse a través de una solicitud POST enviada con Wget (use Tamper Data para saber qué datos deben enviarse) o mediante un script de iMacros en Firefox.

Puede agregar un script para /etc/network/if-up.dque se ejecute cada vez que se establece una conexión de red. Haga que el script verifique con qué red se encuentra iwconfigantes de hacer cualquier cosa, y asegúrese de comenzar a usar los comandos sudo -u yourusernamepara no ejecutar su navegador web como root.

ændrük
fuente