1

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に書き込む方法は見つかりませんでした。

4

2 に答える 2

1

Nmap のランタイム インタラクションは、STDIN からではなく、TTY から取得されます (この nmap-dev スレッドを参照してください)。私は Java の専門家ではありませんがProcessBuilder、この種の対話はサポートされていないと思います。

于 2012-11-19T04:25:31.517 に答える
1

Nmap4j と呼ばれる Nmap を実行するための Java ライブラリがあります。役に立つかもしれません。それは sourceforge にあります: nmap4j.sourceforge.net。

于 2012-11-19T17:56:55.470 に答える