在 java 中以编程方式打开 VPN 连接
Openvpn connection programmatically in java
我想开发一个与 VPN 配合使用的自动化应用程序。为此,我有 Openvpn 配置文件。但是,我不知道如何连接。 link 中提到了一个解决方案,但它对我不起作用。我在哪里以及如何输入我的 vpn 用户和密码?我在这方面的研究没有得到任何结果。
我想做的应用程序将简单地工作如下。例如,我将有 50 个 vpn,我的程序将通过分别连接每个 vpn 来连接到目标站点。但是,正如我所说,我不知道如何与 java 建立 openvpn 连接。你能帮我吗?以下是我为我想做的事情编写的代码。例如,我想通过意大利 vpn 位置连接到 google。
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 文件相同的文件夹中创建一个文本文件。对于此示例
italy.txt
.
- 将您的用户名和密码放在新行的文件中,如下所示:
username
password
- 保存文本文件。
看到 Runtime.exec
不再工作(或者它最终按预期工作,但在这种情况下没有给出结果),我们需要切换到 ProcessBuilder
.
这是一个使用问题中定义的单个 VPN 连接的示例。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
private static final String NEW_LINE = System.getProperty("line.separator");
public static void main(String[] args) {
StringBuilder result = new StringBuilder(80);
try {
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").redirectErrorStream(true);
Process process = pb.start();
try (BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())))
{
while (true)
{
String line = in.readLine();
if (line == null)
break;
result.append(line).append(NEW_LINE);
}
}
} catch (IOException e) {
}
System.out.println(result.toString());
}
}
这将打开一个 VPN 隧道,只要开始测试 class 的 terminal/program 没有被杀死,它就会保持打开状态。
注意,除非命令失败,否则不会有任何输出!在正常操作的情况下,您只会看到一个空白屏幕。
您将需要为自己实现一个业务逻辑,然后在打开新隧道之前关闭 VPN 隧道(除非您希望最终在彼此内部有 50 个隧道,这甚至可能不会工作)。
我想开发一个与 VPN 配合使用的自动化应用程序。为此,我有 Openvpn 配置文件。但是,我不知道如何连接。
我想做的应用程序将简单地工作如下。例如,我将有 50 个 vpn,我的程序将通过分别连接每个 vpn 来连接到目标站点。但是,正如我所说,我不知道如何与 java 建立 openvpn 连接。你能帮我吗?以下是我为我想做的事情编写的代码。例如,我想通过意大利 vpn 位置连接到 google。
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 文件相同的文件夹中创建一个文本文件。对于此示例
italy.txt
. - 将您的用户名和密码放在新行的文件中,如下所示:
username
password
- 保存文本文件。
看到 Runtime.exec
不再工作(或者它最终按预期工作,但在这种情况下没有给出结果),我们需要切换到 ProcessBuilder
.
这是一个使用问题中定义的单个 VPN 连接的示例。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
private static final String NEW_LINE = System.getProperty("line.separator");
public static void main(String[] args) {
StringBuilder result = new StringBuilder(80);
try {
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").redirectErrorStream(true);
Process process = pb.start();
try (BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())))
{
while (true)
{
String line = in.readLine();
if (line == null)
break;
result.append(line).append(NEW_LINE);
}
}
} catch (IOException e) {
}
System.out.println(result.toString());
}
}
这将打开一个 VPN 隧道,只要开始测试 class 的 terminal/program 没有被杀死,它就会保持打开状态。
注意,除非命令失败,否则不会有任何输出!在正常操作的情况下,您只会看到一个空白屏幕。
您将需要为自己实现一个业务逻辑,然后在打开新隧道之前关闭 VPN 隧道(除非您希望最终在彼此内部有 50 个隧道,这甚至可能不会工作)。