diff --git a/pom.xml b/pom.xml index 0751a17..b51bf4c 100644 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,16 @@ mybatis-spring-boot-starter 3.0.2 + + com.squareup.okhttp3 + okhttp + 4.9.0 + + + com.fasterxml.jackson.core + jackson-databind + + org.springframework.boot diff --git a/src/main/java/com/xiaolfeng/dormstar/DormStarApplication.java b/src/main/java/com/xiaolfeng/dormstar/DormStarApplication.java index b494244..990b773 100644 --- a/src/main/java/com/xiaolfeng/dormstar/DormStarApplication.java +++ b/src/main/java/com/xiaolfeng/dormstar/DormStarApplication.java @@ -2,12 +2,14 @@ package com.xiaolfeng.dormstar; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; /** * @author 筱锋xiao_lfeng * @version v1.0.0 */ @SpringBootApplication +@EnableScheduling public class DormStarApplication { public static void main(String[] args) { SpringApplication.run(DormStarApplication.class, args); diff --git a/src/main/java/com/xiaolfeng/dormstar/controllers/view/IndexController.java b/src/main/java/com/xiaolfeng/dormstar/controllers/view/IndexController.java index 566cc3c..d7dab4c 100644 --- a/src/main/java/com/xiaolfeng/dormstar/controllers/view/IndexController.java +++ b/src/main/java/com/xiaolfeng/dormstar/controllers/view/IndexController.java @@ -1,6 +1,7 @@ package com.xiaolfeng.dormstar.controllers.view; import com.xiaolfeng.dormstar.cache.RamDataCache; +import com.xiaolfeng.dormstar.services.GetWxxyNetworkInfo; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Controller; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMapping; @RequiredArgsConstructor public class IndexController { private final RamDataCache ramDataCache; + private final GetWxxyNetworkInfo getWxxyNetworkInfo; @GetMapping("/") public String getIndex(@NotNull Model model) { @@ -27,6 +29,8 @@ public class IndexController { public String getCenter(@NotNull Model model) { model.addAttribute("title", ramDataCache.name); model.addAttribute("version", ramDataCache.version); + getWxxyNetworkInfo.getWxxyNetWork(model); + model.addAttribute("build"); return "center"; } diff --git a/src/main/java/com/xiaolfeng/dormstar/entities/DrcomEntity.java b/src/main/java/com/xiaolfeng/dormstar/entities/DrcomEntity.java new file mode 100644 index 0000000..6535dfc --- /dev/null +++ b/src/main/java/com/xiaolfeng/dormstar/entities/DrcomEntity.java @@ -0,0 +1,23 @@ +package com.xiaolfeng.dormstar.entities; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 绑定信息 + * + * @author 筱锋xiao_lfeng + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class DrcomEntity { + @JsonProperty("time") + private int time; + @JsonProperty("v46ip") + private String ipv4; + @JsonProperty("ss6") + private String loginIp; + @JsonProperty("uid") + private String uid; +} diff --git a/src/main/java/com/xiaolfeng/dormstar/entities/DrcomLoginEntity.java b/src/main/java/com/xiaolfeng/dormstar/entities/DrcomLoginEntity.java new file mode 100644 index 0000000..6bea99a --- /dev/null +++ b/src/main/java/com/xiaolfeng/dormstar/entities/DrcomLoginEntity.java @@ -0,0 +1,19 @@ +package com.xiaolfeng.dormstar.entities; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 登录信息 + * + * @author 筱锋xiao_lfeng + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class DrcomLoginEntity { + @JsonProperty("result") + private int result; + @JsonProperty("msg") + private String message; +} diff --git a/src/main/java/com/xiaolfeng/dormstar/services/DayScheduleService.java b/src/main/java/com/xiaolfeng/dormstar/services/DayScheduleService.java new file mode 100644 index 0000000..d7fb2c3 --- /dev/null +++ b/src/main/java/com/xiaolfeng/dormstar/services/DayScheduleService.java @@ -0,0 +1,157 @@ +package com.xiaolfeng.dormstar.services; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.xiaolfeng.dormstar.entities.DrcomEntity; +import com.xiaolfeng.dormstar.entities.DrcomLoginEntity; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.time.LocalTime; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author 筱锋xiao_lfeng + * @version v1.0.0 + */ +@Component +public class DayScheduleService { + private final Request login; + private final Request loginBody; + + public DayScheduleService() { + login = new Request.Builder() + .url("http://10.1.99.100:801/eportal/portal/login?callback=dr1003&login_method=1&user_account=,0,22344233@cmcc&user_password=061823zcw&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=8101&lang=zh") + .build(); + loginBody = new Request.Builder() + .url("http://10.1.99.100/drcom/chkstatus?callback=dr1002&jsVersion=4.X&v=1117&lang=zh") + .build(); + } + + @Scheduled(cron = "0 0 7 * * ?") + public void morningAutoLogin() { + OkHttpClient client = new OkHttpClient(); + // 检查是否可以访问内网 + try (Response ignored = client.newCall(loginBody).execute()) { + // 处理登录 + try (Response responseLogin = client.newCall(login).execute()) { + if (responseLogin.body() != null) { + String getData = responseLogin.body().string(); + Matcher matcher = Pattern.compile("dr1003\\(([^)]+)\\)").matcher(getData); + String data = null; + if (matcher.find()) { + data = matcher.group(1); + } + ObjectMapper objectMapper = new ObjectMapper(); + DrcomLoginEntity drocm = objectMapper.readValue(data, DrcomLoginEntity.class); + System.out.println("[INFO] " + drocm.getMessage()); + } + } catch (IOException ignoredSecond) { + System.out.println("[WARNING] 无法登录"); + } + } catch (IOException ignoredFirst) { + System.out.println("[WARNING] 不处于校园网内,请手动管理网络"); + } + } + + @Scheduled(fixedDelay = 60000) + public void executePeriodicTask() { + LocalTime localTime = LocalTime.now(); + if (localTime.isAfter(LocalTime.of(7, 0)) && localTime.isBefore(LocalTime.of(23, 0))) { + OkHttpClient client = new OkHttpClient(); + Request request = new Request.Builder() + .url("https://suggestion.baidu.com/su?wd=201%E4%BA%AC%E6%B5%B7%E5%B8%82%E5%AE%BF%E8%88%8D") + .build(); + + try (Response response = client.newCall(request).execute()) { + // 检查是否可以获取外网内容 + if (response.body() != null) { + System.out.println("[INFO] 已登录"); + } + } catch (IOException ignoreFirst) { + // 检查是否可以访问内网 + try (Response ignored = client.newCall(loginBody).execute()) { + // 处理登录 + try (Response responseLogin = client.newCall(login).execute()) { + if (responseLogin.body() != null) { + String getData = responseLogin.body().string(); + Matcher matcher = Pattern.compile("dr1003\\(([^)]+)\\)").matcher(getData); + String data = null; + if (matcher.find()) { + data = matcher.group(1); + } + ObjectMapper objectMapper = new ObjectMapper(); + DrcomLoginEntity drocm = objectMapper.readValue(data, DrcomLoginEntity.class); + System.out.println("[INFO] " + drocm.getMessage()); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } catch (IOException ignoreSecond) { + System.out.println("[WARNING] 不处于校园网内,请手动管理网络"); + } + } + } + } + + @Scheduled(cron = "0 0 23 * * 0-4") + @Scheduled(cron = "0 30 23 * * 5-6") + public void theDayChangeNetwork() { + OkHttpClient client = new OkHttpClient(); + // 获取当前登录信息 + try (Response response = client.newCall(loginBody).execute()) { + // 处理信息 + if (response.body() != null) { + // 获取数据 + String getData = response.body().string(); + Matcher matcher = Pattern.compile("dr1002\\(([^)]+)\\)").matcher(getData); + String data = null; + if (matcher.find()) { + data = matcher.group(1); + } + DrcomEntity drcom = new ObjectMapper().readValue(data, DrcomEntity.class); + Matcher getUser = Pattern.compile("^[0-9]+").matcher(drcom.getUid()); + String user = getUser.group(1); + // 解除当前登录 + Request removeLogin = new Request.Builder() + .url("http://10.1.99.100:801/eportal/portal/mac/unbind?callback=dr1002&user_account=" + user + "&jsVersion=4.1.3&v=1721&lang=zh") + .build(); + try (Response responseRemoveLogin = client.newCall(removeLogin).execute()) { + if (responseRemoveLogin.body() != null) { + // 处理无锡学院登录 + Request loginDefault = new Request.Builder() + .url("http://10.1.99.100:801/eportal/portal/login?callback=dr1003&login_method=1&user_account=,0,22344233&user_password=061823zcw&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=6795&lang=zh") + .build(); + try (Response responseDefault = client.newCall(loginDefault).execute()) { + if (responseDefault.body() != null) { + String getDataDefault = responseDefault.body().string(); + Matcher matcherDefault = Pattern.compile("dr1003\\(([^)]+)\\)").matcher(getDataDefault); + String dataDefault = null; + if (matcher.find()) { + dataDefault = matcherDefault.group(1); + } + ObjectMapper objectMapper = new ObjectMapper(); + DrcomLoginEntity drocm = objectMapper.readValue(dataDefault, DrcomLoginEntity.class); + System.out.println("[INFO] " + drocm.getMessage()); + } + } catch (IOException ignored) { + System.out.println("[WARNING] 不处于校园网内,请手动管理网络"); + } + } else { + System.out.println("[ERROR] 对象服务器异常"); + } + } catch (IOException ignored) { + System.out.println("[WARNING] 不处于校园网内,请手动管理网络"); + } + } else { + System.out.println("[ERROR] 对象服务器异常"); + } + } catch (IOException ignored) { + System.out.println("[WARNING] 不处于校园网内,请手动管理网络"); + } + } +} diff --git a/src/main/java/com/xiaolfeng/dormstar/services/GetWxxyNetworkInfo.java b/src/main/java/com/xiaolfeng/dormstar/services/GetWxxyNetworkInfo.java index 1274fee..be40fa4 100644 --- a/src/main/java/com/xiaolfeng/dormstar/services/GetWxxyNetworkInfo.java +++ b/src/main/java/com/xiaolfeng/dormstar/services/GetWxxyNetworkInfo.java @@ -1,6 +1,17 @@ package com.xiaolfeng.dormstar.services; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.xiaolfeng.dormstar.entities.DrcomEntity; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import org.apache.ibatis.jdbc.Null; import org.springframework.stereotype.Service; +import org.springframework.ui.Model; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author 筱锋xiao_lfeng @@ -8,7 +19,52 @@ import org.springframework.stereotype.Service; @Service public class GetWxxyNetworkInfo { - public String getWxxyNetWork() { - return null; + public void getWxxyNetWork(Model model) { + OkHttpClient client = new OkHttpClient(); + Request request = new Request.Builder() + .url("http://10.1.99.100/drcom/chkstatus?callback=dr1002&jsVersion=4.X&v=1117&lang=zh") + .build(); + + try (Response response = client.newCall(request).execute()) { + if (response.body() != null) { + String getData = response.body().string(); + Matcher matcher = Pattern.compile("dr1002\\(([^)]+)\\)").matcher(getData); + String dr1002 = null; + if (matcher.find()) { + dr1002 = matcher.group(1); + } + ObjectMapper objectMapper = new ObjectMapper(); + DrcomEntity drocm = objectMapper.readValue(dr1002, DrcomEntity.class); + model.addAttribute("getIpv4", drocm.getIpv4()); + model.addAttribute("getLoginIp", drocm.getLoginIp()); + model.addAttribute("getUid", drocm.getUid()); + if (drocm.getUid() != null) { + Matcher getStudentNumber = Pattern.compile("^[0-9]+").matcher(drocm.getUid()); + Matcher getServiceProvider = Pattern.compile("[A-Za-z]+$").matcher(drocm.getUid()); + if (getStudentNumber.find()) { + model.addAttribute("getStudentNumber", getStudentNumber.group(0)); + } + if (getServiceProvider.find()) { + if ("cmcc".equals(getServiceProvider.group(0))) { + model.addAttribute("getServiceProvider", "移动节点"); + } else if ("telecom".equals(getServiceProvider.group(0))) { + model.addAttribute("getServiceProvider", "电信节点"); + } else if ("uniom".equals(getServiceProvider.group(0))) { + model.addAttribute("getServiceProvider", "联通节点"); + } else { + model.addAttribute("getServiceProvider", "无锡学院"); + } + } else { + model.addAttribute("getServiceProvider", "未知"); + } + model.addAttribute("getLogin", "已登录"); + } else { + model.addAttribute("getLogin", "未登录"); + System.out.println("未登录"); + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index dcbead2..232eb2d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 8080 + port: 8000 mybatis: configuration: map-underscore-to-camel-case: true diff --git a/src/main/resources/templates/center.html b/src/main/resources/templates/center.html index 68b70d3..4af4317 100644 --- a/src/main/resources/templates/center.html +++ b/src/main/resources/templates/center.html @@ -25,7 +25,7 @@
Your Company + src="">
@@ -52,16 +52,21 @@
-
-
- -
Noteworthy - technology - acquisitions 2021
-

Here are the biggest enterprise technology - acquisitions of 2021 so far, in reverse chronological order.

-
+
+
+
+
宿舍网络状态
+
获取IP地址:
+
是否登录:
+
登陆账号:
+
节点信息:
+
+
+
+
+
登录日志
+ +