Java Runtime.getRuntime()。exec对Windows的错误

时间:2011-11-04 03:32:35

标签: java networking exec runtime.exec nmap

我正在尝试运行这行代码:

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行'完美运行。
  • Windows Vista

2 个答案:

答案 0 :(得分:3)

您应该使用此代码:

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 :(得分:1)

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

基本上你必须将程序与其参数分开。