Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将输入发送到nmap进程_Java_Stdin_Processbuilder_Nmap - Fatal编程技术网

Java 将输入发送到nmap进程

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

我试图将输入发送到从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");
//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等。