2010-09-02 3 views
0

J'essaie d'exécuter plusieurs commandes Nmap l'une après l'autre.Mise en file d'attente des commandes Nmap dans une fenêtre d'invite de commande visible en Java

Idéalement, chaque commande Nmap sera créée dans sa propre fenêtre d'invite de commande. La commande Nmap va s'exécuter et se terminer. Ensuite, une autre invite de commande apparaîtra avec la prochaine commande Nmap, exécuter, et ainsi de suite.

Malheureusement, de la façon dont le programme s'exécute actuellement, plusieurs fenêtres d'invite de commande apparaissent simultanément et s'exécutent simultanément. Je veux que les commandes n'exécutent qu'une seule à la fois. J'avais pensé que la méthode waitFor() résoudrait le problème, mais ce n'est pas le cas. Est-ce que je manque quelque chose?

J'ai simplifié cela grandement de mon programme actuel pour résoudre le problème de base. Toute aide serait appréciée.

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(); 
    } 

Répondre

0

Ceci est dû au fait que vous effectuez un "démarrage". Le processus en lancera un autre pour gérer la commande nmap et se terminera sans attendre que le processus fils se termine.

La suppression du "démarrage" devrait faire apparaître les fenêtres l'une après l'autre.

+0

J'ai trouvé que si je supprime "start" des arguments ProcessBuilder, alors aucune fenêtre ne s'affichera. – Nomen

+0

Eh bien, vous pouvez obtenir la sortie des processus avec getInputStream() (!!!) et/ou getErrorStream, et faire ce que vous voulez avec: l'envoyer dans un fichier journal, l'afficher dans un composant swing, peu importe ... –

+0

Est-il possible de rendre visible le processus "initial" créé par ProcessBuilder en tant que fenêtre d'invite de commande? Bien qu'il soit facile d'afficher la sortie avec getInputStream, que diriez-vous d'interagir avec la fenêtre comme vous le feriez avec une fenêtre d'invite de commande? Lorsque Nmap est en cours d'exécution, si le processus prend du temps, je peux appuyer sur une touche dans l'invite de commande, ce qui force Nmap à estimer la durée de la commande. – Nomen

Questions connexes