http://www.jb51.net/article/69267.htm

这篇文章主要介绍了Java实现随意切换VPN改变上网地区,本文直接给出实例代码,需要的朋友可以参考下

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

前提:

1、windows操作系统
2、手工新建网络连接

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

Java实现随意切换VPN改变上网地区的更多相关文章

  1. java切换VPN让你像幽灵一样出现在全国各地

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

  2. fedora -- java多版本切换

    一般java开发时会下载多个版本的SDK,所以需要多个版本中进行切换 1. 设置JAVA_HOME环境变量需要打开.bashrc文件 2. 安装时使用alternatives将不同版本的java连接到 ...

  3. JAVA怎么在函数内改变传入的值

    public class TestInt { public int aa(int i) { return i+4; } public static void main(String [] args) ...

  4. PLSQL连接本地oracle或远程oracle数据库,实现随意切换

    转: PLSQL连接本地oracle或远程oracle数据库,实现随意切换 置顶 2018年01月12日 19:36:45 前方一片光明 阅读数 43542   版权声明:本文为博主原创文章,未经博主 ...

  5. ubuntu16.04同时使用 pyhton2.7和3.5,并随意切换

    ubuntu16.04中默认已经安装了python2.7和python3.5 hanli@ubuntu:/usr/bin$ ls |grep python dh_python2 dh_python3 ...

  6. vant中tab标签切换时会改变内容滚动高度

    vant的tabs标签页,标签切换时会改变内容区的滚动高度,这是因为内容区共用同一个父元素为滚动区域引起的,解决办法:在tabs的内容区域嵌套一层滚动区域,让每个内容区域使用单独的滚动元素就行了.   ...

  7. Java 国际化 语言切换

      Java国际化 我们使用java.lang.Locale来构造Java国际化的情境. java.lang.Locale代表特定的地理.政治和文化.需要Locale来执行其任务的操作叫语言环境敏感的 ...

  8. 关闭shift中英文切换 英文代码/中文注释随意切换着写。

    x 背景 写代码的时候总是意外的就切成中文了,特别是代码中大小写切换的这种情况... 例如:"public static TimeZone CurrentTime..."publi ...

  9. Mac 下 Java 多版本切换

    Step 1: 安装 jdk1.7 jdk1.8 路径如下: + /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk + /Library/Java/J ...

随机推荐

  1. 4.编写Java应用程序。首先,定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时、分、秒,一个构造方法用于对三个成员变量(时、分、秒) 进行初始化,还有一个成员方法show()用于显示时钟对象的时间。其次,再定义 一个主类——TestClass,在主类的main方法中创建多个时钟类的对象,使用这 些对象调用方法show()来显示时钟的时间。

    Clock package com.hanqi.test; public class Clock { int hour,minute,second; Clock(int h,int m,int s) ...

  2. ajax 假上传文件

    1. <form name="certForm" id="certForm" method="post" action="x ...

  3. js移动端tap事件封装

    这几天做项目,发现移动端需要触摸事件,而click肯定是不行的,于是我对tap事件封装进行了搜索,找到了一篇文章,原文地址如下:http://www.jb51.net/article/50663.ht ...

  4. 怎么取消ie浏览器body与html的间隙

    在css文件第一行定义全局样式,可以消除html标签默认间隙*{margin:0;padding:0;}

  5. html5实现滚动文字

    <div class="custom-notice"> <i class="icon-notice"></i> <ma ...

  6. 【第三篇】学习 android 事件总线androidEventbus之list数据事件的传递,发送list数据事件到另外一个Activity

    这个和普通的事件总线的发送接收一样. package com.example.mysimpleeventbus; import java.util.ArrayList; import java.uti ...

  7. 【bug】Unable to execute dex: Multiple dex files define

    This is a build path issue. Make sure your bin folder is not included in your build path. Right clic ...

  8. 50、matplotlib画图示例

    1.画饼图 import matplotlib.pyplot as plt >>> labels = 'frogs','hogs','dogs','logs' >>> ...

  9. Chapter 1 First Sight——26

    "Which ones are the Cullens?" I asked. "They don't look related…" 哪一个是卡伦,我问道,他们都 ...

  10. Adobe Flash CC 2014 下载及破解

    来源 :http://prodesigntools.com/adobe-cc-2014-direct-download-links.html 地址:http://trials3.adobe.com/A ...