portal认证_需要captive portal方式认证WiFi的自动登录方法

0d465f05fc0c77c2120ea56170465bbe.png

学校的WiFi采用了web认证方式登录,也就是连接上WiFi后会自动弹出一个页面,地址是http://captive.apple.com/,这后面就是服务器登录页面的地址,在这个页面输入用户名和密码后就可以上网了。 在iPhone上这个页面的使用体验还算可以,因为可以自动填充用户名和密码,但是在mac上,这个页面是作为单独的一个窗口弹出来的,永远在所有页面最上方,并且点击关闭后他还会自动弹出来1~2次,同时这个页面开启时(也就是弹出后不登录也不做操作),浏览器和终端是连接不上网的,最无法接受的是,在这个页面里没有办法自动填充,只能手动输入,而且离线后登陆状态保持时间很短,每天都要一遍遍输入密码,显得非常的繁琐。所以我一直在考虑能不能简化这个过程,下面是我尝试的一种让电脑开机时自动连接认证服务器的方法。

首先这个功能是由Captive Network Assistant.app提供的,关于Apple的Captive Network Assistant 这篇文章里介绍了其工作原理:

  1. 发送一个HTTP/1.0的请求到 http://www.apple.com/library/test/success.html
  2. 接收一个回应,如果回应跟它预计的结果一致,那么认为网络是通的,就不会自动弹出页面。同时,状态栏的WIFI图标出现。流程结束。否则,进入下一步。
  3. 如果收到的回应不是它想要的那个,它就认为有CWP存在。
  4. 如果有CWP存在,iOS就会自动打开一个页面,在这个页面中再请求一次 http://www.apple.com/library/test/success.html ,这一次使用的是HTTP/1.1。
  5. 然后就可以打开Login页面了。

实现过程具体可以分成以下几步:
1. 首先要禁用Captive Network Assistant这个程序,在终端输入以下命令

sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.captive.control Active -boolean false

让开机时登录的窗口不会自动弹出,因为这个窗口存在时,终端是没有连接网络的,后续的操作也就无法正常进行。
2. 然后退出登录,在Chrome里打开登录页面,打开DevTools,选择Network选项卡,登录账户,这时会记录网络的发送接收情况,在执行post操作的文件(比如login.php)上点击右键,选择Copy as cURL,

2547d147b972e082137105d278ebd1fc.png会得到大致如下的代码:
curl 'https://abc.xyz/portal/login.php' -H 'Origin: https://abc.xyz' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.8' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2767.4 Safari/537.36' -H 'Content-Type: application/json; charset=UTF-8' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Referer: https://abc.xyz/portal/index.html' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' --data-binary 'username=1234&password=abcd' --compressed  

经过我的测试,

curl 'https://abc.xyz/portal/login.php' -H 'Connection: keep-alive' --data-binary 'username=1234&password=abcd'  

只要运行这一段就可以正常登录,所以把这一部分保存为login.sh,放在合适的地方。
3. 为了让这段脚本在开机时自动启动,要建立一个luanchd angent,关于luanchd的苹果官方的介绍 Creating Launch Daemons and Agents 说的非常清楚,也建议使用这种方式进行启动项设置。我使用了一个很好的GUI软件Lingon,设置界面如下:

1bfed1b87da26864fe7160d5cd10da1d.png代码格式非常简单/bin/sh path-to-the-script,最后启动方式选择LoadAtLogin就可以了。

其实这是一个位于/Users/yourname/Library/LuanchAgents/的plist文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>  
http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
<plist version="1.0">  
<dict>  
    <key>Disabled</key>
    <false/>
    <key>EnvironmentVariables</key>
    <dict>
        <key>PATH</key>  <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/usr/local/sbin</string>
    </dict>
    <key>Label</key>
    <string>com.arthur.wifilogin</string>
    <key>LaunchOnlyOnce</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/Users/arthurwang/Library/LaunchAgents/login.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>  
</plist> 

想进行其他详细设置也可以手写这个文件,不过至此我希望实现的功能就已经完成了,终于不用再输入超长的密码了。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值