Como entrar programaticamente em uma rede do tipo hotspot?

8

Costumo me conectar a uma rede aberta, mas requer uma autenticação de senha antes de ser usada em uma página da web. É possível automatizar a autenticação com um script?

Vadim Peretokin
fonte

Respostas:

5

Que problema divertido.

Embora eu tenha certeza de que a resposta de ændrük provavelmente funcionaria, sou um pouco adverso em deixar que algo dependente do software de desktop gerencie a disponibilidade da rede.

Eu sugiro que você brinque com a biblioteca Mechanize do Python . Você pode instalá-lo a partir dos repositórios via:

sudo apt-get install python-mechanize

Em seguida, obtenha scripts. Você precisa começar descobrindo a estrutura da página para a qual está enviando. Você precisa descobrir de onde vem o formulário e quais campos precisam ser inseridos para enviar. Depois que você souber disso, é realmente tão simples quanto escrever um rápido analisador e submissor de formulário. Mechanize faz todo o trabalho pesado. Aqui está um exemplo rápido adaptado de seus documentos em formulários :

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

Dependendo de como o sistema deles funciona, isso pode ser suficiente. Talvez você precise vincular alguns cookies para manter uma sessão ativa enquanto eles ativam a conexão, mas tecnicamente falando, não há argumento para que eles exijam isso.

Então você só precisa vincular isso ao sistema de rede para que seja chamado. Carregá-lo /etc/network/if-up.ddeve funcionar, mas sugiro que você prefixe seu código com uma verificação para garantir que você esteja realmente no hotspot em que seu login funciona.

Oli
fonte
Maravilhoso, eu não sabia mecanizar. Estou animado para experimentá-lo.
ændrük
2

Dependendo do tipo de portal cativo em vigor, você poderá se autenticar por meio de uma solicitação POST enviada usando o Wget (use o Tamper Data para saber quais dados precisam ser enviados) ou usando um script iMacros no Firefox.

Você pode adicionar um script para /etc/network/if-up.dfazê-lo executar sempre que uma conexão de rede for estabelecida. Faça com que o script verifique em qual rede você está iwconfigantes de fazer qualquer coisa e certifique-se de iniciar os comandos usando sudo -u yourusernamepara não executar o navegador como root.

ændrük
fonte