Automatisches Login bei Vodafone Community WiFi (Fon) über Unix-Skript

2920
Michele Dall'Agata

Zuerst muss ich sagen, dass meine Frage zu ähnlich ist, diese

Ich verwende einen Vodafone Community Fon AP, der häufig getrennt wird. In OS X, das ich verwende, gibt es ein Tool namens Captive Network Assistant, um eine Verbindung zu diesen APs herzustellen. Es erledigt den Job, aber leider bleiben Benutzername und Passwort nicht erhalten (ich habe einen Fehlerbericht mit Apple geöffnet), so dass ich sie jedes Mal erneut eingeben muss.

Ich habe Curl, Luchs, Wget installiert, aber ich bin ein Noob mit diesen Tools. Und über Macport kann ich alles bekommen, was benötigt wird. Mit Google Chrome habe ich einige URLs für das Login identifiziert, aber keine hat funktioniert. Zumindest konnte ich sie nicht zum Laufen bringen. Hier einige Beispiele:

Dies ist die Start-URL:

https://it.portal.vodafone-wifi.com/jcp/it?res=welcome&nasid=90-55-6E-E5-E0-60&uamip=192.168.6.1&uamport=80&mac=00-19-E3-33-E0 -72 & challenge = bd551b56b4a5 ...... 26061f111ceaf & ip = 192.168.6.2 & userurl = http% 3A% 2F% 2Fwww.google.com & lang = it & LANGUAGE = it

Dies ist die URL, die eigentlich den Login ausführen soll:

http://192.168.6.1/logon?username=FON%2FVF_IT%2F < USER >% 40 < DOMAIN > & Kennwort = 6223980fe ........ 93ea753ef4de '

Wenn USER der Benutzername ist, DOMAIN die E-Mail-Adressendomäne. Ich habe aus Sicherheitsgründen einige Zahlen mit Punkten im Kennwortfeld geändert. Dies kann eine Verschlüsselung des von mir verwendeten Kennworts sein.

Ich habe versucht, die Anmeldeinformationen mit wget / curl / lynx zu übergeben, aber ich bekomme immer eine Rückkehr-URL mit einem "BAD PASSWORD" im Link.

Hat jemand eine Lösung dafür?

6

1 Antwort auf die Frage

3
Michele Dall'Agata

Ich habe schließlich die Lösung gefunden. Es kann ein paar Schleifen dauern, um sich zu verbinden, aber am Ende wird es authentifiziert. Es funktioniert unter OS X El Capitan 10.11.4, jede Anpassung an frühere OS X-Versionen (falls erforderlich) oder Linux sollte einfach sein.

Beachten Sie, dass "wget" im $ PATH installiert sein muss.

Um das Skript bei der Anmeldung als OS X-Benutzeragent zu starten, markieren Sie dies . Hier ist das Skript:

