iWiFi Free Hotspot

iWiFi是附近的免费WiFi热点(名称为aWiFi),连接上去后,首先短信验证,才能正常使用。隔段时间会失效,所有HTTP请求,跳转到广告页面,点击广告后,自动解除封锁。

经常性的手动操作,不是一个好的解决方案。借助于Firebug网络抓包, 对其认证过程分析,编写出一个shell脚本,帮我自动完成。

路由器运行OpenWrt系统,在shell脚本中,使用到其自带的json处理工具jsonfilter

#
# Unlock iWiFi Free Hotspot
#

touch /tmp/awifi.log

if ! curl -s -I www.iwififree.com | grep Location > /dev/null  
then  
    exit 0
fi

USER=${1:-13800000000}

PASS=$(curl -s http://js.iwififree.com/wifiPortal/onKeyLogin.jhtml -d mobile=$USER | jsonfilter -e '$.passWd')

WWAN=$(ubus call network.interface dump | jsonfilter -e '$.interface[@.interface="wwan"]["ipv4-address"][0].address')

#OK=$(curl -s http://js.iwififree.com/wifiPortal/noc/login.jhtml -d user=$USER -d passWd=$PASS -d wlanUserIp=$WWAN | jsonfilter -e '$.success')

if curl -s http://1.1.1.1/auth/index.html/u -d user=$USER -d password=$PASS >/dev/null 2>&1  
then  
    OK=true
else  
    OK=false
fi

echo "$(date +%s):$OK" >> /tmp/awifi.log

if [[ $OK == true ]]  
then  
    exit 0
else  
    exit 1
fi  

把它添加到OpenWrt计划任务中, 必要时启动cron服务:

$ crontab -l
*/5 * * * * awifi.sh 13800001234

$ pgrep -lf crond

$ /etc/init.d/cron start

$ pgrep -lf crond
12994 /usr/sbin/crond -f -c /etc/crontabs -l 8  

日志

# /tmp/awifi.log

1471648201:true  
1471648501:true  
1471650001:true  
1471650301:true  
1471650600:true  
1471650900:true  
1471651201:true  
1471651500:true  
1471652701:true  
1471669502:true  

因为在OpenWrt上使用ShadowSocks科学上网, 需要对DNS进行额外设置:

$ cat /tmp/resolv.conf.auto
# Interface wwan
nameserver 218.2.135.1  
nameserver 221.228.255.1

$ cat /etc/config/dhcp
config dnsmasq  
        option noresolv '1'
        list server '127.0.0.1#5300'
        list server '/iwififree.com/218.2.135.1'