Я пытаюсь установить VPN-соединение с помощью ProcessBuilder на Java. Однако процесс, похоже, блокируется, и ввод моего пароля не имеет никакого эффекта.
Я не могу включить свое имя пользователя и пароль непосредственно в командную строку, поскольку они могут меняться со временем, и для Из соображений безопасности меня иногда просят ввести второй пароль.
Мне известны параметры nohup и --background в Linux, но мне также не удалось заставить их работать.
Вторым шагом будет открытие формы, чтобы пользователь мог ввести пароль (как в SWT), как обрабатывать потоки?
Любая помощь приветствуется.
Вот что у меня есть на данный момент:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class OpenConnect {
public static void main(String[] args) {
try {
String command = "sudo openconnect --protocol=nc -u user adress";
Process process = Runtime.getRuntime().exec(command);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
OutputStreamWriter stdOutput = new OutputStreamWriter(process.getOutputStream());
String line;
boolean passwordPrompt1 = false;
boolean passwordPrompt2 = false;
while ((line = stdInput.readLine()) != null || (line = stdError.readLine()) != null) {
if (line != null) {
System.out.println(line);
if (line.contains("password:") && !passwordPrompt1) {
passwordPrompt1 = true;
} else if (line.contains("password:") && passwordPrompt1) {
passwordPrompt2 = true;
}
}
if (passwordPrompt1) {
System.out.print("Enter first password: ");
String password1 = new BufferedReader(new InputStreamReader(System.in)).readLine();
stdOutput.write(password1 + "\n");
stdOutput.flush();
passwordPrompt1 = false;
}
if (passwordPrompt2) {
System.out.print("Enter second password: ");
String password2 = new BufferedReader(new InputStreamReader(System.in)).readLine();
stdOutput.write(password2 + "\n");
stdOutput.flush();
passwordPrompt2 = false;
}
}
stdOutput.close();
stdInput.close();
stdError.close();
int exitCode = process.waitFor();
System.out.println("Process exited with code " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... essbuilder