在很多情况下,有些网络应用的需求会要求模拟人在不同地区访问网站和应用。因而切换IP也就应运而生了,然而IP作为一种稀缺资源不是随便可以获得的。因而会想到应用程序切换VPN来达到全国不同地区访问网络。因而有了以下方案。

  前提:

    1、windows操作系统

    2、手工新建网络连接

  1. package com.selenium.test;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6.  
  7. public class ConnectNetWork {
  8.  
  9. /**
  10. * @param args
  11. * @throws Exception
  12. */
  13. public static void main(String[] args) throws Exception {
  14. // TODO Auto-generated method stub
  15. connAdsl("VPN_Test","test", "test");
  16. Thread.sleep(1000);
  17. cutAdsl("VPN_Test");
  18. Thread.sleep(1000);
  19. }
  20.  
  21. /**
  22. * 执行CMD命令,并返回String字符串
  23. */
  24. public static String executeCmd(String strCmd) throws Exception {
  25. System.out.println("cmd /c " + strCmd);
  26. Process p = Runtime.getRuntime().exec("cmd /c " + strCmd);
  27. StringBuilder sbCmd = new StringBuilder();
  28. //这里很重要,设置GB2312解决乱码!!!
  29. //如果程序默认编码就是GB2312,可以不写
  30. //我NetBeans默认用UTF8
  31. BufferedReader br = new BufferedReader(new InputStreamReader(p
  32. .getInputStream(), "GB2312"));
  33. String line;
  34. while ((line = br.readLine()) != null) {
  35. sbCmd.append(line + "\n");
  36. }
  37. return sbCmd.toString();
  38.  
  39. /*
  40. //如果整个过程换成这样,就更清楚了。getInputStream是获取最原始的字节流,
  41. //cmd返回的是以GB2312双字节编码的字节流
  42. InputStream in = p.getInputStream();
  43. byte[] b = new byte[2000];
  44. in.read(b);
  45. String msg = new String(b, "GB2312");
  46. //用GB2312解释这堆字节,就可以组装成一个正常的String了
  47. //如果上边不写GB2312,等于这里用UTF8组装,结果一样
  48. return msg;
  49. */
  50. }
  51.  
  52. /**
  53. * 连接ADSL
  54. * 语法: rasdial 连接名称 username password
  55. * 实例: rasdial 我的宽带 hzhz1234567890 dfdfdfdfdf
  56. */
  57. public static boolean connAdsl(String adslTitle, String adslName, String adslPass) throws Exception {
  58. System.out.println("正在建立连接.");
  59. String adslCmd = "rasdial " + adslTitle + " " + adslName + " " + adslPass;
  60. String tempCmd = executeCmd(adslCmd);
  61. //String tempCmd = executeCmd("ping www.youku.com");
  62.  
  63. // 判断是否连接成功
  64. if (tempCmd.indexOf("已连接") > 0) {
  65. System.out.println("已成功建立连接.");
  66. return true;
  67. } else {
  68. System.err.println(tempCmd);
  69. System.err.println("建立连接失败");
  70. return false;
  71. }
  72. }
  73.  
  74. /**
  75. * 断开ADSL
  76. */
  77. public static boolean cutAdsl(String adslTitle) throws Exception {
  78. String cutAdsl = "rasdial " + adslTitle + " /disconnect";
  79. String result = executeCmd(cutAdsl);
  80.  
  81. if (result.indexOf("没有连接")!=-1){
  82. System.err.println(adslTitle + "连接不存在!");
  83. return false;
  84. } else {
  85. System.out.println("连接已断开");
  86. return true;
  87. }
  88. }
  89. }

  说明:上述代码片段其实是调用了windows的rasdial命令。所以主要的功劳还是rasdial,java只是个外壳。又一次曲线救国。大家有更好的方法吗?有更好的方法的话请告诉我,^_^...

