gpt4 book ai didi

java - 如何从使用 Runtime.getRuntime().exec(cmdLine) 执行的 Java 程序中的 netcat 监听器子进程获取 std 输出?

转载 作者:行者123 更新时间:2023-12-01 14:39:12 25 4
gpt4 key购买 nike

我正在使用 netcat 测试 udp 端口​​转发器,但无法以编程方式从目标(netcat 监听器子进程)读取字符串。从 netcat 监听器子进程中读取的正确流是什么,以查看消息是否正确转发到监听器?目前我正在从监听器子进程的输入流中读取内容,但我无法使其正常工作。我读到 Process.getInputStream() 实际上是父进程的输入流,并且对应于子进程的标准输出,但也许这是错误的流来获取?

首先,我启动 udp 端口​​转发器子进程,它将把 localhost:srcPort 上传入的任何内容转发到 localhost:destPort。

接下来,我启动一个 netcat 监听器以及两个“排出”线程 - 一个从监听器子进程的错误流中读取,另一个从其输入流中读取。

Process recvProcess = Runtime.getRuntime().exec("nc -luv -p <destPort>");


然后我启动一个 netcat 发送器将一个字符串发送到端口转发器,同时还有 2 个耗尽线程:

Process sendProcess = Runtime.getRuntime().exec("nc -vu <srcHost> <srcPort>");


最后,我发送字符串:

String sendString = String.format("hello%s", System.lineSeparator());
PrintWriter sendWriter = new PrintWriter(sendProcess.getOutputStream());
sendWriter.print(sendString);
sendWriter.flush();


如果我从 cmd 窗口运行 netcat 监听器,则 sendString 会正确输出到控制台。但从我的 Java 程序中,对监听器 inputStream 的读取会阻塞。这是我的监听器 inputStream 读取线程的 run() 方法:

BufferedReader in;
try {
in = new BufferedReader(new InputStreamReader(receiveMsgProcess.getInputStream()));
String receivedMsg;
while ((receivedMsg = in.readLine()) != null) {
System.out.println(String.format("RECV IN: %s", receivedMsg));
}
} catch (...) { ... }

我认为这可能是一个换行问题,所以我也尝试使用 in.ready() 和 in.read(buffer, 0, 1024) 方法而不是 in.readLine() 。他们都会阻止。

我还尝试将监听器的输出重定向到文件:

Runtime.getRuntime.exec("nc -luv -p <destPort> > recvMsg.txt");

但这也不起作用,没有创建文件。

请帮忙,我很确定我只是误解了有关 netcat 和 java 进程流的一些内容。预先感谢您提供任何建议或见解。

最佳答案

读取 nc 命令输出的错误流。

StringBuffer response = new StringBuffer();
BufferdReader reader = new BufferedReader(new InputStreamReader(recvProcess.getErrorStream()));
String line="";
while ((line = reader.readLine())!= null) {
response.append(line + "\n");
}
System.out.println(response.toString());

关于java - 如何从使用 Runtime.getRuntime().exec(cmdLine) 执行的 Java 程序中的 netcat 监听器子进程获取 std 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16159251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com