Como programaticamente entrar em uma rede do tipo hotspot?

8

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

    
por Vadim Peretokin 17.02.2011 / 20:55

2 respostas

5

Que problema divertido.

Embora eu tenha certeza de que a resposta do æ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 por descobrir a estrutura da página que está enviando. Você precisa encontrar o local de onde você vem e quais campos precisam ser inseridos para enviar. Uma vez que você sabe disso, é realmente tão simples quanto apenas escrever um pequeno analisador de formulário e um submissor. Mechanize faz todo o trabalho pesado. Veja 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 funciona, isso pode ser suficiente. Você pode ter que amarrar alguns cookies para manter uma sessão ativa enquanto eles ligam a conexão, mas tecnicamente falando, não há nenhum argumento para que eles precisem disso.

Então você só precisa amarrar isso no sistema de rede para ser chamado. Carregá-lo de /etc/network/if-up.d deve funcionar, mas sugiro que você prefixe seu código com um cheque para ter certeza de que está realmente no hotspot em que seu login funciona.

    
por Oli 17.02.2011 / 23:33
2

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

Você pode adicionar um script a /etc/network/if-up.d para executá-lo sempre que uma conexão de rede for estabelecida. Faça com que o script verifique com qual rede você está com iwconfig antes de fazer qualquer coisa e certifique-se de iniciar comandos usando sudo -u yourusername para não executar seu navegador da web como root.

    
por ændrük 17.02.2011 / 22:35