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. ios的虚拟键盘与fixed移动端的bug

    //$('#search')表单input;$('.search_out')浮动元素 var u = navigator.userAgent, app = navigator.appVersion;v ...

  2. sql语句的使用;

    1.导出数据库的语句: mysqldump -u root -p shop > d:\shop.sql

  3. JavaScript(9)——call与apply

    call与apply call和apply方法可以通过函数名称来调用函数.有两个参数 call()方法与apply()方法的作用相同,他们的区别仅在于接收参数的方式不同. [call] 调用一个对象的 ...

  4. 基于PXE的Centos无人值守安装(Win平台)

    一.环境准备 PXE服务器端 1.工具 tftpd32 (下载)用于提供DHCP和ftp服务 hfs   (下载)     用于提供安装软件的http方式下载 Kickstart           ...

  5. 文本注释系统 + MarkDown

    标记系统: 笔记的要点 题材 缘起 目标 等级: 细节性 事实性 规律 法则 适用范围: 时间.地点.人物.起因.经过.结果,who what where when why how whom 6W1H ...

  6. 当引用了Properties.Settings后,如果执行的时候,出现"配置系统无法初始化" 或者 某某节点不正确

    自定义了一个 PowerConfig命名空间   PowerSettings.Settings 然后一个exe,引用了该dll,在app.cinfig里增加了配置项 <applicationSe ...

  7. VBS 自动发送邮件

    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 3 ...

  8. java 集合中将元素倒序排列

    方法一:实现Comparable接口排序package collsort.comparable; package com.cvicse.sort.comparable; public class Ca ...

  9. GsonFormat 报错

    GsonFormat原来也有bug 我是用GsonFormat来生成java bean的,但是运行起来居然报 Caused by: java.lang.NumberFormatException: E ...

  10. cornerstone 怎么使用

    Cornerstone的逻辑很清晰,界面打开后,左边栏上下分开,上面是working copies的列表,下面是REPOSITORIES的列表.常见的功能基本上跟windows一样,在上下文中可以得到 ...