1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 开机自动拨号 断线重连 并且动态解析dns记录 java版

开机自动拨号 断线重连 并且动态解析dns记录 java版

时间:2019-09-06 21:16:07

相关推荐

开机自动拨号 断线重连 并且动态解析dns记录 java版

上一篇文章讲到:开机自动拨号与DDNS

它的实现方式是win10自带的批处理文件,但在我使用的过程中发现,这个批处理文件有些时候会失效,因为在那个批处理文件是以异常的产生才执行对应操作,但在使用的过程中,我发现有一些情况并没有被包括进去。

因此我打算用java程序实现我想要的开机自启,网络自动检测,如果没有ping通则进行断开连接,重新拨号

项目地址:/1015770492/PPPOEAndDDNS

断线重连则采用java程序实现,示例代码如下

断线重连网络代码

import java.io.BufferedReader;import java.io.InputStreamReader;import .URL;import java.nio.charset.Charset;import java.util.concurrent.TimeUnit;public class AutoPPPOE {/*** 执行CMD命令,并返回String字符串*/public static String executeCmd(String strCmd) throws Exception {Process p = Runtime.getRuntime().exec("cmd /c " + strCmd);StringBuilder sbCmd = new StringBuilder();BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), Charset.forName("GBK")));String line;while ((line = br.readLine()) != null) {sbCmd.append(line + "\n");}return sbCmd.toString();}/*** 检测网络* 能ping通则返回true,ping不通返回false*/private static boolean checkInternet() throws Exception {String comm = "ping -n 1 114.114.114.114";String s = executeCmd(comm);if (s.indexOf("TTL") >= 0) {System.out.println(s);return true;} else if (s.indexOf("请求超时") >= 0 || s.indexOf("无法访问目标网") >= 0 || s.indexOf("传输失败") >= 0) {System.err.println(s);return false;} else {return false;}}/*** 自动联网并且实现DDNS*/public static void main(String[] args) throws Exception {URL resource = AutoPPPOE.class.getClassLoader().getResource("");// String path = resource.getPath().substring(1, resource.getPath().length());// 获取路径,为了拼接成完整的路径// 因为打成jar包,开机启动时会导致路径变化,因此写死绝对路径,所以这里也需要自行修改String path = "D:/IdeaProjects/PPPOEAndDDNS/out/production/PPPOEAndDDNS";String DDNSCommand = path + "ddns.exe -c " + path + "config.json";// DDNS命令,注意修改config.json文件(注意文件路径不要有空格以及中文)System.out.println(DDNSCommand);// 下面是断线重连的代码逻辑while (true) {if (!checkInternet()) {TimeUnit.SECONDS.sleep(3);// 再等3秒,重新检测如果还没有ping通则说明网络确实没通(小心谷歌的dns服务器把你的ping作为攻击)if (!checkInternet()) {String disconnectResult = executeCmd("rasdial 13879307576 /DISCONNECT");// 断开拨号名称为 “宽带连接” 的网络连接System.out.println(disconnectResult);if (disconnectResult.indexOf("没有连接") >= 0 || disconnectResult.indexOf("命令已完成") >= 0) {String connectResult = executeCmd("rasdial 13879307576 13879307576@lan 343235");// 使用网络连接为 "宽带连接" 的网络进行拨号连接(宽带账号 和 密码 别忘了改)System.out.println(connectResult);TimeUnit.SECONDS.sleep(10);// 暂停一会,不暂停的话重新进行判断网络的时候会导致ping不通,实际已经连接成功了}}} else {executeCmd(DDNSCommand);// DDNS 执行动态解析DNS命令TimeUnit.SECONDS.sleep(10);}}}}

开机自动拨号则采用win10的基本任务完成

参考文章:《windows开机后台运行java程序》

动态DNS解析则看项目文档说明

参考 /NewFuture/DDNS 文档

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。