Copyright © KC Green

Von der Shell an einem WLAN Captive Portal von Aruba Networks einloggen

 howto   reference 

Von der Shell aus an einem Aruba Networks Access Point (captive portal) anmelden um eine Verbindung ins Internet herzustellen

Ab und an kommt man in die Verlegenheit, sich an einem WLAN-AP “Captive-Portal” anmelden zu müssen, bevor man 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 das nachfolgende Bash Script für jedes Portal maßgeschneidert werden, aber generell sollte damit einem die Anmeldung gelingen:

#!/usr/bin/env bash

captive_portal="captive-portal.domain.tld"
user_agent="Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0;  rv:11.0) like Gecko"

i=1
while true; do
  curl -k "https://${captive_portal}/swarm.cgi" --compressed \
    -H "Host: ${captive_portal}" \
    -H "User-Agent: ${user_agent}" \
    -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
    -H 'Accept-Language: de,en;q=0.5' \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    -H "Referer: https://${captive_portal}/swarm.cgi?opcode=cp_generate&orig_url=687474703a2f2f68656973652e64652f" \
    -H 'DNT: 1' \
    -H 'Connection: keep-alive' \
    -H 'Upgrade-Insecure-Requests: 1' --data 'orig_url=687474703a2f2f68656973652e64652f&opcode=cp_auth&user=guest&password=guest' >/dev/null 2>&1
  if [[ $(ping -c1 google.de 2>/dev/null) ]]; then
    echo "Yay! Got an internet connection, after interation: ${i}"
    break
  fi
  ((i++))
done

Theoretisch muss man so nur noch sein 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.

Sagen wir mal, 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:

if [[ "$Profile" =~ wifi_test_guest_.* ]]; then
  ExecUpPost='/usr/local/bin/aruba_login'
fi

Wenn das Netzwerk nun gestartet wird, wird automatisch das Aruba-Login Script ausgeführt.