[英]Passing arguments to John the Ripper during session using Java ProcessBuilder
我正在尝试使用Java ProcessBuilder运行开膛手约翰。 到目前为止,一切正常。
我的问题是关于开膛手约翰的状态信息。 在Bash中运行破解会话时,您可以按任意键以显示如下状态信息:
猜测:0时间:51:06:37:19 0.00%(3)c / s:4466尝试:shs1geO-shs1god
我无法实现的是在执行过程中将“任何键”传递给流程,以便返回状态行。
我已经尝试过BufferedWriter并传递了各种字符串,行分隔符和反斜杠n。 到目前为止没有任何工作,我的write(x)只是被忽略了。 该过程正常终止并返回正常过程输出。
这是一些代码说明:
long lastStatusTime = System.nanoTime();
long interval = 5 * 1000L * 1000 * 1000;
int counter = 0;
while(!(proM.isComplete())){
if((lastStatusTime + interval) <= System.nanoTime()){
bw.write("q");
bw.flush();
line = br.readLine();
System.out.println(line);
lastStatusTime = System.nanoTime();
}
}
//Proc output
while ((line = br.readLine()) != null) {
System.out.println(line);
}
只要进程没有完成就执行第一个while,并且每5秒(或者至少应该这样做)将“ q”(或任何其他键)写入BufferedWriter。
当进程终止时,while停止,第二while捕获正常的进程输出。
不幸的是,写入操作被完全忽略,并且if语句中的readLine块被阻止,直到接收到正常终止输出的第一行为止。
BufferedWriter的构建:
OutputStream os = process.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
有谁能够帮助解决此问题? 我正在努力几个小时
预先感谢您的任何帮助
您没有向我们展示如何构造BufferedWriter。 创建流程时,您是否正在获得与流程关联的流,即InputStream,OutputStream和ErrorStreams? 您应该,然后应该尝试将新行char发送到OutputStream。
我自己,将OutputStream包装在PrintStream中,然后简单地对其调用println()
。
编辑
请注意,我不熟悉您要控制的程序。 如果不是控制台程序,则写入OutputStream将无济于事。 相反,您可能需要通过Robot类将击键发送到游戏窗口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.