我想在连接进入时逐行读取和处理 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 循环中的输出,要么就是不能以这种方式完成。所以我很想问是否有人对我有任何建议。