Java Runtime.getRuntime (). Exec в Windows ошибка - PullRequest
2 голосов
/ 04 ноября 2011

Я пытаюсь запустить эту строку кода:

Process p = Runtime.getRuntime().exec(new String[] {"nmap -sP 192.168.1.0/24", g});

Выше выдает эту ошибку:

Exception in thread "main" java.io.IOException: Cannot run program "nmap -sP 192.168.1.0/24": CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at Test.main(Test.java:14)

Однако эта строка кода работает нормально:

Process p = Runtime.getRuntime().exec(new String[] {"nmap", g});

Вот некоторые подробности:

  • Установлен nmap 5.51 , который отлично работает из 'cmd line'.
  • Windows Vista .

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

Вы должны использовать этот код:

Process p = Runtime.getRuntime().exec(new String[] {"nmap", "-sP", "192.168.1.0/24", g});

это эквивалентно:

"nmap -sP 192.168.1.0/24".split(" ");

Первая запись в массиве - это всегда файл, а после него все параметры. То, что он делал, искал "nmap -sP 192.168.1.0/24" как программу без параметров.

1 голос
/ 04 ноября 2011
 ProcessBuilder pb = new ProcessBuilder("nmap", "-sP", "192.168.1.0/24");
 Process p = pb.start();

По сути, вы должны отделить программу от ее аргументов.

...