Автоматический вход в Vodafone Community WiFi (Fon) через скрипт Unix

2888
Michele Dall'Agata

Сначала я должен сказать, что мой вопрос похож на этот

Я использую AP Vonafone Community Fon, и он часто отключается. В OS X, которую я использую, есть инструмент под названием Captive Network Assistant для подключения к этим точкам доступа. Он выполняет свою работу, но, к сожалению, не сохраняет имя пользователя / пароль (я открыл отчет об ошибках в Apple), поэтому каждый раз мне приходится вводить их снова.

У меня есть curl, lynx, wget, но я нуб с этими инструментами. И я могу получить все, что нужно через Macport. С помощью Google Chrome я идентифицировал несколько URL-адресов для входа, но ни один не работал. По крайней мере, я не мог заставить их работать. Вот несколько примеров:

Это начальный 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 & вызов = bd551b56b4a5 ...... 26061f111ceaf & ф = 192.168.6.2 и userurl = HTTP% 3A% 2F% 2Fwww.google.com & LANG = это & ​​LANGUAGE = это

Это URL, который на самом деле должен сделать вход в систему:

http://192.168.6.1/logon?username=FON%2FVF_IT%2F < USER >% 40 < DOMAIN > & пароль = 6223980fe ........ 93ea753ef4de '

Где USER - имя пользователя, DOMAIN - адрес электронной почты домена. Я изменил некоторые цифры с точками в поле пароля по соображениям безопасности, которые могут быть шифрованием пароля, который я использую.

Я попытался передать учетные данные с помощью wget / curl / lynx, но я всегда получаю обратный URL с «ПЛОХИМ ПАРОЛЕМ» в ссылке.

У кого-нибудь есть решение для этого?

6

1 ответ на вопрос

3
Michele Dall'Agata

I've eventually found the solution. It may take a couple of loops to connect, but at end end it authenticates. It works on OS X El Capitan 10.11.4, any adjustment for previous OS X versions (if needed) or Linux should be easy.

Beware that it needs to have "wget" installed and in the $PATH.

To launch the script as an OS X user agent at login check this. Here is the script:

#!/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 

Похожие вопросы