简体   繁体   中英

Java Runtime.getRuntime().exec on Windows error

I am trying to run this line of code:

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

The above gives this error:

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)

However, this line of code works fine:

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

Here are some particulars:

  • Installed nmap 5.51 which works perfectly from the 'cmd line'.
  • Windows Vista .

You should be using this code:

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

this is equivalent to:

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

The first entry in the array is always the file, and anything after that is parameters. What it was doing was looking for "nmap -sP 192.168.1.0/24" as a program, with no parameters.

 ProcessBuilder pb = new ProcessBuilder("nmap", "-sP", "192.168.1.0/24");
 Process p = pb.start();

Basically you have to separate the program from its arguments.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM