使用bufferreader在java代码中读取--traceroute命令时搜索特定单词

使用bufferreader在java代码中读取--traceroute命令时搜索特定单词,java,process,nmap,Java,Process,Nmap,我试图从traceroute输出中搜索单词“hop”,但不知怎么的,它并没有在控制台上显示该行。请告诉我哪里出了问题 这是我的密码: import java.io.*; public class TestExec { public static void main(String[] args) { try { String[] cmdarray = { "nmap", "--traceroute", "nmap.org" }; Process p = Run

我试图从traceroute输出中搜索单词
“hop”
,但不知怎么的,它并没有在控制台上显示该行。请告诉我哪里出了问题

这是我的密码:

import java.io.*;

public class TestExec {
  public static void main(String[] args) {
    try {
      String[] cmdarray = { "nmap", "--traceroute", "nmap.org" };
      Process p = Runtime.getRuntime().exec(cmdarray);
      BufferedReader in = new BufferedReader(new InputStreamReader(
          p.getInputStream()));
      String line = null;
      while ((line = in.readLine()) != null) {
        if (line.contains("hop")) {
          System.out.println(line);
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
有几件事:

  • 你在Linux上运行这个吗?如果是,则必须以
    root
    身份运行
    nmap
    。你在这样做吗
  • 我不太清楚你想找什么。在我运行的
    nmap--traceroute nmap.org
    中,没有包含小写单词
    “hop”
    的行。因此,即使您以root用户身份运行此程序,您可能也不会得到太多
    exec(“cmdarray”)应该是
    exec(cmdarray)抱歉,我发布错误,但使用exec(cmdarray)执行。仍然不起作用。数组初始化后缺少分号。此外,打印stacktrace也没用。你可以很容易地摆脱try-catch,只抛出IOException-同样EFFECT@sam-你们并没有得到任何输出,但程序仍在运行,对吗?你们是否直接在命令提示符下尝试,nmap--traceroute nmap.org,你们是否得到了任何结果?我将添加:-我设法从命令行(OSx)运行了这个程序,但我觉得每个操作系统都不一样。我一直在跑步,直到我还没有终止它。非常感谢。这是我的错误,我给了搜索词“Hop”。它应该是“Hop”。现在可以了。@sam如果你觉得我的答案对你有帮助,请单击答案旁边的复选标记。