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

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

  前提:

    1、windows操作系统

    2、手工新建网络连接

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;
        }
    }
}

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

时间: 2024-10-15 08:29:01

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

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

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 1

java 继承之间方法的时候(计算出经理与员工之间公司差别)

自己检讨下:刚开始看这个的时候,我觉得挺简单的,但是让我自己写的时候我确实不会写,最大的缺点就是好高骛远,偷懒,基础不会就想着上天. 希望别的朋友别要有这样的想法,再简单的例子,如果你不亲自敲下,在揣摩下,你敢说日后让你写这样的代码,你能写出来吗,我不是天才,但我坚信勤奋可以造就天才. 首先:分析下员工与经理之间的相同点,就是员工与经理都有姓名,工资和日期(其实我感觉这个日期不必要有)这个三个属性,经理比员工多的就是经理又项目奖金 然后可以把相同的信息抽出来,实例一个Employee类 ,这个类

Java切换JDK版本时遇到的小错误。

最近学习loadrunner,学习到java vuser地方,因为LR11只支持JDK 1.6版本(且必须为32位),而我本地用的是JDK1.7版本,所以就想把JDK从1.7切换成1.6.于是开始重新配置环境变量,将JAVA_HOME从1.7指向1.6,但是奇怪的事情发生了,配置完成后,显示的依然是1.7的版本,百思不得其解,好吧百度一下:最后得知原因:因为在C:\windows\System32下,还有java.exe,这个java.exe依然是1.7的,要想变为1.6的,必须将PATH里的J

java 切换

Android L之后推荐使用JDK7编译程序,这是自然发展规律,就像是4年前编译Android 1.6需要使用JDK5一样. 多版本JDK是可以共存的,只需要使用update-alternatives工具就可以随时将它们切换.下面描述安装openjdk和oracle jdk(对不住了sun)以及切换版本的过程. 一.安装openjdk7 [plain] view plain copy $ sudo apt-get update $ sudo apt-get install openjdk-7-

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

由于项目的不同安排,之前项目开发时,使用的jdk版本为1.8,现临时接手一以前项目,需要更换jdk版本. 安装 不再赘述,去Oracle网站(https://www.oracle.com/technetwork/java/javase/downloads/index.html) 选择相应版本即可. 环境变量 具体操作不再赘述,由于以前原因,环境变量设置在JAVA_HOME里,直接修改JAVA_HOME里的路径即可. 测试验证 win+R打开windows命令窗口,输入命令:java -versi

Java多线程——volatile关键字、发布和逸出

1.volatile关键字 Java语言提供了一种稍弱的同步机制,即volatile变量.被volatile关键字修饰的变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在每次读取volatitle类型变量时总会返回最新的值,而不是从寄存器中获取. 加锁机制既然可以确保可见性又可以确保原子性,而volatile只能确保可见性. 2.发布和逸出 "发布(Publish)"一个对象指,使对象能够在当前作用域之外的代码中使用.如将指向该对象的引用保存到其他代码可以访问的地方,或者在某一

如何用java实现十道加法求和,算出答对几道,答错几道!

public static void main(String[] args) {  Scanner input=new Scanner(System.in);      //需要导入import java.util.Random;包  Random a1=new Random(); //第一伪随机数对象  Random a2=new Random(); //第二个伪随机数对象  int bool=0;//定义计算机  --第几道题  int true1=0;//定义答对了几道  int fals

请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

class Root{ static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); }}class Mid extends Root{ static{ System.out.println("Mid的静态初始化块");

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

1 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileNotFoundException; 8 import java.io.FileOutputStream; 9 import java.io.IOException; 10 import java.io.