Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中以编程方式打开VPN连接_Java_Vpn_Openvpn - Fatal编程技术网

在java中以编程方式打开VPN连接

在java中以编程方式打开VPN连接,java,vpn,openvpn,Java,Vpn,Openvpn,我想开发一个与VPN一起工作的自动化应用程序。为此,我有Openvpn配置文件。然而,我不知道如何连接。链接中提到了一个解决方案,但它对我不起作用。在哪里以及如何键入vpn用户和密码?我在这方面的研究没有任何结果 我想做的应用程序将按如下方式简单工作。例如,我将有50个vpn,我的程序将分别通过连接每个vpn连接到目标站点。然而,正如我所说,我不知道如何用java建立openvpn连接。你能帮我吗?下面是我为我想做的事情编写的代码。例如,我想通过意大利vpn位置连接到谷歌 import org.

我想开发一个与VPN一起工作的自动化应用程序。为此,我有Openvpn配置文件。然而,我不知道如何连接。链接中提到了一个解决方案,但它对我不起作用。在哪里以及如何键入vpn用户和密码?我在这方面的研究没有任何结果

我想做的应用程序将按如下方式简单工作。例如,我将有50个vpn,我的程序将分别通过连接每个vpn连接到目标站点。然而,正如我所说,我不知道如何用java建立openvpn连接。你能帮我吗?下面是我为我想做的事情编写的代码。例如,我想通过意大利vpn位置连接到谷歌

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.io.IOException;

public class Main {

    public static void main(String[] args) {

        Runtime runtime = Runtime.getRuntime();
        try {
            Process process = runtime.exec("C:\\Program Files\\OpenVPN\\bin\\openvpn C:\\Users\\DATABASE\\OpenVPN\\config\\italy\\italy.ovpn");
        } catch (IOException e) {
            e.printStackTrace();
        }


        System.setProperty("webdriver.gecko.driver", "C:\\geckodriver\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();

        try {
            driver.get("https://www.google.com/");
        } finally {
            driver.quit();
        }
    }
}

从命令行运行OpenVPN客户端时,需要使用单独的文本文件输入用户名和密码

  • 在与.ovpn文件相同的文件夹中创建文本文件。对于本例
    意大利语.txt
  • 将您的用户名和密码放在文件的新行上,如下所示:
  • 保存文本文件
  • 鉴于
    Runtime.exec
    不再工作(或者它最终按预期工作,但在本例中没有给出结果),我们需要切换到
    ProcessBuilder

    下面是一个使用问题中定义的单个VPN连接的示例

    导入java.io.BufferedReader;
    导入java.io.IOException;
    导入java.io.InputStreamReader;
    公开课考试{
    私有静态最终字符串NEW_LINE=System.getProperty(“LINE.separator”);
    公共静态void main(字符串[]args){
    StringBuilder结果=新的StringBuilder(80);
    试一试{
    ProcessBuilder pb=new ProcessBuilder(“C:\\Program Files\\OpenVPN\\bin\\OpenVPN.exe”、“--config”、“C:\\Users\\DATABASE\\OpenVPN\\config\\italy\\italy.ovpn”、“--auth user pass”、“C:\\Users\\DATABASE\\OpenVPN\\config\\italy\\italy.txt”)。重定向错误流(true);
    Process进程=pb.start();
    try(BufferedReader in=new BufferedReader(new InputStreamReader(process.getInputStream()))
    {
    while(true)
    {
    String line=in.readLine();
    如果(行==null)
    打破
    结果。追加(行)。追加(新行);
    }
    }
    }捕获(IOE异常){
    }
    System.out.println(result.toString());
    }
    }
    
    这将打开一个VPN隧道,只要启动测试类的终端/程序没有被杀死,它就会保持打开状态

    小心,除非命令失败,否则它不会给出任何输出!在正常操作的情况下,您只会看到一个空白屏幕。


    您将需要为自己实现一个业务逻辑,然后在打开新隧道之前关闭VPN隧道(除非您希望在彼此内部有50个隧道,这可能根本不起作用).

    它正在从命令行运行,但不处理我的代码above@idrisyagci如果第二种方法对你有效,你能试试吗?也许是不正确,不确定runtime.exec此行将如何解析和执行。您的代码在命令行上运行,但不使用java。当我运行此代码时,命令行不会打开。而且openvpn还有一个图形界面,当我使用openvpn-gui.exe编码时,它也不会打开。我从控制台检查了openvpn gui的参数,并根据它编码,但没有任何更改。@idrisyagci我已经更新了答案。这是在Windows 10上使用OpenVPN cli进行测试的,对我来说很有用。注意隧道陷阱中的隧道,因为这只会在失败或终止时关闭并返回输出。您编写的代码在理论上是有效的,但如果它是实用的,我认为openvpn存在问题。Openvpn不在控制台上工作,但在使用gui时工作。所以当我像这样编辑代码时,它工作了。“C:\\Program Files\\OpenVPN\\bin\\OpenVPN gui.exe”、“--connect”、“italy.ovpn”然而,我仍然认为您的回答是正确的。
    username
    password