Ich verbinde mich oft mit einem Netzwerk, das offen ist, aber eine Schlüsselpassauthentifizierung erfordert, bevor es auf einer Webseite verwendet wird. Ist es möglich, die Authentifizierung mit einem Skript zu automatisieren?
Ich verbinde mich oft mit einem Netzwerk, das offen ist, aber eine Schlüsselpassauthentifizierung erfordert, bevor es auf einer Webseite verwendet wird. Ist es möglich, die Authentifizierung mit einem Skript zu automatisieren?
Antworten:
Was für ein lustiges Problem.
Ich bin mir zwar sicher, dass die Antwort von ændrük wahrscheinlich funktionieren würde, aber ich bin etwas dagegen, dass etwas, das von Desktop-Software abhängt, die Netzwerkverfügbarkeit verwaltet.
Ich würde vorschlagen, dass Sie mit Pythons Mechanize-Bibliothek herumspielen . Sie können es aus den Repositorys installieren über:
sudo apt-get install python-mechanize
Dann holen Sie sich ein Skript. Sie müssen zunächst die Struktur der Seite herausfinden, an die Sie senden. Sie müssen herausfinden, woher Ihr Formular kommt und welche Felder zum Senden eingegeben werden müssen. Sobald Sie das wissen, ist es wirklich so einfach wie das Schreiben eines schnellen kleinen Formularparsers und Übermittlers. Mechanize erledigt das ganze schwere Heben. Hier ist ein kurzes Beispiel, das aus den Dokumenten auf Formularen übernommen wurde :
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()
Je nachdem, wie das System funktioniert, kann dies ausreichen. Möglicherweise müssen Sie ein Cookie-Jarring einbinden, um eine Sitzung am Leben zu erhalten, während die Verbindung eingeschaltet wird. Technisch gesehen gibt es jedoch kein Argument, warum dies erforderlich sein sollte.
Dann müssen Sie dies nur noch in das Netzwerksystem einbinden, damit es aufgerufen wird. Das Laden von /etc/network/if-up.d
sollte funktionieren, aber ich schlage vor, dass Sie Ihrem Code eine Überprüfung voranstellen, um sicherzustellen, dass Sie sich wirklich an dem Hotspot befinden, für den Ihr Login funktioniert.
Abhängig vom Typ des vorhandenen Captive-Portals können Sie sich möglicherweise über eine POST-Anforderung authentifizieren, die mit Wget gesendet wurde (verwenden Sie Manipulationsdaten , um zu erfahren, welche Daten gesendet werden müssen) oder mithilfe eines iMacros- Skripts in Firefox.
Sie können ein Skript hinzufügen /etc/network/if-up.d
, damit es jedes Mal ausgeführt wird, wenn eine Netzwerkverbindung hergestellt wird. iwconfig
Lassen Sie das Skript überprüfen, in welchem Netzwerk Sie sich befinden, bevor Sie etwas tun, und starten Sie die Befehle mit, sudo -u yourusername
damit Sie Ihren Webbrowser nicht als Root ausführen.