Java 将输入发送到nmap进程
我试图将输入发送到从ProcessBuilder运行的nmap进程,但没有看到运行的nmap进程的响应。我浏览了nmap源代码,它接受来自TTY的运行时交互输入,因此除了直接使用Java 将输入发送到nmap进程,java,stdin,processbuilder,nmap,Java,Stdin,Processbuilder,Nmap,我试图将输入发送到从ProcessBuilder运行的nmap进程,但没有看到运行的nmap进程的响应。我浏览了nmap源代码,它接受来自TTY的运行时交互输入,因此除了直接使用/usr/bin/nmap之外,我还尝试使用/bin/bash-c运行它 我有另一个线程从nmap读取标准输出。这是我的密码: ProcessBuilder builder = new ProcessBuilder("/usr/bin/nmap", "-v", "-sT", "192.168.1.1-40"); //Pr
/usr/bin/nmap
之外,我还尝试使用/bin/bash-c
运行它
我有另一个线程从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);
}
nmap应通过打印扫描完成百分比/ETA来响应写入器。写入(a)
,但它不会
我还尝试在类似于LogStreamReader线程的单独线程中运行writer,但仍然没有任何结果
我错过什么了吗
更新:
我被告知nmap有一个选项
——stats every
,它正好满足我的需要,所以这就解决了。但是,我找不到写入nmap使用的tty的方法。nmap的运行时交互不是从STDIN获取的,而是从tty(参考)获取的。我不是Java专家,但我认为ProcessBuilder不支持这种交互。有一个用于运行Nmap的Java库,名为Nmap4j。你会发现这很有帮助。它位于sourceforge:nmap4j.sourceforge.net上。谢谢。我试着用Runtime.exec运行它,并用--stats将输入重定向到tty,每一个都完全符合我的需要,因此无需写入tty等。