{"id":13579392,"url":"https://github.com/DNS-OARC/flamethrower","last_synced_at":"2025-04-05T20:34:02.457Z","repository":{"id":39567276,"uuid":"164416885","full_name":"DNS-OARC/flamethrower","owner":"DNS-OARC","description":"a DNS performance and functional testing utility supporting UDP, TCP, DoT and DoH","archived":false,"fork":false,"pushed_at":"2023-10-03T13:09:55.000Z","size":643,"stargazers_count":322,"open_issues_count":24,"forks_count":37,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-03-29T22:06:26.463Z","etag":null,"topics":["dns","functional-testing","performance"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DNS-OARC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-01-07T10:34:55.000Z","updated_at":"2025-03-03T22:48:00.000Z","dependencies_parsed_at":"2024-03-17T05:42:27.038Z","dependency_job_id":"6c9aec0e-62b6-4546-8c33-c598f09ecfcd","html_url":"https://github.com/DNS-OARC/flamethrower","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DNS-OARC%2Fflamethrower","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DNS-OARC%2Fflamethrower/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DNS-OARC%2Fflamethrower/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DNS-OARC%2Fflamethrower/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DNS-OARC","download_url":"https://codeload.github.com/DNS-OARC/flamethrower/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247399877,"owners_count":20932876,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dns","functional-testing","performance"],"created_at":"2024-08-01T15:01:39.006Z","updated_at":"2025-04-05T20:33:57.424Z","avatar_url":"https://github.com/DNS-OARC.png","language":"C++","funding_links":[],"categories":["\u003ca name=\"cpp\"\u003e\u003c/a\u003eC++"],"sub_categories":[],"readme":"Flamethrower \n============\n\nA DNS performance and functional testing utility.\n\n2017-2022© NSONE, Inc.\n\nOverview\n--------\n\nFlamethrower is a small, fast, configurable tool for functional testing, benchmarking, and stress testing DNS servers and networks. It supports IPv4, IPv6, UDP, TCP, DoT, and DoH and has a modular system for generating queries used in the tests.\n\nOriginally built as an alternative to [dnsperf](https://github.com/DNS-OARC/dnsperf), many of the command line options are compatible.\n\nGetting Started\n---------------\n\nThe easiest way to get started with Flamethrower is to use the [public docker image](https://hub.docker.com/repository/docker/ns1labs/flame):\n```\ndocker pull ns1labs/flame\ndocker run ns1labs/flame --help\n```\n\nThere are currently no prebuilt operating system packages. If you would like to build your own executable,\nplease see the Build section below.\n\nUsage\n-----\n\nCurrent command line options are described with:\n\n```\nflame --help\n```\n\nQuick Examples\n--------\n\nFlame localhost port 53, UDP, maximum speed:\n```\nflame localhost\n```\n\nFlame target, port 5300, TCP:\n```\nflame -p 5300 -P tcp target.test.com\n```\n\nFlame target, port 443, DoT:\n```\nflame -p 443 -P dot target.test.com\n```\n\nFlame target, DNS over HTTPS GET:\n```\nflame -P doh target.test.com/dns-query\n```\n\nFlame target, DNS over HTTPS POST:\n```\nflame -P doh -M POST target.test.com/dns-query\n```\n\nFlame target with random labels:\n```\nflame target.test.com -g randomlabel lblsize=10 lblcount=4 count=1000\n```\n\nFlame multiple target at once, reading the list from a file:\n```\nflame file --targets myresolvers.txt\n```\n\nDetailed Features\n-----------------\n\n### Query Generators\n\n Flamethrower uses a modular system for generating queries. Most modules generate all queries before sending begins, for performance reasons.\n Each module may include its own list of configuration options which can be set via key/value pairs on the command line.\n See full `--help` for the current list of generators and their options.\n\n### Rate Limiting\n\n By default, Flamethrower will send traffic as fast as possible. To limit to a specific overall queries per second, use `-Q`\n\n### Dynamic QPS Flow\n\n Flamethrower can adjust its QPS flow over time. This is useful for generating a \"signal\" of traffic (e.g. a square wave) for calibrating metrics collection. For example, to send 10 QPS for 120000ms, then 80 QPS for 120000ms, etc use `--qps-flow \"10,120000;80,120000;10,120000;\"`. Flow change will not loop, you should list as many changes as necessary. Once the flow reaches the final QPS number, it will hold it until program termination.\n\n### Output Metrics\n\n Flamethrower can generate detailed metrics for each of its concurrent senders. Metrics include send and receive counts, timeouts, min, max and average latency, errors, and the like. The output format is JSON, and is suitable for ingestion into databases such as Elastic for further processing or visualization. See the `-o` flag.\n\n### Concurrency\n\n Flamethrower is single threaded, async i/o. You specify the amount of concurrent senders with the `-c` option. Each of these senders will send a configurable number of consecutive queries (see `-q`), then enter a configurable delay period (see `-d`) before looping.\n\n Each concurrent sender will pull the next query from the total queries generated by the Query Generator, looping once it reaches the end of the query list (if the program is configured to continue).\n\n There is currently no built-in support for multiprocess sending, so the maximum throughput will be reached once a single CPU is saturated. However, you may manually start several concurrent `flame` processes, including up to 1 per CPU available. There is future planned support for builtin multiprocess sending.\n\nBuild Dependencies\n------------------\n\n* CMake \u003e= 3.8\n* Linux or OSX\n* libuv \u003e= 1.30.0\n* libldns \u003e= 1.7.0\n* gnutls \u003e= 3.3\n* C++ compiler supporting C++17\n\nOptional DoH support requires:\n* nghttp2\n\nOptional dependencies:\n* docopt\n* nlohmann-json \u003e= 3.7.3\n* cpp-httplib\n* uvw \u003e= 1.18.0\n\nBuilding\n--------\n\nBuilding is based on CMake.\n\nDefault build:\n```\nmkdir build; cd build\ncmake ..\nmake\n```\n\nTo build with DoH support:\n```\nmkdir build; cd build\ncmake -DDOH_ENABLE=ON ..\nmake\n```\n\nBuilding the docker image:\n```\ndocker build . --tag ns1labs/flame --file Dockerfile\ndocker run --rm --net host ns1labs/flame --help\n```\n\nContributions\n---\nPull Requests and issues are welcome. See the [NS1 Contribution Guidelines](https://github.com/ns1/community) for more information.\n\nLicense\n-------\nThis code is released under Apache License 2.0. You can find terms and conditions in the LICENSE file.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDNS-OARC%2Fflamethrower","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDNS-OARC%2Fflamethrower","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDNS-OARC%2Fflamethrower/lists"}