John R
John R

Reputation: 3026

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:

Upvotes: 2

Views: 3473

Answers (2)

Reno
Reno

Reputation: 33792

 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.

Upvotes: 1

xthexder
xthexder

Reputation: 1565

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.

Upvotes: 3

Related Questions