Ab und an komme ich in die Verlegenheit, mich an einem WLAN-AP “Captive-Portal” anmelden zu müssen, bevor ich das Internet nutzen kann. Häufig sind diese Geräte von Aruba Networks . Bislang fehlte mir eine einfache Methode, um mich dort von der Shell aus anmelden zu können und so habe ich mir das Ganze etwas näher angesehen.
Selbstverständlich muss ich das nachfolgende Bash Script für jedes Portal maßschneidern, aber generell sollte mir damit die Anmeldung gelingen:
1#!/usr/bin/env bash
2
3captive_portal="captive-portal.domain.tld"
4user_agent="Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"
5
6i=1
7while true; do
8 curl -k "https://${captive_portal}/swarm.cgi" --compressed \
9 -H "Host: ${captive_portal}" \
10 -H "User-Agent: ${user_agent}" \
11 -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
12 -H 'Accept-Language: de,en;q=0.5' \
13 -H 'Content-Type: application/x-www-form-urlencoded' \
14 -H "Referer: https://${captive_portal}/swarm.cgi?opcode=cp_generate&orig_url=687474703a2f2f68656973652e64652f" \
15 -H 'DNT: 1' \
16 -H 'Connection: keep-alive' \
17 -H 'Upgrade-Insecure-Requests: 1' --data 'orig_url=687474703a2f2f68656973652e64652f&opcode=cp_auth&user=guest&password=guest' >/dev/null 2>&1
18 if [[ $(ping -c1 google.de 2>/dev/null) ]]; then
19 echo "Yay! Got an internet connection, after interation: ${i}"
20 break
21 fi
22 ((i++))
23done
Theoretisch muss ich so nur noch mein WLAN-Interface manuell konfigurieren und das Script ausführen.
Aber es geht noch einfacher: Unter Arch Linux nutze ich netctl für die Netzwerkkonfiguration und so kann ich - wie gewohnt - ein neues,
statisches Profil und einen netctl Hook für das WLAN-Netzwerk in /etc/netctl anlegen.
Angenommen, die Datei für das Netzwerkprofil nennt sich /etc/netctl/wifi_test_guest_1, jetzt erstelle ich unter /etc/netctl/hooks/wifi_test_guest_1.hook
eine Datei mit folgendem Inhalt:
1if [[ "$Profile" =~ wifi_test_guest_.* ]]; then
2 ExecUpPost='/usr/local/bin/aruba_login'
3fi
Wenn das Netzwerk nun gestartet wird, wird automatisch das Aruba-Login Script ausgeführt.
