ProcessBuilderから実行されているnmapプロセスに入力を送信しようとしていますが、実行中のnmapプロセスからの応答が表示されません。nmapソースコードを調べたところ、TTYからのランタイムインタラクティブ入力を受け入れるため、/bin/bash -c
に直接加えてで実行してみました/usr/bin/nmap
。
この回答を使用して、nmapからstdoutを読み取る別のスレッドがあります。これが私のコードです:
ProcessBuilder builder = new ProcessBuilder("/usr/bin/nmap", "-v", "-sT", "192.168.1.1-40");
//ProcessBuilder builder = new ProcessBuilder("/bin/bash", "-c", "\"\"/usr/bin/nmap -v -sT 192.168.1.1-40\"\"");
builder.redirectErrorStream(true);
Process proc = builder.start();
LogStreamReader lsr = new LogStreamReader(proc.getInputStream());
Thread thread = new Thread(lsr, "LogStreamReader");
thread.start();
while(thread.isAlive()) {
OutputStream stdin = proc.getOutputStream ();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
System.out.println("Sending input to process...");
writer.write("a");
writer.close();
Thread.sleep(2000);
}
nmapはwriter.write(a)
、スキャンの完了率/ ETAを出力することで応答する必要がありますが、そうではありません。
LogStreamReaderスレッドに似た別のスレッドでライターを実行しようとしましたが、それでも何も起こりません...
私は何かが足りないのですか?
更新:
nmapには--stats-every
必要なことを正確に実行するオプションがあると言われたので、これは解決されました。nmapが使用するttyに書き込む方法は見つかりませんでした。