Configuration
Configuration¶
Command Line reference¶
Usage of db1000n:
-b string
raw backup config in case the primary one is unavailable
-c string
path to config files, separated by a comma, each path can be a web endpoint (default "https://raw.githubusercontent.com/db1000n-coordinators/LoadTestConfig/main/config.v0.7.json")
-country-list string
comma-separated list of countries (default "Ukraine")
-debug
enable debug level logging
-enable-primitive
set to true if you want to run primitive jobs that are less resource-efficient (default true)
-enable-self-update
Enable the application automatic updates on the startup
-format string
config format (default "yaml")
-h print help message and exit
-pprof string
enable pprof
-prometheus_gateways string
Comma separated list of prometheus push gateways (default "https://178.62.78.144:9091,https://46.101.26.43:9091,https://178.62.33.149:9091")
-prometheus_on
Start metrics exporting via HTTP and pushing to gateways (specified via <prometheus_gateways>) (default true)
-proxy string
system proxy to set by default (can be a comma-separated list or a template)
-refresh-interval duration
refresh timeout for updating the config (default 1m0s)
-restart-on-update
Allows application to restart upon successful update (ignored if auto-update is disabled) (default true)
-scale int
used to scale the amount of jobs being launched, effect is similar to launching multiple instances at once (default 1)
-self-update-check-frequency duration
How often to run auto-update checks (default 24h0m0s)
-skip-encrypted
set to true if you want to only run plaintext jobs from the config for security considerations
-skip-update-check-on-start
Allows to skip the update check at the startup (usually set automatically by the previous version)
-strict-country-check
enable strict country check; will also exit if IP can't be determined
-updater-destination-config string
Destination config file to write (only applies if updater-mode is enabled (default "config/config.json")
-updater-mode
Only run config updater
Almost all of these parameters can also be set via environment variables
Config file reference¶
This doc gets outdated frequently as the project is under active development but you can always check up to date configuration examples in examples/config
folder
The config is expected to be in json format and has following configuration values:
jobs
-[array]
array of attack job definitions to run, should be defined inside the root objectjobs[*]
-[object]
single job definition as json objectjobs[*].type
-[string]
type of the job (determines which attack function to launch). Can behttp
,tcp
,udp
,syn-flood
, orpacketgen
jobs[*].count
-[number]
the amount of instances of the job to be launched, automatically set to 1 if no or invalid value is specifiedjobs[*].args
-[object]
arguments to pass to the job. Depends onjobs[*].type
http
args:
request
-[object]
defines requests to be sentrequest.method
-[string]
http method to use (passed directly to gohttp.NewRequest
)request.path
-[string]
url path to use (passed directly to gohttp.NewRequest
)request.body
-[object]
http payload to use (passed directly to gohttp.NewRequest
)request.headers
-[object]
key-value map of http headersrequest.cookies
-[object]
key-value map of http cookies (you can still set cookies directly via the header withcookie_string
template function or statically, seeexamples/config/advanced/ddos-guard.yaml
for an example)client
-[object]
http client config for the jobclient.tls_config
-[object]
tls config for transport (InsecureSkipVerify is true by default)client.proxy_urls
-[array]
comma-separated list of string urls for proxies to use (chosen randomly for each request)client.timeout
-[time.Duration]
client.max_idle_connections
-[number]
tcp
args:
proxy_urls
-[string]
comma-separated list of http/socks5 proxies to use (chosen randomly for each job)timeout
-[duration]
timeout for connecting to the proxy
tcp
and udp
shared args:
address
-[string]
network host to connect to, can be eitherhostname:port
orip:port
body
-[object]
json data to be repeatedly sent over the network
Warning: packetgen
requires root privileges to run
packetgen
args:
connection
-[object]
raw ip connection parametersconnection.name
-[string]
name of the network to use. can beip4:tcp
,ip6:tcp
,ip4:udp
,ip6:udp
, or anything else supported by the go runtimeconnection.address
-[string]
address of the interface used to send packets (on the attacking machine)packet
-[object]
packet configuration parameters. seeexamples/config/advanced/packetgen-*
for usage examples as there are just too many params to put them here. I'll only describe the general structure of the packetpacket.link
-[layer]
tcp/ip level 1 (OSI level 2) configuration. currently only supports ethernet serialization but go runtime doesn't have a way to send custom ethernet frames so it's not advised to use itpacket.network
-[layer]
tcp/ip level 2 (OSI level 3) configuration. supportsipv4
andipv6
protocols. seesrc/core/packetgen/network.go
for all the available optionspacket.transport
-[layer]
tcp/ip level 3 (OSI level 4) configuration. supportstcp
andudp
protocols. seesrc/core/packetgen/transport.go
for all the available optionspacket.payload
-[layer]
the data that goes on top of other layers. for now it can beraw
for custom crafted payload string (i.e. you can write an http request directly here),dns
, andicmpv4
, but last two are not fully tested yet
all the jobs have shared args:
interval_ms
-[number]
interval between requests in milliseconds. Defaults to 0 (Care, in case of udp job it might generate the data faster than your OS/network card can process it)count
-[number]
limit the amount of requests to send with this job invocation. Defaults to 0 (no limit). Note: if config is refreshed before this limit is reached the job will be restarted and the counter will be reset
Almost every leaf [string]
or [object]
parameter can be templated with go template syntax. I've also added couple helper functions (list will be growing):
random_uuid
random_int_n"
random_int
random_payload
random_ip
random_port
random_mac_addr
random_user_agent
local_ip
local_ipv4
local_ipv6
local_mac_addr
resolve_host
resolve_host_ipv4
resolve_host_ipv6
base64_encode
base64_decode
to_yaml
from_yaml
from_yaml_array
to_json
from_json
from_json_array
from_string_array
join
split
get_url
mod
ctx_key
split
cookie_string
Please refer to official go documentation and code in src/utils/templates/
for these for now