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. JavaScript实现本地数据简单存取以及Json数据存取

    1.判断本地存储是否可用: if(window.localStorage) { // localStorge可用 }else { // localStorge不可用 } 2.存储数据: // 获取本地 ...

  2. Error establishing socket解决办法

    jdbc配置语句为: jdbc:microsoft:sqlserver://server_name:1433 如运行程序时出现 "Error establishing socket" ...

  3. Oracle Day2 过滤、排序、单行函数

    1.过滤和排序 SQL> --查询10号部门的所有员工信息 SQL> select * from emp ; 未选定行 SQL> ed SP2: 无法创建保存文件 "afi ...

  4. JavaScript “类”定义 继承 闭包 封装

    一.Javascript “类”: 类:在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript是一 ...

  5. wordpress建站过程2——结构

    开始wordpress之前,我们需要了解,wordpress的结构和调用方式. 当一个wordpress开始之后,他会读取[当前主题]的index.php.所以一旦主题切换了,它读的就是其他主题的in ...

  6. IP子网掩码划分及设置

    IP子网掩码划分及设置 定长子网掩码: 一.子网掩码的计算 TCP/IP网间网技术产生于大型主流机环境中,它能发展到今天的规模是当初的设计者们始料未及的.网间网规模的迅速扩展对IP地址模式的威胁并不是 ...

  7. ASP.NET—013:实现带控件的弹出层(弹出框)

    http://blog.csdn.net/yysyangyangyangshan/article/details/38458169 在页面中用到弹出新页面的情况比较多的,一般来说都是使用JS方法sho ...

  8. hdu_2665_Kth number(主席树)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2665 题意:给你一个区间,让你找这个区间第K大的数 题解:主席树模版题,也可以用划分树 #includ ...

  9. PHP:class static

    简介 static关键词的一种常见用途是,当类的某个变量$var被定义为static时,那么$var就是类的变量. 这意味着:1,该类的任意一个实例对其进行修改,在该类的其它实例中访问到的是修改后的变 ...

  10. csdn的调查问卷,好多都不懂哈

    http://bss.csdn.net/cview/reg/?project_id=2412&identy_id=1538