Das WLAN-Netzwerk unserer Hochschule ist zwar offen, erfordert bei Verbindung aber einen Login auf einer zwischengeschalteten Seite. Das ist extrem nervig, wenn manche Programme bei Verbindung versuchen, Daten herunterzuladen und dann an ungültigen (selbst-signierten) SSL-Zertifikaten scheitern.
Kurzum: Ein Skript muss her, das mich bei Verbindung mit dem Uninetz automatisch authentisiert.
Ubuntu 10.10 verwendet NetworkManager für die Verwaltung der Netzwerke. Ein man NetworkManager
zeigt:
NetworkManager will execute scripts in the
/etc/NetworkManager/dispatcher.d
directory in alphabetical order in response to network events. Each script should be (a) a regular file, (b) owned by root, © not writable by group or other, (d) not set-uid, (e) and executable by the owner. Each script receives two arguments, the first being the interface name of the device just activated, and second an action.
Kurzum: Ein Skript in /etc/NetworkManager/dispatcher.d
wird aufgerufen, wenn die Verbindung hergestellt wird und bekommt als ersten Parameter das Netzwerkinterface übergeben. Voraussetzung: Ausführbar, gehört root
und ist nur durch diesen beschreibbar.
Mittels Python und dem Http-Modul ist es jetzt möglich, ein schnelles Login-Skript zusammenzuschustern.
#!/usr/bin/env python # -*- coding: utf-8 -*- # Skript kopieren nach /etc/NetworkManager/dispatcher.d/99wlan-login from httplib2 import Http from urllib import urlencode import os import sys # Login und Netzwerk-Konfiguration network_userid = 'login' network_password = 'password' network_name = 'UninetzName' network_loginpage = 'https://login.hochschule.de/loginskript' # Parameter testen if (len(sys.argv) < 3): print('Aufruf: '+sys.argv[0]+' <interface> up') sys.exit(1) # Parameter auswerten iface = sys.argv[1]; if not (sys.argv[2] == "up"): sys.exit(1) # Netzwerknamen testen is_uni = 0 == os.system('iwconfig '+iface+' | grep '+network_name) if is_uni: h = Http() h.request("http://www.google.de") data = dict(userid=network_userid, password=network_password) resp, content = h.request(network_loginpage, "POST", urlencode(data))
Das ganze Ding dann etwa /etc/NetworkManager/dispatcher.d/99wlan-login
nennen (Skripte werden in alphabetischer Reihenfolge ausgeführt), die Rechte anpassen und der Weltfrieden steht direkt vor der Haustür.
Oder so.