2

我想在连接进入时逐行读取和处理 tcpdump 的输出。到目前为止,我正在使用 Process 类。我也想以非root用户身份运行,所以我配置了sudo: user1 ALL= NOPASSWD:/usr/sbin/sudo

我在 RHEL 6.4 上运行。

我的 Java 代码如下所示:

    String[] tcpdumpCmd = {"/usr/bin/sudo", "-n", "/usr/sbin/tcpdump", "-i", "eth0", "port 8561"};
    Process p = new ProcessBuilder(tcpdumpCmd).start();
    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));

    tcpdumpOut = null;
    tcpdumpLineCnt = 0;
    while ((tcpdumpOut = in.readLine()) != null ) {
        System.out.println(tcpdumpOut);
        tcpdumpLineCnt++;
    }

    System.out.println("Output lines: " + tcpdumpLineCnt+"\nCommand exit code: " + p.exitValue());

该命令工作正常,所以对我来说很明显发生了什么,因为当我 Ctrl-C 时,我得到了打印输出。所以它会做一种“缓冲”,直到我中断它(此时剩余的代码没有执行,所以我没有进入 RC 部分。)

我认为要么我的问题在于我如何处理我的 while 循环中的输出,要么就是不能以这种方式完成。所以我很想问是否有人对我有任何建议。

4

0 回答 0