├── .gitignore ├── readme.md ├── package.json └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea/* 3 | 4 | 5 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # 长江大学校内网络自动连接 2 | 3 | 需要`Node`运行环境支持 4 | 5 | ## 安装 6 | ```bash 7 | git clone https://github.com/loveyu/ChangdaNetworkCheck.git 8 | or 9 | git clone git@github.com:loveyu/ChangdaNetworkCheck.git 10 | npm install 11 | ``` 12 | 13 | ## 运行 14 | ```bash 15 | node index.js 16 | ``` 17 | 18 | 或者 19 | 20 | ```bash 21 | nohup node index.js >> cd.log 2>&1 & 22 | ``` -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ChangdaNetworkCheck", 3 | "version": "1.0.0", 4 | "description": "长江大学校内网络自动连接", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "loveyu", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "encoding": "^0.1.11" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git@github.com:loveyu/ChangdaNetworkCheck.git" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var http = require("http"); 2 | var util = require('util'); 3 | var encoding = require("encoding");//编码转换工具 4 | 5 | var timeOut = 5;//s, 错误超时的检查间隔 6 | var timeSuccess = 600;//s, 成功登录的检测间隔 7 | 8 | var en = function (string) { 9 | //页面编码转换 10 | return encoding.convert(string, "utf-8", "GBK", false); 11 | }; 12 | 13 | //var proxy = '10.109.0.47:8118';//设置代理,经过测验HTTP代理没法登录 14 | var proxy = '';//代理无效 15 | 16 | /** 17 | * 生成普通页面数据 18 | * @param url 19 | * @returns {*} 20 | */ 21 | var build_url = function (url) { 22 | if (proxy === null || proxy == '') { 23 | return url; 24 | } 25 | var _p = proxy.split(':'); 26 | if (_p.length != 2) { 27 | return url; 28 | } 29 | return { 30 | host: _p[0], 31 | port: _p[1], 32 | path: url 33 | }; 34 | }; 35 | 36 | /** 37 | * 生成POST提交额数据 38 | * @param url 39 | * @param headers 40 | * @returns {{host: *, port: *, path: *, method: string, headers: *}} 41 | */ 42 | var build_post = function (url, headers) { 43 | var no_proxy = function () { 44 | return util._extend(require('url').parse(url), { 45 | method: "POST", 46 | headers: headers 47 | }); 48 | }; 49 | if (proxy === null || proxy == '') { 50 | return no_proxy(); 51 | } 52 | var _p = proxy.split(':'); 53 | if (_p.length != 2) { 54 | return no_proxy(); 55 | } 56 | return { 57 | host: _p[0], 58 | port: _p[1], 59 | path: url, 60 | method: "POST", 61 | headers: headers 62 | }; 63 | }; 64 | 65 | /** 66 | * 时间格式化工具 67 | * @param fmt 68 | * @returns {*} 69 | * @constructor 70 | * @author meizz 71 | */ 72 | Date.prototype.Format = function (fmt) { 73 | var o = { 74 | "M+": this.getMonth() + 1, //月份 75 | "d+": this.getDate(), //日 76 | "h+": this.getHours(), //小时 77 | "m+": this.getMinutes(), //分 78 | "s+": this.getSeconds(), //秒 79 | "q+": Math.floor((this.getMonth() + 3) / 3), //季度 80 | "S": this.getMilliseconds() //毫秒 81 | }; 82 | if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); 83 | for (var k in o) 84 | if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 85 | return fmt; 86 | }; 87 | 88 | /** 89 | * 日志记录方法 90 | * @param msg 91 | * @param type 92 | */ 93 | var log = function (msg, type) { 94 | type = type || 'log'; 95 | type = console.hasOwnProperty(type) ? type : 'log'; 96 | console[type]("[" + new Date().Format("yyyy-MM-dd hh:mm:ss") + "]: " + msg); 97 | }; 98 | 99 | /** 100 | * 开始发生登录表单 101 | */ 102 | var login = function () { 103 | log("begin login"); 104 | var post = "DDDDD=cjdx&upass=e0f30abb961ad32fd019aa8a4a1881ae123456781&R1=0&R2=1¶=00&0MKKey=123456"; 105 | var req = http.request(build_post("http://10.10.240.250/a70.htm", { 106 | Referer: "http://10.10.240.250/a70.htm", 107 | Cookie: "md5_login=cjdx%7Ccjdx", 108 | "Content-Type": "application/x-www-form-urlencoded", 109 | "Content-Length": post.length 110 | } 111 | ), function (res) { 112 | var data = new Buffer(0); 113 | res.on("data", function (r) { 114 | data = Buffer.concat([data, r]); 115 | }); 116 | res.on("end", function () { 117 | var r = en(data).toString(); 118 | if (r.indexOf("注 销 (Logout)") > -1) { 119 | //成功登录 120 | log("Login success."); 121 | logged(); 122 | } 123 | }); 124 | }).on("error", function (e) { 125 | log("POST a70.html, error:" + e.message, 'error'); 126 | logged(); 127 | }); 128 | req.write(post); 129 | req.end(); 130 | } 131 | ; 132 | 133 | /** 134 | * 登录后的操作 135 | */ 136 | var logged = function () { 137 | //log("Logged");//忽略成功执行的状态 138 | setTimeout(run, timeSuccess * 1000);//登录成功的检测间隔 139 | }; 140 | 141 | /** 142 | * 登录页面检查 143 | */ 144 | var loginPage = function () { 145 | http.get(build_url("http://10.10.240.250/a70.htm"), function (res) { 146 | var data = new Buffer(0); 147 | res.on("data", function (r) { 148 | data = Buffer.concat([data, r]); 149 | }); 150 | res.on("end", function () { 151 | var r = en(data).toString(); 152 | if (r.indexOf("长江大学校园网登录页面") > -1) { 153 | //Start Login Form 154 | login(); 155 | } else { 156 | //CheckError 157 | try_again(); 158 | } 159 | }); 160 | }).on('error', function (e) { 161 | log("GET a70.html, error:" + e.message, 'error'); 162 | try_again(); 163 | }); 164 | }; 165 | 166 | /** 167 | * 程序执行检查 168 | */ 169 | var run = function () { 170 | http.get(build_url("http://10.10.240.250/"), function (res) { 171 | var data = new Buffer(0); 172 | res.on("data", function (r) { 173 | data = Buffer.concat([data, r]); 174 | }); 175 | res.on("end", function () { 176 | var checkPage = en(data).toString(); 177 | if (checkPage.indexOf("value=\"注 销 (Logout)\" class=\"btn\"") > 0) { 178 | logged(); 179 | } else { 180 | loginPage(); 181 | } 182 | }); 183 | }).on('error', function (e) { 184 | //连接出错,请求登录页面 185 | log("GET /, error:" + e.message, 'error'); 186 | loginPage(); 187 | }); 188 | }; 189 | 190 | /** 191 | * 页面异常,重新执行 192 | */ 193 | var try_again = function () { 194 | log("try again"); 195 | setTimeout(run, timeOut * 1000); 196 | }; 197 | 198 | 199 | //----程序执行开始---------------------------------------- 200 | log("Start."); 201 | run(); --------------------------------------------------------------------------------