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