Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

大活等地区不能使用 #1

Closed
Len-Jon opened this issue Nov 28, 2020 · 6 comments
Closed

大活等地区不能使用 #1

Len-Jon opened this issue Nov 28, 2020 · 6 comments

Comments

@Len-Jon
Copy link
Contributor

Len-Jon commented Nov 28, 2020

我自己写了一个浏览器使用的脚本
和你的对比发现你的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就没内味了

@Len-Jon
Copy link
Contributor Author

Len-Jon commented Nov 28, 2020

我现在回到了宿舍。。发现了大活和宿舍请求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();
    }
};

@Freedomisgood
Copy link
Owner

我现在回到了宿舍。。发现了大活和宿舍请求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相同,实际上这个不是个关键参数, 所以没有特意再补上。

@Freedomisgood
Copy link
Owner

我自己写了一个浏览器使用的脚本
和你的对比发现你的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是否登录成功。

@Len-Jon
Copy link
Contributor Author

Len-Jon commented Nov 29, 2020

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

@Freedomisgood
Copy link
Owner

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

确实, 目前这份代码校园网登不上, 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中提取参数。我修改一下

@Freedomisgood
Copy link
Owner

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants