ddosify - Golangで書かれた高性能な負荷テストツール / ddosify - a high-performance load testing tool, written in Golang(転載)


ddosify - a high-performance load testing tool, written in Golang

特徴

✔️ プロトコルにとらわれない - 現在、HTTP、HTTPS、HTTP/2をサポートしています。その他のプロトコルも予定しています。

✔️ シナリオベース - JSON ファイルでフローを作成します。コードは1行もありません。

✔️ 異なる負荷タイプ - 異なる負荷タイプでシステムの限界をテストします。


 インストール

ddosifyはDocker、Homebrew Tap、およびリリースページからコンパイル済みのバイナリをダウンロードして、macOS、Linux、Windowsで利用できます。


Docker

docker run -it --rm ddosify/ddosify


Homebrew Tap (macOS and Linux)

brew install ddosify/tap/ddosify


apk, deb, rpm packages

# For Redhat based (Fedora, CentOS, RHEL, etc.)
rpm -i https://github.com/ddosify/ddosify/releases/download/v0.1.1/ddosify_amd64.rpm

# For Debian based (Ubuntu, Linux Mint, etc.)
wget https://github.com/ddosify/ddosify/releases/download/v0.1.1/ddosify_amd64.deb
dpkg -i ddosify_amd64.deb

# For Alpine
wget https://github.com/ddosify/ddosify/releases/download/v0.1.1/ddosify_amd64.apk
apk add --allow-untrusted ddosify_amd64.apk


便利なスクリプトを使う(macOS、Linux)

  • このスクリプトでは、ddosify のバイナリを /usr/local/bin に移動するために root または sudo の権限が必要です。
  • スクリプトは、オペレーティングシステム(macOSまたはLinux)とアーキテクチャ(arm64、x86、amd64)を検出して、リリースページから適切なバイナリをダウンロードしようとします。
  • デフォルトでは、スクリプトは最新バージョンのddosifyをインストールします。
  • 問題がある場合は、一般的な問題を確認してください。
  • 必要なパッケージ: curl と sudo


ソースからインストールする(macOS、Linux、Windows)

go install -v go.ddosify.com/ddosify@latest


簡単なスタート

このセクションでは、Ddosifyの使い方を簡単に説明しています。

1.簡易負荷テスト

 ddosify -t target_site.com

上記のコマンドでは、デフォルト値である10秒間に100回のリクエストを行う負荷テストを実行します。


2.いくつかの機能を使う

 ddosify -t target_site.com -n 1000 -d 20 -p HTTPS -m PUT -T 7 -P http://proxy_server.com:80

Ddosify は、プロキシ http://proxy_server.com:80 を通じて https://target_site.com に、1 リクエストあたり 7 秒のタイムアウトで 20 秒間に合計 1000 の PUT リクエストを送信します。


3.シナリオベースの負荷テスト

 ddosify -config config_examples/config.json

Ddosify はまず、プロキシ http://proxy_host.com:proxy_port を通じて、基本的な認証情報 test_user:12345 を用いて、HTTP/2 の POST リクエストを https://test_site1.com/endpoint_1 に送信し、タイムアウトを 3 秒に設定する。レスポンスを受け取ると、HTTPS GET リクエストが、config_examples/payload.txt ファイルに含まれるペイロードとともに https://test_site1.com/endpoint_2 に送信され、2秒のタイムアウトが設定される。このフローは、5秒間に20回繰り返され、レスポンスが標準出力に書き込まれます。

詳細

ロードテストの設定は、CLIオプションまたはコンフィグファイルで行うことができます。コンフィグファイルは、CLIよりも多くの機能をサポートしています。例えば、CLIオプションでは、シナリオベースの負荷テストを作成することはできません。

CLIフラグ

ddosify [FLAG]
Flag
DescriptionTypeDefaultRequired?
-tTarget website URL. Example: https://ddosify.comstring-Yes
-nTotal request countint100No
-dTest duration in seconds.int10No
-pProtocol of the request. Supported protocols are HTTP, HTTPS. HTTP/2 support is only available by using a config file as described. More protocols will be added.stringHTTPSNo
-mRequest method. Available methods for HTTP(s) are GET, POST, PUT, DELETE, UPDATE, PATCHstringGETNo
-bThe payload of the network packet. AKA body for the HTTP.string-No
-aBasic authentication. Usage: -a username:passwordstring-No
-hHeaders of the request. You can provide multiple headers with multiple -h flag.string-No
-TTimeout of the request in seconds.int5No
-PProxy address as host:port. -P http://user:pass@proxy_host.com:port'string-No
-oTest result output destination. Other output types will be added.stringstdoutNo
-lType of the load test. Ddosify supports 3 load types.stringlinearNo
-configConfig File of the load test.string-No
-versionPrints version, git commit, built date (utc), go information and quit--No

Load Types

Linear

ddosify -t target_site.com -l linear

結果:

注:指定された期間に対してリクエスト数が少なすぎる場合、テストが予想よりも早く終了する可能性があります。

Incremental

ddosify -t target_site.com -l incremental

結果:


Waved

ddosify -t target_site.com -l waved

結果:



コンフィグファイル

コンフィグファイルは、Ddosifyの全ての機能を使用するためのものです。

コンフィグファイルで使用可能な機能

  • シナリオ作成
  • ファイルからのペイロード
  • キープアライブの有効化/無効化ロジックなどの追加接続設定
  • HTTP2のサポート

使い方

ddosify -config <json_config_path>

config_examples/config.jsonには、サンプルの設定ファイルがあります。このファイルには、使用できるすべてのパラメータが含まれています。各パラメータの詳細です。


  • request_count optional

    これは、-nフラグと同等のものです。違いは、シナリオに複数のステップがある場合、この値はステップの反復回数を表すことです。

  • load_type optional

    これは -l フラグと同じです。

  • duration optional

    これは -d フラグに該当します。

  • proxy optional

    これは -P フラグと同じです。

  • output optional

    これは -o フラグと同じです。

  • steps mandatory

    このパラメータで、シナリオを作成することができます。Ddosifyは、指定されたステップをそれぞれ実行します。与えられたファイルの例では、ステップID:1のレスポンスを受信した直後にステップID:2が実行されます。実行の順番は、コンフィグファイル内のステップの順番と同じです。


ステップの各パラメータの詳細

    • id mandatory

      各ステップには、一意の整数IDが必要です。

    • url mandatory

      これは -t フラグと同じです。

    • protocol optional

      これは -p フラグと同じです。

    • method optional

       -m フラグと同じです。

    • headers optional

      key:value形式のヘッダのリスト。

    • payload optional

       -b と同義

    • payload_file optional

      長いペイロードが必要な場合は、 payloadの代わりにこのパラメータを使用することをお勧めします。

    • auth optional

      ベーシック認証

      "auth": {
          "username": "test_user",
          "password": "12345"
      }
    • others optional

      このパラメータには、使用するプロトコルの接続詳細を設定するための動的なキーと値のペアを入力します。

      "others": {
          "keep-alive": true,              // Default false
          "disable-compression": false,    // Default true
          "h2": true,                      // Enables HTTP/2. Default false.
          "disable-redirect": true         // Default false
      }