我正在尝试将输入发送到从 ProcessBuilder 运行的 nmap 进程,但我没有看到正在运行的 nmap 进程的响应。我查看了 nmap 源代码,它接受来自 TTY 的运行时交互式输入,所以我尝试使用/bin/bash -c
除了直接使用之外运行它/usr/bin/nmap
。
我有另一个线程使用这个答案从 nmap 读取标准输出。这是我的代码:
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);
}
writer.write(a)
nmap 应该通过打印出扫描的完成百分比/ETA 来响应,但事实并非如此。
我还尝试在类似于 LogStreamReader 线程的单独线程中运行编写器,但仍然没有...
我错过了什么吗?
更新:
我被告知 nmap 有一个选项--stats-every
可以完全满足我的需要,所以这已经解决了。我找不到写入 nmap 使用的 tty 的方法。