Взаимодействие с openconnect в Java ProcessBuilderJAVA

Программисты JAVA общаются здесь
Anonymous
Взаимодействие с openconnect в Java ProcessBuilder

Сообщение Anonymous »

Я пытаюсь установить VPN-соединение с помощью ProcessBuilder на Java. Однако процесс, похоже, блокируется, и ввод моего пароля не имеет никакого эффекта.
Я не могу включить свое имя пользователя и пароль непосредственно в командную строку, поскольку они могут меняться со временем, и для из соображений безопасности иногда запрашивают второй пароль.
Любая помощь приветствуется
Минималистский образец:

Код: Выделить всё

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class VPNConnectionHandler {

public static void main(String[] args) {
String[] command = {"sudo", "openconnect", "--background", "--protocol=nc", "--user=user", "serveradress"};

try {
ProcessBuilder processBuilder = new ProcessBuilder(command);
Process process = processBuilder.start();

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 passwordPrompted = false;

while ((line = stdInput.readLine()) != null || (line = stdError.readLine()) != null) {
if (line != null) {
System.out.println(line);
if (line.toLowerCase().contains("password:")) {
System.out.println("password asked");
if (!passwordPrompted) {
System.out.print("password ");
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
String password = consoleReader.readLine();

stdOutput.write(password + "\n");
stdOutput.flush();
passwordPrompted = true;
}
}
}
if (line == null) {
break;
}
}
int exitCode = process.waitFor();
System.out.println("Process exited with code " + exitCode);

} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
Используя идею G00se, меня беспокоит то, что я не знаю, как перенаправить вывод, чтобы я мог прочитать его на Java и ввести через код:

Код: Выделить всё

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class VPNConnectionManager {

public static void main(String[] args) {
String[] command = {"sudo", "openconnect", "--background", "--protocol=nc", "--user=user", "server"};

try {
ProcessBuilder processBuilder = new ProcessBuilder(command).inheritIO();
Process process = processBuilder.start();

//password request
//scanner or what ever to I can fill in the password

int exitCode = process.waitFor();
System.out.println("Process exited with code " + exitCode);

} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
Может быть, это может мне помочь, но понятия не имею, как заставить это работать здесь:
https://github.com/agavrilov76/ExpectIt< /п>

Подробнее здесь: https://stackoverflow.com/questions/786 ... essbuilder

Вернуться в «JAVA»