在 nmap 工具具有此功能 - 当您执行扫描[#nmap -A -T4 localhost]并按“Enter”时 - 它会显示一种状态信息“时间:约6.17%完成”
问题 - 如何在不触及bourne shell键盘的情况下强制重复发生此按键?
ps:只是在php的proc_open函数中找到一个解决方法,只有在关闭stdout管道后才返回进程的stdout,并且php的pty仿真在fbsd上不起作用。
问题已结束。 “期望”实用程序解决了问题
#!/usr/local/bin/expect
spawn /usr/local/bin/nmap -A -T4 -p 21-100 localhost
expect arting {sleep 3; send \r}
while {1} {
expect eof {
send_user "finished\n";
exit;
} "done;" {
sleep 3;
send \r;
continue;
}
}
答案 0 :(得分:3)
可能最容易使用expect
。
答案 1 :(得分:1)
也许最终的'是的'程序会做你需要的 - 程序被称为'是'并反复生成相同的输入行。
yes ok | recalcitrant.php
这将经常向顽抗的PHP发送'ok'加上换行符。它受到接收程序读取其输入的速度的速率限制。它可以在GNU实用程序和大多数其他基于Unix的平台上使用。
如果您在处理过程中需要任何智能,那么基于Tcl的“expect”
答案 2 :(得分:1)
注意,你可以摆脱无限循环:
spawn /usr/local/bin/nmap -A -T4 -p 21-100 localhost
expect arting {sleep 3; send \r}
expect {
"done;" {
sleep 3
send \r
exp_continue
}
eof
}
puts "finished"
您确定需要sleep
吗?通常可以使用-regexp
与expect
命令匹配来避免它们。
有用的期望提示:在开发过程中,使用exp_internal 1
详细了解您的模式与命令输出的匹配情况。