Mi collego spesso a una rete, che è aperta, ma richiede un'autenticazione key-pass prima di essere utilizzata in una pagina Web. È possibile automatizzare l'autenticazione con uno script?
Mi collego spesso a una rete, che è aperta, ma richiede un'autenticazione key-pass prima di essere utilizzata in una pagina Web. È possibile automatizzare l'autenticazione con uno script?
Risposte:
Che problema divertente.
Mentre sono sicuro che la risposta di ændrük probabilmente funzionerebbe, sono leggermente contrario a lasciare che qualcosa che dipende dal software desktop gestisca la disponibilità della rete.
Ti suggerirei di giocare con la libreria Mechanize di Python . Puoi installarlo dai repository tramite:
sudo apt-get install python-mechanize
Quindi ottenere script. Devi iniziare scoprendo la struttura della pagina a cui ti stai inviando. Devi trovare dove arriva il modulo e quali campi devono essere inseriti per inviare. Una volta che lo sai, è davvero semplice come scrivere un piccolo parser e presentatore di moduli. Mechanize fa tutto il sollevamento pesante. Ecco un breve esempio adattato dai loro documenti sui moduli :
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()
A seconda di come funziona il loro sistema, questo potrebbe essere sufficiente. Potrebbe essere necessario associare alcuni cookie a scatti per mantenere viva una sessione mentre attivano la connessione, ma tecnicamente parlando, non c'è motivo per cui dovrebbero richiederlo.
Quindi devi solo collegarlo al sistema di rete in modo che venga chiamato. Il caricamento da /etc/network/if-up.d
dovrebbe funzionare, ma ti suggerisco di aggiungere il prefisso al tuo codice con un segno di spunta per assicurarti di essere davvero sull'hotspot per cui il tuo login funziona.
A seconda del tipo di portale captive in atto, potresti essere in grado di autenticarti tramite una richiesta POST inviata tramite Wget (usa Tamper Data per sapere quali dati devono essere inviati) o usando uno script iMacros in Firefox.
È possibile aggiungere uno script per /etc/network/if-up.d
eseguirlo ogni volta che viene stabilita una connessione di rete. Chiedi allo script di verificare su quale rete sei iwconfig
prima di fare qualsiasi cosa e assicurati di avviare i comandi in sudo -u yourusername
modo da non eseguire il tuo browser come root.