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

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

项目地址:https://github.com/1015770492/PPPOEAndDDNS

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

断线重连网络代码

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.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解析则看项目文档说明

参考 https://github.com/NewFuture/DDNS 文档

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

  1. Windows下使用任务计划程序实现宽带开机自动拨号和断线自动重连

    由于学校网络改造,我们告别了客户端登录的锐捷,迎来了PPPoE拨号的深澜,本以为新的认证计费系统能带来更好的体验,结果偏偏在很基础的功能上出问题,诸如macOS下拨号没有IPv6地址.高峰期卡成狗.不 ...

  2. 如何让电脑开机自动拨号联网

    用ADSL拨号上网的朋友,是不是觉得每次都要去点击连接图标才能上网很麻烦.其实可以通过设置实现电脑开机自动拨号联网.本文分为以下几个部分:最简单方法.最常用方法.使用宽带路由器自动上网方法.windo ...

  3. Windows系统设置宽带连接开机自动拨号的方法

    一开始有这个需求是实验室有一台服务器,我寒假回家可能需要操作(没办法,就是这么认真,放假也要科研),这样的话为了防止实验室断电或断网,我需要保证断网重拨和重启重拨.这个地方需要注意一点服务器断电自动重 ...

  4. 教你如何让电脑的ADSL宽带连接开机自动拨号

    教你如何让电脑的ADSL宽带连接开机自动拨号. 事情是这样的,因为黯神伤情很不习惯ADSL每次开机都要自己拨号. 那么能不能让ADSL开机就自己拨号呢?答案当然是肯定的.(以下内容高手跳过) 黯神伤情 ...

  5. 设置开机自动 .拨号上网。

    (1)设置开机自动拨号上网 1.让系统记住用户名和密码: 双击桌面刚创建的ADSL快捷方式,输入用户名和密码(WIN XP在创建拨号连接时已完成该步骤),勾选"保存密码",单击&q ...

  6. ADSL开机自动拨号

    先双击打开宽带连接---属性---选项---去掉   "提示名称.密码证书等"   前面的勾即 将以下代码复制.粘贴到记事本另存为" 开机自动拨号.reg" 后 ...

  7. 利用.pbk来实现ADSL开机自动拨号

     利用.pbk来实现ADSL开机自动拨号  当你新建拨号连接或者VPN连接之后在你的电脑里会创建一个.pbk的文件 这个.pbk的文件可以说是一个集合,将你电脑的所有连接都保存在一起. 同时你还可以将 ...

  8. Windows 7 开机自动拨号 常用的五种方

    以下均为转载,感谢原作者的无私奉献,写的如此的详细,相信Windows7的友友有很大的帮助哦! (这里推荐大家用第一种,很方便,很简单哦!) 原文: 今晚突然不太喜欢现在的拨号方法,特上网寻找各种WI ...

  9. Windows 7 开机自动拨号 常用的五种方法

    windows 7开机自动拨号各方法整理 ,以下均为转载,感谢原作者的无私奉献,写的如此的详细,相信Windows7的友友有很大的帮助哦! (这里推荐大家用第一种,很方便,很简单哦!) 原文: 今晚突 ...

最新文章

  1. Axis2 webservice入门--Webservice的发布与调用
  2. japid-controller自动绑定的数据类型
  3. 安装好android的adt以后重启eclipse,但是没有创建AVD的图标
  4. 在网上常听到说CEO CTO CIO CGO COO CFO什么什么..现在了解了一下..呵呵
  5. 开发源码常用网站参考
  6. 在product search result里点击某个product出现白屏问题
  7. Windows微秒级定时方法
  8. Promise(异步处理-实现)
  9. Python实现小球游戏
  10. Oracle 9i for RedHat Linux 的安装
  11. Python基础——文件拷贝(从手动实现到shutil的使用)
  12. 苹果Mac最好用的FTP客户端:Transmit
  13. 10010序列检测器的三段式状态机实现(verilog)
  14. VS2017使用教程(使用VS2017编写C语言程序)
  15. 快狗打车,打车新平台,这个猛!
  16. ubuntu IPV6及作为路由分配【笔记】
  17. 无线充qi2来了,快来了解下~
  18. 在Ubuntu 18中安装Pycharm及创建Pycharm快捷方式
  19. iOS 正则表达式判断手机号,邮箱等
  20. STM32H750VBT6 DMA驱动TFT-LCD(ST7789V)

热门文章

  1. 钢琴曲欣赏[Beyond]
  2. 并网模式微电网逆变器VSG控制_SIMULINK_模型搭建详解
  3. 虚拟同步发电机离网并网无缝切换MATLAB仿真模型#VSG
  4. RecurDyn仿真笔记
  5. 信奥赛和少儿编程的区别
  6. 智合同丨什么是智能合同?
  7. 《富兰克林传》的一些启示
  8. 非参数估计-parzen窗估计和k近邻估计
  9. salmon的报错解决error while loading shared libraries: libboost_iostreams.so.1.60.0
  10. 【gstreamer中appsink和appsrc操作数据转换cv::Mat】参考文献