2010-09-02 89 views
0

我試圖一個接一個地運行多個Nmap命令。在Java中的可見命令提示符窗口中對Nmap命令排隊

理想情況下,每個Nmap命令都將在其自己的命令提示符窗口中創建。 Nmap命令將執行並完成。然後另一個命令提示符將與下一個Nmap命令一起出現,執行等等等等。

不幸的是,程序當前運行的方式,多個命令提示符窗口同時彈出並同時執行。我希望這些命令一次只能執行一個。我曾認爲waitFor()方法可以解決問題,但它沒有。我錯過了什麼嗎?

我已經簡化了這個從我的實際計劃,以解決核心問題。任何幫助,將不勝感激。

try { 
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "start", "nmap", targets, "-p 1- 65535", "-oN +output"); 
      Process p = pb.start(); 
      p.waitFor(); 
      System.out.println("p done"); 

      Process z = pb.start(); 
      z.waitFor(); 
      System.out.println("z done"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

回答

0

這是因爲你正在做一個「開始」。該進程將啓動另一個來處理nmap命令,並終止而不等待該子進程終止。

刪除「開始」應使窗口一個接一個地顯示。

+0

我發現如果我從ProcessBuilder參數中刪除「start」,那麼根本沒有窗口顯示。 – Nomen 2010-09-03 16:34:36

+0

那麼你可以用getInputStream()()和/或getErrorStream獲得進程的輸出,然後用它做任何你想做的事:把它發送到日誌文件,用swing組件顯示它,不管... – 2010-09-03 19:42:26

+0

有什麼辦法可以讓ProcessBuilder創建的「初始」進程作爲命令提示符窗口顯示? 雖然使用getInputStream很容易顯示輸出,但如何與命令提示窗口進行交互? 當Nmap運行時,如果進程需要一段時間,我可以在命令提示符下按下一個鍵,導致Nmap給出估計的時間直到命令完成。 – Nomen 2010-09-08 16:58:35