如何从 Java 程序运行 Linux 命令“netstat”?

How do I run the Linux command, “netstat” from a Java program?

提问人: 提问时间:2/5/2020 最后编辑:user207421 更新时间:2/5/2020 访问量:1177

问:

我有一个用 Java 编写的客户端-服务器项目,其中它们通过套接字连接。我无法弄清楚如何从我的 Java 代码的服务器端运行“netstat”。

Java Linux 服务器端 ServerSocket

评论

0赞 Andrew Lohr 2/5/2020
看看 stackoverflow.com/questions/26830617/...
0赞 user207421 2/5/2020
出于什么目的?你不应该需要这个。

答:

1赞 Menelaos 2/5/2020 #1

不幸的是,java 中没有直接可用的 netstat 等价物。

您可以使用进程 API 生成一个新进程并检查输出。

我将使用以下问答中的一个例子:https://stackoverflow.com/a/5711150/1688441

我已将其更改为调用。生成进程后,您还必须读取输出并对其进行解析。netstat

Runtime rt = Runtime.getRuntime();
String[] commands = {"netstat", ""};
Process proc = rt.exec(commands);

BufferedReader stdInput = new BufferedReader(new 
     InputStreamReader(proc.getInputStream()));

BufferedReader stdError = new BufferedReader(new 
     InputStreamReader(proc.getErrorStream()));

// Read the output from the command
System.out.println("Here is the standard output of the command:\n");
String s = null;
while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}

// Read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
    System.out.println(s);
}

来源: https://stackoverflow.com/a/5711150/1688441

评论

0赞 user207421 2/6/2020
这在一般情况下是行不通的。您要么需要合并流,要么在单独的线程中并发读取它们。
0赞 Menelaos 2/6/2020
@user207421 你是对的!,只要进程正在运行,第一个 while 循环就会阻止另一个。我会更新这个。