まず、私の質問は これ に似ていると言わなければなりません
Vodafone Community Fon APを使用していますが、頻繁に切断されます。私が使用しているOSXには、これらのAPに接続するためのCaptive NetworkAssistantというツールがあります。それは仕事をしますが、残念ながらそれはユーザー名/パスワードを保持しません(私はAppleでバグレポートを開きました)ので、毎回それらを再入力する必要があります。
私はcurl、lynx、wgetをインストールしていますが、これらのツールは初心者です。そして、Macport経由で必要なものは何でも手に入れることができます。 GoogleでChromeログイン用のURLをいくつか特定しましたが、機能しませんでした。少なくともそれらを機能させることはできませんでした。ここにいくつかのサンプルがあります。
これは開始URLです:
これは実際にログインを行う必要があるURL:
http://192.168.6.1/logon?username=FON%2FVF_IT%2F <[〜#〜] user [〜#〜]>%40 <[〜#〜] domain [〜#〜]>&password =6223980fe ........ 93ea753ef4de '
USERはユーザー名、DOMAINはメールアドレスドメインです。セキュリティ上の理由から、パスワードフィールドのいくつかの数字をドットで変更しました。これは、使用するパスワードの暗号化である可能性があります。
Wget/curl/lynxで資格情報を渡そうとしましたが、リンクに「BADPASSWORD」が含まれるリターンURLが常に表示されます。
誰かがこれに対する解決策を持っていますか?
私は最終的に解決策を見つけました。接続には数回のループが必要になる場合がありますが、最終的には認証されます。 OS X El Capitan 10.11.4で動作し、以前のOS Xバージョン(必要な場合)またはLinuxの調整は簡単です。
「wget」をインストールして$ PATHに入れる必要があることに注意してください。
ログイン時にOSXユーザーエージェントとしてスクリプトを起動するには これを確認してください 。スクリプトは次のとおりです。
#!/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