java切换VPN让你像幽灵一样出现在全国各地的更多相关文章

  1. Java实现随意切换VPN改变上网地区

    http://www.jb51.net/article/69267.htm 这篇文章主要介绍了Java实现随意切换VPN改变上网地区,本文直接给出实例代码,需要的朋友可以参考下 在很多情况下,有些网络 ...

  2. [大数据从入门到放弃系列教程]在IDEA的Java项目里,配置并加入Scala,写出并运行scala的hello world

    [大数据从入门到放弃系列教程]在IDEA的Java项目里,配置并加入Scala,写出并运行scala的hello world 原文链接:http://www.cnblogs.com/blog5277/ ...

  3. java 切换

    Android L之后推荐使用JDK7编译程序,这是自然发展规律,就像是4年前编译Android 1.6需要使用JDK5一样. 多版本JDK是可以共存的,只需要使用update-alternative ...

  4. selenium2+java切换窗口

    package exercises; import java.util.ArrayList; import java.util.List; import java.util.Set; import o ...

  5. java切换jdk版本

    目的:将jdk1.7切换为jdk1.6 1.原本安装了jdk1.7,环境变量也是配置的1.7相关路径,在cmd下输入[java -version]后,显示 [ C:\Users\Administrat ...

  6. Java切换JDK版本的方法及技巧

    由于项目的不同安排,之前项目开发时,使用的jdk版本为1.8,现临时接手一以前项目,需要更换jdk版本. 安装 不再赘述,去Oracle网站(https://www.oracle.com/techne ...

  7. Java中,异常的处理及抛出

    首先我们需要知道什么是异常? 常通常指,你的代码可能在编译时没有错误,可是运行时会出现异常.比如常见的空指针异常.也可能是程序可能出现无法预料的异常,比如你要从一个文件读信息,可这个文件不存在,程序无 ...

  8. java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  9. 【POI xls Java map】使用POI处理xls 抽取出异常信息 --java1.8Group by ---map迭代 -- 设置单元格高度

    代码处理逻辑: 代码流程: 1.首先需要创建一个实体 用来存储 相关信息 package com.sxd.test.unusualName; public class NameEntity { pri ...

随机推荐

  1. Spring--Spring容器

    在使用Spring所提供的各种丰富而神奇的功能之前,必须要在Spring IoC容器中装配好Bean,并建立Bean和Bean之间的关联关系. Spring提供了多种配置方式来实现Bean的装配.但在 ...

  2. java批量生成excel代码分享

    package com.test.util; /** * @author ocq * */ import java.io.FileOutputStream; import java.io.IOExce ...

  3. Spring之FactoryBean

    首先要分辨BeanFactory 与 FactoryBean的区别, 两个名字很像,所以容易搞混 BeanFactory: 以Factory结尾,表示它是一个工厂类,是用于管理Bean的一个工厂 Fa ...

  4. js字符串转成数字的三种方法

    js读取的html代码中获得的值 ,统统是以字符串的形式呈现的,为了方便我们后面对数据的操作,有时候我们有必要进行转换一下. 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转 ...

  5. 用jquery写循环播放div -2

    前面所说的class html元素标签的写法也要有层次性, 这个层次性其实也就是常说的 css类写法要有一个"命名空间, 名字空间" "namespace" 在 ...

  6. Java 中浮点数---------BigDecimal和double(初探)

    为什么要使用 bigdecimal? 借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了 ...

  7. 工具介绍 - NimbleText

    非常实用的工具, 即使不是程序员也有必要掌握这个简单的小工具. 这个工具有桌面版和在线版两个版本. 桌面版地址: http://nimbletext.com/ 在线版地址: http://nimble ...

  8. IIS服务器运行一段时间后卡死,且无法打开网站(IIS管理无响应,必须重启电脑)

    问题描述: 公司希望使用IIS配合网站显示一些订单跟进的情况并展示出来,所以我们在一台演示的Win7 Pro电脑上安装了IIS,但使用了一段时间后发现每过几天页面就无法正常访问了,而且打开IIS管理器 ...

  9. 如何利用cookie来保存用户登录账号

    众所周知,cookie在网页编写中不接或缺,今天就谈谈如何利用cookie技术来保存用户登录账号 1.首先是否保存用户登录账号当然是用户自行决定,所以我们需要在用户登录界面设置一个复选框,以此取得用户 ...

  10. CSS vertical-align 属性

    定义和用法 vertical-align 属性设置元素的垂直对齐方式.该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