繁体   English   中英

使用Java ProcessBuilder在会话期间将参数传递给开膛手约翰

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM