使用Java ProcessBuilder在会话期间将参数传递给John the Ripper

时间:2014-04-28 00:51:57

标签: java processbuilder

我正在尝试使用Java ProcessBuilder运行John the Ripper。 到目前为止一切正常。

我的问题是关于John the Ripper Status信息。当一个破解会话在Bash中运行时,你可以按任意键来显示如下的状态信息:

猜测:0时间:51:06:37:19 0.00%(3)c / s:4466尝试:shs1geO - shs1god

我无法实现的是在执行期间将“任意密钥”传递给Process,以便返回状态行。

我尝试过BufferedWriter并传递了各种字符串,行分隔符和反斜杠n。到目前为止,没有任何工作,我的写(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。

当Process终止时,while停止,第二个while捕获正常的过程输出。

不幸的是,写操作被完全忽略,if语句中的readLine阻塞,直到收到正常终止输出的第一行。

构建BufferedWriter:

        OutputStream os = process.getOutputStream();
        OutputStreamWriter osw = new OutputStreamWriter(os);
        BufferedWriter bw = new BufferedWriter(osw);

有人能帮忙解决这个问题吗?我想要几个小时

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

您没有告诉我们您如何构建BufferedWriter。在创建Process时,是否获得了与进程关联的Streams,即InputStream,OutputStream和ErrorStreams?您应该,然后您应该尝试将新行char发送到OutputStream。

我自己,我将OutputStream包装在PrintStream中,只需在其上调用println()


修改
请注意,我不熟悉您尝试控制的程序。如果它不是控制台程序,那么写入OutputStream将无济于事。相反,你需要将键击发送到游戏的窗口,也许是通过Robot类。