java - 将输入发送到 nmap 进程

标签 java stdin processbuilder nmap

我正在尝试将输入发送到从 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/

相关文章:

Java运行时真空数据库

java while 循环没有按预期工作

node.js - 使用 Node 从 stdin 读取大输入

c - 从 C 中的 stdin 读取数据

c - 如何从标准输入写入 C 中的管道

java - 作为管道写入 Java Process/ProcessBuilder 的 OutputStream

java - 如何结合 Webstart Maven 插件使用 Maven 将 'all-permissions' 添加到 list 文件?

java - 需要有关 android sql 查询的帮助

Spring Tool Suite 中的 Java MVC 项目附加文件

java - 空字符串解析ntpq命令结果