V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
appstore54321
V2EX  ›  macOS

macOS 上如何为需要弹出独立 web 认证页面的 wifi 记住密码?

  •  
  •   appstore54321 · 2016-06-16 23:41:40 +08:00 · 3257 次点击
    这是一个创建于 3117 天前的主题,其中的信息可能已经有所发展或是发生改变。

    连接 wifi 后会弹出一个独立窗口,地址是 captive.apple.com ,这里不像 safari 可以自动填充密码,每次都要手动输入很累,有办法记住密码吗? 除此之外还有个想法,可以分析服务器接口,写个脚本自动发送账户密码吗?

    第 1 条附言  ·  2016-06-20 22:20:35 +08:00

    问题已经解决,详细过程参考这里 需要captive portal方式认证WiFi的自动登录方法

    8 条回复    2016-06-18 23:07:14 +08:00
    zander
        1
    zander  
       2016-06-17 00:18:12 +08:00
    https://support.apple.com/en-us/HT204497
    Turn Auto-Join off if you don't want to connect automatically. Turn Auto-Login off to skip the Welcome screen the next time you connect to the network.
    记不住是服务器设置问题,不让你自动登。
    hxsf
        2
    hxsf  
       2016-06-17 00:48:05 +08:00 via Android
    @zander 这段话是 开关 1 控制 “是否自动连接这个 wifi ”, 开关二控制 “是否自动弹出登录窗口(如果需要登录)”
    哪里来的服务器设置
    hxsf
        3
    hxsf  
       2016-06-17 00:50:50 +08:00 via Android
    当然可以写个脚本。

    关掉自动弹出的登录窗口,打开 chrome ,随便打开个 url , 302 到登录界面,打开 chrome 调试器的 network ,输入账号密码登录, devtool 里看发生了啥。然后根据这个写个 curl 命令就行。

    我之前干过,环境是锐捷的 web 认证。
    pH
        4
    pH  
       2016-06-17 08:08:05 +08:00
    @hxsf 愿闻其详啊,我这也是学校的认证,虽然是锐捷,但是好像学校封了一层, h3c 的路由
    hxsf
        5
    hxsf  
       2016-06-17 08:14:08 +08:00
    r#4 @pH 浏览器里的登录界面,填完后会发送请求,我们要做的就是用程序模拟浏览器发出的请求呀
    appstore54321
        6
    appstore54321  
    OP
       2016-06-17 13:38:21 +08:00
    @hxsf
    这是我在 chrome 里看到的 portal.js 的一部分:
    $("form#loginForm").submit(function() { // loginForm is submitted
    var username = $('#username').val(); // get username
    var password = $('#password').val(); // get password

    if (username && password) { // values are not empty
    $.ajax({
    type: "POST",
    url: "login.php", // URL of the PHP script
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    cache: false,
    // send username and password as parameters to the Perl script
    data: {username:username, password:password},
    // script call was *not* successful
    error: function(XMLHttpRequest, textStatus, errorThrown) {
    /*$('div#loginResult').text("responseText: " + XMLHttpRequest.responseText
    + ", textStatus: " + textStatus
    + ", errorThrown: " + errorThrown);*/
    $('div#loginResult').text("Internal Error, Login Failed!");
    $('div#loginResult').addClass("error");
    }
    ,succes:
    })}
    是不是这样的代码就可以实现所需的功能?
    curl -H "Content-Type: application/json" -X POST -d '{"username":"123","password":"abc"}' login.php
    如果认证页面是 https 的,这样明文发送密码也可以吧...
    hxsf
        7
    hxsf  
       2016-06-17 21:28:05 +08:00
    r#6 @appstore54321 右击 post 的那条 request ,选复制成 curl ,如图。



    看看里面有没有什么是变量,然后写到 shell 脚本里就好。

    其他语言脚本的话。照着 post 传递的数据自己写就好了。
    appstore54321
        8
    appstore54321  
    OP
       2016-06-18 23:07:14 +08:00
    @hxsf 感谢回复,这个方法很方便,学习到了。我已经把 curl 命令保存成一个 sh 文件,添加到开机启动项里就可以自动登录了,但是发现每次打开 wifi 登录界面自动弹出的情况下,浏览器和终端是连接不到网络的,没有办法登录,只有手动关闭窗口才能正常登录,而且至少要关两次,所以我搜索到了这个问题 http://apple.stackexchange.com/questions/45418/how-to-automatically-login-to-captive-portals-on-os-x (其实早就该自己 Google ,很惭愧),答案提到这个命令
    sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.captive.control Active -boolean false
    就可以禁止自动弹出登录页面了,这个问题应该算是解决了。
    还有一个问题,有可以代替手工关掉这个窗口的脚本命令吗?或者是检测这个窗口是否处于打开的状态? AppleScript 似乎可以关闭某个程序的窗口,但是这个窗口属于哪个程序吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2102 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:12 · PVG 09:12 · LAX 17:12 · JFK 20:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.