3

nmapツールにはその ような機能があります-スキャン[#nmap-A-T4 localhost]を実行して「Enter」を押すと、「タイミング:約6.17%完了」という種類のステータス情報が表示されます

質問-ボーンシェルのキーボードに触れずに、このキー押下を強制的に繰り返すにはどうすればよいですか?

ps:phpのproc_open関数のバグの回避策を見つけようとしているだけです。プロセスの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

たぶん、究極の「yesman」プログラムはあなたが必要とすることをするでしょう-プログラムは「yes」と呼ばれ、同じ入力行を何度も繰り返し生成します。

yes ok | recalcitrant.php 

これにより、「ok」と改行が扱いにくいPHPに頻繁に送信されます。これは、受信プログラムが入力を読み取る速度によってレート制限されます。これは、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"

本当に必要sleepですか?-regexpこれらは通常、コマンドとのマッチングを使用することで回避できますexpect

役立つ期待のヒント:開発中に、exp_internal 1パターンがコマンド出力とどのように一致しているかを詳細に確認するために使用します。

于 2010-02-26T18:24:09.170 に答える