Tự động đăng nhập vào Vodafone Community WiFi (Fon) thông qua tập lệnh Unix


6

Đầu tiên tôi phải nói rằng câu hỏi của tôi tương tự như câu hỏi này

Tôi đang sử dụng Vodafone Community Fon AP và nó thường bị ngắt kết nối. Trong OS X mà tôi đang sử dụng, có một công cụ gọi là Captive Network Assistant để kết nối với các AP này. Nó thực hiện công việc nhưng không may là nó không giữ tên người dùng / mật khẩu (tôi đã mở một báo cáo lỗi với Apple), vì vậy mỗi lần tôi phải gõ lại chúng.

Tôi đã cài đặt curl, lynx, wget nhưng tôi không biết gì về những công cụ đó. Và tôi có thể nhận được bất cứ điều gì cần thiết thông qua Macport. Với Google Chrome, tôi đã xác định được một vài URL để đăng nhập nhưng không có URL nào hoạt động. Ít nhất tôi không thể làm cho họ làm việc. Dưới đây là một số mẫu:

Đây là URL bắt đầu:

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 & thử thách = bd551b56b4a5 ...... 26061f111ceaf & ip = 192.168.6.2 & userurl = http% 3A% 2F% 2Fwww.google.com & lang = it & LANGUAGE = it

Đây là URL mà thực sự nên đăng nhập:

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

Trong đó USER là tên người dùng, DOMAIN tên miền địa chỉ email. Tôi đã thay đổi một số số có dấu chấm trong trường mật khẩu vì lý do bảo mật, đó có thể là mã hóa mật khẩu tôi sử dụng.

Tôi đã thử chuyển thông tin đăng nhập bằng wget / curl / lynx nhưng tôi luôn nhận được URL trả về với "BAD PASSWORD" trong liên kết.

Có ai có một giải pháp cho điều này?

Câu trả lời:


3

Cuối cùng tôi đã tìm thấy giải pháp. Nó có thể mất một vài vòng để kết nối, nhưng cuối cùng nó xác thực. Nó hoạt động trên OS X El Capitan 10.11.4, mọi điều chỉnh cho các phiên bản OS X trước đó (nếu cần) hoặc Linux đều dễ dàng.

Coi chừng rằng nó cần phải được cài đặt "wget" và trong $ PATH.

Để khởi chạy tập lệnh dưới dạng tác nhân người dùng OS X khi đăng nhập, hãy kiểm tra điều này . Đây là kịch bản:

#!/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 '{print $NF}') != "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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.