#!/bin/sh  ###################################################################### # # OS X Script to automatically reconnect to a Vodafone Community AP # when the connection drops. # # It's designed to support to be launched as an OS X login agent # logging to the console. #  # Tested only on OS X EL Capitan. It should also run on Linux without # many modifications # # Version 3.0 # Author: Michele Dall'Agata # # CHANGELOG: # # v3.0: All connection parameters are automatically retrieved from the  # Vodafone Station. # Force the use of Vodafone-WiFi APs. # Cleaner log. # v2.2: Check after restarting the WiFi if the connection is up and continue # in case. It happens quite often. # v2.1: All references to the WiFi interface now correctly use $WIFI_IF. # v2.0: Reorganized the logic. # Added section OS X specific. # Loop waiting for WiFi connecting after restarting. # Added $WIFI_IF variable for WiFi interface. # Check if it is a Vodafone Community AP. # Fixed all wget commands. # Complete although stripped logging. Now it's clearer which step # is executed. # v1.1: Restarts the WiFi interface. # v1.0: first working skeleton. Hey, it did the job! :) # ######################################################################   # $PATH should include the location where wget is installed export PATH=$PATH:/opt/local/bin  # The Vodafone Country code. This is the code for Italy COUNTRY=VF_IT  # The URL uses "%40" for "@". We do the same USERNAME=<Your username>%40<Your domain> PASSWORD=<Your Password>  # This will be visible in the Console app # Set it to /dev/null if you don't want any log LOGFILE=~/Library/Logs/Vodafone.log  # WiFi network interface. Option+Click on WiFI icon to get the one on # your Mac. Change it accordingly. WIFI_IF=en0  ###################################################################### # For reference only. They get automatically set by the script #  # MAC address of the Vodafone Station.  NASID= # MAC address of your WiFi interface.  MACADDR= # Vodafone Station (gateway) IP address. IPADDR=   ####################################################################### # Begin Script #######################################################################  # Log beginning of execution echo >> $LOGFILE echo $(date "+%d %b %H:%M:%S") Starting Vodafone Connection agent >> $LOGFILE  while [ true ] do  # If the WiFi is switched off do nothing. Otherwise check if we are connected to # a captive network  ! ifconfig $WIFI_IF | grep "RUNNING" || \ wget -qO- http://captive.apple.com/hotspot-detect.html 2>&1 | \ grep 'Success' >> /dev/null  if [ $? != 0 ]; then  echo $(date "+%d %b %H:%M:%S") >> $LOGFILE echo $(date "+%d %b %H:%M:%S") Connection is down. Reauthenticating >> $LOGFILE  # This is OS X specific if [ $(uname) == "Darwin" ]; then  # Turn WiFi off and on in case the connection has got stuck (exclamation mark on WiFi icon) echo $(date "+%d %b %H:%M:%S") Switching WiFi Off >> $LOGFILE networksetup -setairportpower $WIFI_IF off  echo $(date "+%d %b %H:%M:%S") Switching WiFi On >> $LOGFILE networksetup -setairportpower $WIFI_IF on  # We are here to reconnect to a Vodafone Community netwok.  networksetup -setairportnetwork $WIFI_IF Vodafone-WiFi  # Wait for the WiFi to connect to the router and get an IP address while ! ifconfig $WIFI_IF | grep "inet " 2>&1 > /dev/null ; do echo $(date "+%d %b %H:%M:%S") Waiting for WiFi to connect >> $LOGFILE networksetup -setairportnetwork $WIFI_IF Vodafone-WiFi sleep 1 done sleep 2  The connection may be up already. Check and in case loop again wget -qO- http://captive.apple.com/hotspot-detect.html 2>&1 | grep 'Success' > /dev/null && \ echo $(date "+%d %b %H:%M:%S") The connection is up and running\! >> $LOGFILE && \ continue  # This could be at the beginning of the loop but the connection was down  # so restarting the WiFi interface may help anyway.  # TODO: To check what happens if we use a different a different network if [ $(networksetup -getairportnetwork $WIFI_IF | awk '') != "Vodafone-WiFi" ]; then echo $(date "+%d %b %H:%M:%S") Not a Vodafone AP sleep 60 continue fi  fi # # if Captive Network Assistant app launches for some reason DNS doesn't work. # Just kill it  pgrep "Captive Network Assistant" && echo $(date "+%d %b %H:%M:%S") Killed Captive Network Assistant.. \ $(killall -9 "Captive Network Assistant" 2>&1) >> $LOGFILE  # We can get all needed parameters from the returned URL. # Grab them querying any IP number and store them in $IPPARM  IPPARM=$(wget -qO- --timeout=10 -t 1 8.8.8.8 2>&1 | grep loginVodafone | grep -i challenge | \ sed -e 's/\&/=/g' | awk -F= '{ print $7 " " $9 " " $13 " " $15}')  # Assign each value read NASID IPADDR MACADDR CHALLENGE <<< $IPPARM  # If empty either the Captive Network Assistant deamon restored the connection or something went wrong.  # Loop again  if [ -z $CHALLENGE ]; then echo $(date "+%d %b %H:%M:%S") The station returned no login URL. The connection may be up. \ >> $LOGFILE else  # Kill it again... pgrep "Captive Network Assistant" && echo $(date "+%d %b %H:%M:%S") Killed Captive Network Assistant.. \ $(killall -9 "Captive Network Assistant" 2>&1) >> $LOGFILE echo $(date "+%d %b %H:%M:%S") Connecting to AP $IPADDR with BSSID $NASID >> $LOGFILE  wget -qO- --timeout=10 --keep-session-cookies \ --post-data "chooseCountry=$COUNTRY%2F&userFake=$USERNAME$&UserName=$COUNTRY%2F$USERNAME&Password=$PASSWORD&_rememberMe=on" \ "https://it.portal.vodafone-wifi.com/jcp/it?res=login&nasid=$NASID&uamip=$IPADDR&uamport=80&mac=$MACADDR&challenge=$CHALLENGE" \ 2>&1 >> /dev/null fi  # It may need some time to fully establish the connection? sleep 3  # And kill it again... pgrep "Captive Network Assistant" && echo $(date "+%d %b %H:%M:%S") Killed Captive Network Assistant.. \ $(killall -9 "Captive Network Assistant" 2>&1) >> $LOGFILE  # Log if the connection was re-established (wget -qO- http://captive.apple.com/hotspot-detect.html 2>&1 | grep 'Success' > /dev/null && \ echo $(date "+%d %b %H:%M:%S") The connection is up and running\! >> $LOGFILE) || \ echo $(date "+%d %b %H:%M:%S") The connection is still down. Retrying >> $LOGFILE  else  # No need for more than 1s. When the connection is up it's just 1 HTTP query per loop. sleep 1 fi done