Freedomisgood/NjuptCmcc

大活等地区不能使用

Len-Jon opened this issue · 6 comments

我自己写了一个浏览器使用的脚本
和你的对比发现你的wlancname是写死的,参考了你的思路,请求6.6.6.6之后可以获取重定向的地址:
图片
获取这个参数即可

function getQueryString(params, name) {
    let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    let r = params.match(reg);
    if (r != null) {
        return decodeURIComponent(r[2]);
    };
    return null;
}
//...
            config["ip"] = config["wlanuserip"] = getQueryString(url.split("?")[1], "UserIP");
            config["wlanacname"] = getQueryString(url.split("?")[1], "wlanacname");
            config["wlanacip"]= getQueryString(url.split("?")[1],"wlanacip");
//...

另外,post请求登录的时候建议不要使用异步,否则toast就没内味了

我现在回到了宿舍。。发现了大活和宿舍请求6.6.6.6的结果不同,这里给出我的解决方案。明天我去看看教学区的请求结果。

function getNetConfig() {
    var url = "http://6.6.6.6/";
    try {
        var response = http.get(url);
        if (response.statusCode === 200) {
            var url = response.request.url().toString();
            console.log(url);
            if (url === "http://6.6.6.6/") {
                //宿舍
                var html = response.body.string();
                url = html.match("location.href=\\\"(http://.*)\\\"")[0];
            }
            var config = {};
            var queryPart = url.split("?")[1];
            config["ip"] = config["wlanuserip"] = getQueryString(queryPart, "UserIP") ? getQueryString(queryPart, "UserIP") : getQueryString(queryPart, "wlanuserip");
            config["wlanacname"] = getQueryString(queryPart, "wlanacname");
            config["wlanacip"] = getQueryString(queryPart, "wlanacip");
            console.log(config);
            return config;
        } else {
            toast("未知错误");
            exit();
        }
    } catch (e) {
        console.log(e);
        toast("当前网络正常或未连接校园网");
        exit();
    }
};

我现在回到了宿舍。。发现了大活和宿舍请求6.6.6.6的结果不同,这里给出我的解决方案。明天我去看看教学区的请求结果。

function getNetConfig() {
    var url = "http://6.6.6.6/";
    try {
        var response = http.get(url);
        if (response.statusCode === 200) {
            var url = response.request.url().toString();
            console.log(url);
            if (url === "http://6.6.6.6/") {
                //宿舍
                var html = response.body.string();
                url = html.match("location.href=\\\"(http://.*)\\\"")[0];
            }
            var config = {};
            var queryPart = url.split("?")[1];
            config["ip"] = config["wlanuserip"] = getQueryString(queryPart, "UserIP") ? getQueryString(queryPart, "UserIP") : getQueryString(queryPart, "wlanuserip");
            config["wlanacname"] = getQueryString(queryPart, "wlanacname");
            config["wlanacip"] = getQueryString(queryPart, "wlanacip");
            console.log(config);
            return config;
        } else {
            toast("未知错误");
            exit();
        }
    } catch (e) {
        console.log(e);
        toast("当前网络正常或未连接校园网");
        exit();
    }
};

我去大活测试了一下, CMCC是可以使用的, 不知道不能登录的情况是在哪个运营商网络下呢?

大活和教学楼的请求结果都是3个参数:

wlanuserip: 10.163.152.206
wlanacip: 10.255.252.150
wlanacname: XL-BRAS-SR8806-X

好像是差不多的, 至于宿舍我没看过返回结果。但本人目前在大活、宿舍、图书馆、教学楼、食堂皆能正常使用。


至于在这几个ip参数的提取上,你写的getQueryString用正则根据传参name来提取确实是个不错的方法, 但是如果运营商修改了这边的参数,那么代码又需要立马相应的修改,较为麻烦。
我看了下代码params中貌似少了ip这个key,其value为wlanuserip相同,实际上这个不是个关键参数, 所以没有特意再补上。

我自己写了一个浏览器使用的脚本
和你的对比发现你的wlancname是写死的,参考了你的思路,请求6.6.6.6之后可以获取重定向的地址:
图片
获取这个参数即可

function getQueryString(params, name) {
    let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    let r = params.match(reg);
    if (r != null) {
        return decodeURIComponent(r[2]);
    };
    return null;
}
//...
            config["ip"] = config["wlanuserip"] = getQueryString(url.split("?")[1], "UserIP");
            config["wlanacname"] = getQueryString(url.split("?")[1], "wlanacname");
            config["wlanacip"]= getQueryString(url.split("?")[1],"wlanacip");
//...

另外,post请求登录的时候建议不要使用异步,否则toast就没内味了

对比教学楼和大活的wlancname参数, 我得到的结果都是XL-BRAS-SR8806-X, 但其也是通过6.6.6.6中返回的url中提取的。

<script type="text/javascript">location.href="http://p.njupt.edu.cn/a70.htm?wlanuserip=10.163.246.104&wlanacip=10.255.252.150&wlanacname=XL-BRAS-SR8806-X"</script>

至于post请求登录的时候建议不要使用异步,否则toast就没内味了, 考虑到目的是想实现成一键登录的脚本,则中间过程都可以是阻塞调用过程,最后的登录调用需要实现异步。效果就是想要点击下app后,就不用关心结果了(因为大多数情况下应该是succeed),至于toast是在回调中显示的,并不会造成影响,效果为点击app后即可以滑到其他应用上,然后等post请求完成后在任意的界面上都可以显示toast是否登录成功。

嗷,我用的是校园网,不是运营商的网络

嗷,我用的是校园网,不是运营商的网络

确实, 目前这份代码校园网登不上, njupt跟运营商网络登录6.6.6.6的结果不一样。 之前测试的是用直接用卡号如1102018000xxx00(不加后缀)去登录CMCC,会报账号费用超额。没测试NJUPT登录。


我现在回到了宿舍。。发现了大活和宿舍请求6.6.6.6的结果不同,这里给出我的解决方案。明天我去看看教学区的请求结果。

function getNetConfig() {
    var url = "http://6.6.6.6/";
    try {
        var response = http.get(url);
        if (response.statusCode === 200) {
            var url = response.request.url().toString();
            console.log(url);
            if (url === "http://6.6.6.6/") {
                //宿舍
                var html = response.body.string();
                url = html.match("location.href=\\\"(http://.*)\\\"")[0];
            }
            var config = {};
            var queryPart = url.split("?")[1];
            config["ip"] = config["wlanuserip"] = getQueryString(queryPart, "UserIP") ? getQueryString(queryPart, "UserIP") : getQueryString(queryPart, "wlanuserip");
            config["wlanacname"] = getQueryString(queryPart, "wlanacname");
            config["wlanacip"] = getQueryString(queryPart, "wlanacip");
            console.log(config);
            return config;
        } else {
            toast("未知错误");
            exit();
        }
    } catch (e) {
        console.log(e);
        toast("当前网络正常或未连接校园网");
        exit();
    }
};

可以的, 可以通过重定向的url中提取参数。我修改一下

已修复。问题归档-无法登录NJUPT: NJUPT与CMCC访问6.6.6.6返回结果不一样;解决方案:当NJUPT登录时通过6.6.6.6网址重定向url提取参数