3

nmap工具有这样一个功能 -当 您执行扫描 [#nmap -A -T4 localhost] 并按“Enter”时 - 它会显示一种状态信息“Timing: About 6.17% done”

问题 - 如何在不触摸 bourne shell 中的键盘的情况下强制此按键重复发生?

ps:只是想为php的proc_open函数中的一个bug找到一个解决方法,当一个进程的stdout只有在关闭stdout管道后才返回,而php的pty仿真在fbsd上不起作用。

问题关闭。使用“expect”实用程序解决的问题

#!/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;
        }

}
4

3 回答 3

3

可能最容易使用expect

于 2010-02-24T15:26:14.723 回答
1

也许最终的“是的人”程序会满足您的需要 - 该程序被称为“是”并一遍又一遍地重复生成相同的输入行。

yes ok | recalcitrant.php 

这将经常向顽固的 PHP 发送“ok”和换行符。它受到接收程序读取其输入的速度的限制。它在 GNU 实用程序和大多数其他基于 Unix 的平台上可用。

但是,如果您在处理中需要任何智能,那么基于 Tcl 的 ' expect '

于 2010-02-24T15:45:11.580 回答
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"

你确定你需要sleeps吗?通常可以通过使用与命令-regexp匹配来避免它们。expect

有用的 Expect 提示:在开发过程中,用于exp_internal 1详细查看您的模式如何匹配命令输出。

于 2010-02-26T18:24:09.170 回答