我正在尝试将输入发送到从 ProcessBuilder 运行的 nmap 进程,但我没有看到正在运行的 nmap 进程的响应。我查看了 nmap 源代码,它接受来自 TTY 的运行时交互式输入,因此除了直接使用 /usr/之外,我还尝试使用
./bin/bash -c
运行它bin/nmap
我有另一个线程从 nmap 读取标准输出,using this answer 。这是我的代码:
ProcessBuilder builder = new ProcessBuilder("/usr/bin/nmap", "-v", "-sT", "192.168.1.1-40");
//ProcessBuilder builder = new ProcessBuilder("/bin/bash", "-c", "\"\"/usr/bin/nmap -v -sT 192.168.1.1-40\"\"");
builder.redirectErrorStream(true);
Process proc = builder.start();
LogStreamReader lsr = new LogStreamReader(proc.getInputStream());
Thread thread = new Thread(lsr, "LogStreamReader");
thread.start();
while(thread.isAlive()) {
OutputStream stdin = proc.getOutputStream ();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
System.out.println("Sending input to process...");
writer.write("a");
writer.close();
Thread.sleep(2000);
}
nmap 应该通过打印出扫描的完成百分比/预计到达时间来响应 writer.write(a)
,但事实并非如此。
我还尝试在类似于 LogStreamReader 线程的单独线程中运行编写器,但仍然没有任何结果...
我错过了什么吗?
更新:
我被告知 nmap 有一个选项 --stats-every
,它正是我所需要的,所以这个问题已经解决了。但我找不到写入 nmap 使用的 tty 的方法。
最佳答案
Nmap 的运行时交互不是取自 STDIN,而是取自 TTY(引用 this nmap-dev thread)。我不是 Java 专家,但我认为 ProcessBuilder
不支持这种交互。
关于java - 将输入发送到 nmap 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13443830/