All Projects → DNS-OARC → Flamethrower

DNS-OARC / Flamethrower

Licence: apache-2.0
a DNS performance and functional testing utility supporting UDP, TCP, DoT and DoH (by @NS1)

Projects that are alternatives of or similar to Flamethrower

Nemetric
前端性能指标的监控,采集以及上报。用于测量第一个dom生成的时间(FP/FCP/LCP)、用户最早可操作时间(fid|tti)和组件的生命周期性能,,网络状况以及资源大小等等。向监控后台报告实际用户测量值。
Stars: ✭ 145 (-23.28%)
Mutual labels:  dns, performance
Powershell ipv4networkscanner
Powerful asynchronus IPv4 network scanner for PowerShell
Stars: ✭ 161 (-14.81%)
Mutual labels:  dns, performance
Dnsperf
DNS Performance Testing Tools
Stars: ✭ 171 (-9.52%)
Mutual labels:  dns, performance
Txeh
Go library and CLI utilty for /etc/hosts management.
Stars: ✭ 181 (-4.23%)
Mutual labels:  dns
Clusterrunner
ClusterRunner makes it easy to parallelize test suites across your infrastructure in the fastest and most efficient way possible.
Stars: ✭ 181 (-4.23%)
Mutual labels:  performance
Alfred Network Workflow
Show and change your network settings
Stars: ✭ 186 (-1.59%)
Mutual labels:  dns
Dnsautorebinding
ssrf、ssrfIntranetFuzz、dnsRebinding、recordEncode、dnsPoisoning、Support ipv4/ipv6
Stars: ✭ 188 (-0.53%)
Mutual labels:  dns
Netdot
Network Documentation Tool
Stars: ✭ 180 (-4.76%)
Mutual labels:  dns
Azuredatabricksbestpractices
Version 1 of Technical Best Practices of Azure Databricks based on real world Customer and Technical SME inputs
Stars: ✭ 186 (-1.59%)
Mutual labels:  performance
Redirect.center
Redirect domains using DNS only
Stars: ✭ 185 (-2.12%)
Mutual labels:  dns
Dns Java
DNS wrapper library that provides SRV lookup functionality
Stars: ✭ 183 (-3.17%)
Mutual labels:  dns
Dns Heaven
Fixes stupid macOS DNS stack (/etc/resolv.conf)
Stars: ✭ 182 (-3.7%)
Mutual labels:  dns
Myperf4j
High performance Java APM. Powered by ASM. Try it. Test it. If you feel its better, use it.
Stars: ✭ 2,281 (+1106.88%)
Mutual labels:  performance
Android article
Android热更新、异步并发、性能优化、编译打包、适配相关等文档 by yang。huh...The palest ink is better than the best memory.
Stars: ✭ 181 (-4.23%)
Mutual labels:  performance
Fast Histogram
⚡️ Fast 1D and 2D histogram functions in Python ⚡️
Stars: ✭ 187 (-1.06%)
Mutual labels:  performance
Lighthouse Check Action
GitHub Action for running @GoogleChromeLabs Lighthouse audits with all the bells and whistles 🔔 Multiple audits, Slack notifications, and more!
Stars: ✭ 175 (-7.41%)
Mutual labels:  performance
Front End Performance Checklist
🎮 The only Front-End Performance Checklist that runs faster than the others
Stars: ✭ 13,815 (+7209.52%)
Mutual labels:  performance
Xdebug Handler
Restart a CLI process without loading the xdebug extension.
Stars: ✭ 2,276 (+1104.23%)
Mutual labels:  performance
Scouter Paper
scouter-paper is a web client software for scouter
Stars: ✭ 183 (-3.17%)
Mutual labels:  performance
Dnsblast
A simple and stupid load testing tool for DNS resolvers
Stars: ✭ 185 (-2.12%)
Mutual labels:  dns

Flamethrower Build Status

This project is in active development.

A DNS performance and functional testing utility.

2017-2020© NSONE, Inc.

Overview

Flamethrower 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.

Originally built as an alternative to dnsperf, many of the command line options are compatible.

Getting Started

The easiest way to get started with Flamethrower is to use the public docker image:

docker pull ns1labs/flame
docker run ns1labs/flame --help

There are currently no prebuilt operating system packages. If you would like to build your own executable, please see the Build section below.

Usage

Current command line options are described with:

flame --help

Quick Examples

Flame localhost port 53, UDP, maximum speed:

flame localhost

Flame target, port 5300, TCP:

flame -p 5300 -P tcp target.test.com

Flame target, port 443, DoT:

flame -p 443 -P dot target.test.com

Flame target, DNS over HTTPS GET:

flame -P doh target.test.com/dns-query

Flame target, DNS over HTTPS POST:

flame -P doh -M POST target.test.com/dns-query

Flame target with random labels:

flame target.test.com -g randomlabel lblsize=10 lblcount=4 count=1000

Flame multiple target at once, reading the list from a file:

flame file --targets myresolvers.txt

Detailed Features

Query Generators

Flamethrower uses a modular system for generating queries. Most modules generate all queries before sending begins, for performance reasons. Each module may include its own list of configuration options which can be set via key/value pairs on the command line. See full --help for the current list of generators and their options.

Rate Limiting

By default, Flamethrower will send traffic as fast as possible. To limit to a specific overall queries per second, use -Q

Dynamic QPS Flow

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.

Output Metrics

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.

Concurrency

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.

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).

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.

Build Dependencies

  • CMake >= 3.8
  • Linux or OSX
  • libuv >= 1.23.0
  • libldns >= 1.7.0
  • gnutls >= 3.3
  • C++ compiler supporting C++17

Optional DoH support requires:

  • nghttp2

Building

Building is based on CMake.

Default build:

mkdir build; cd build
cmake ..
make

To build with DoH support:

mkdir build; cd build
cmake -DDOH_ENABLE=ON ..
make

Building the docker image:

org="myorg"
image="myflame"
tag="latest"
docker build --network host -t ${org}/${image}:${tag} -f Dockerfile .
docker run --rm -it --net host ${org}/${image}:${tag} --help

Contributions

Pull Requests and issues are welcome. See the NS1 Contribution Guidelines for more information.

License

This code is released under Apache License 2.0. You can find terms and conditions in the LICENSE file.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].