Auger load test, scan and inspect HTTP from one rust binary

user123cy1 pts0 comments

GitHub - user123cy/auger: Load test, discover and inspect HTTP endpoints from the terminal. Rust CLI with latency percentiles, flamegraph and security header checks. · GitHub

/" data-turbo-transient="true" />

Skip to content

Type / to search

Sign in<br>Sign upAppearance settings

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

user123cy

auger

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>31 Commits<br>31 Commits

.github/workflows

.github/workflows

scripts

scripts

src

src

.gitignore

.gitignore

CHANGELOG.md

CHANGELOG.md

Cargo.lock

Cargo.lock

Cargo.toml

Cargo.toml

LICENSE

LICENSE

README.md

README.md

View all files

Repository files navigation

auger

Load test, discover and inspect HTTP endpoints from the terminal.

Five commands, one binary:

auger run — hammer a URL with concurrent requests, get percentiles, a latency histogram and a flamegraph

auger scan — brute-force endpoints with a wordlist

auger check — inspect status, HTTP version and security headers with an A-F grade

auger cert — show the TLS certificate for a host

auger ping — measure per-phase latency (DNS/TCP/TLS/TTFB) of a single request

install

From crates.io:

cargo install auger

Or the install script (downloads the latest prebuilt binary):

curl -fsSL https://raw.githubusercontent.com/user123cy/auger/main/scripts/install.sh | bash

Prebuilt binaries for Linux, macOS and Windows are attached to every release.

load test

auger run https://api.example.com/ # 20 workers, 5s<br>auger run https://api.example.com/ -c 200 -d 30s # 200 workers, 30s<br>auger run https://api.example.com/ -m POST -d 10s<br>auger run https://api.example.com/ --random-ua -H "X-Token: abc"<br>auger run https://api.example.com/ -m POST --body '{"user":1}' # inline request body<br>auger run https://api.example.com/ -d 30s --quiet # no progress line<br>auger run https://api.example.com/ -d 30s --json # machine-readable output

Save a baseline and compare against it later:

auger run https://api.example.com/ -d 30s -s baseline.json<br>auger run https://api.example.com/ -d 30s --compare baseline.json --threshold 1.2

Any percentile slower than the baseline by more than the threshold flags a regression. A regression sets the exit code to 1 — hook it into CI. --json prints the diff rows instead of the table.

discover

auger scan https://example.com/ -w wordlist.txt # find non-404 paths<br>auger scan https://example.com/ -w wordlist.txt -e php,html # also try .php and .html<br>auger scan https://example.com/ -w wordlist.txt -o hits.txt # save status + url lines<br>auger scan https://example.com/ -w wordlist.txt -R # also probe robots.txt + sitemap.xml paths<br>auger scan https://example.com/ -w wordlist.txt --depth 2 # cap recursion into 2xx directories<br>auger scan https://example.com/ -w wordlist.txt --no-recursion # probe only the base path<br>auger scan https://example.com/ -w wordlist.txt --json # machine-readable output<br>cat urls.txt | auger scan -w wordlist.txt --stdin # scan many bases from stdin<br>cat urls.txt | auger scan -w wordlist.txt --stdin --silent # print only "status url" lines<br>auger scan https://example.com/ -w wordlist.txt --filter-status 403,500 # drop these statuses<br>auger scan https://example.com/ -w wordlist.txt --filter-size 1234 # drop responses of this exact size

Before scanning each base, auger probes a random path to learn what a catch-all response looks like (status + body size) and hides matching hits — so a SPA that answers 200 to every path won't flood the results. Filters (--filter-status, --filter-size) apply before --match-status.

latency

auger ping https://example.com/ # DNS, TCP, TLS, TTFB, total for one request<br>auger ping example.com -c 3 # 3 attempts + min/avg/max per phase<br>auger ping https://example.com/ --json # machine-readable attempt object<br>auger ping http://localhost:8080/api # missing scheme defaults to http

Useful for spotting which phase of a connection is slow — a bad DNS resolver, a slow TLS handshake or a server that takes long to send headers.

inspect

auger check https://example.com/<br>auger check https://example.com/ --json

Shows status, HTTP version, server and which security headers are present: HSTS, CSP, clickjacking, mime sniffing, referrer, permissions, COOP, CORP. The headers are weighted and scored into a letter grade (A-F) in the style of securityheaders.com. Missing headers show the exact header line to add. Cookies are listed with their Secure/HttpOnly/SameSite flags.

certificate

auger cert example.com<br>auger cert example.com:8443<br>auger cert https://example.com/ --json

Shows the subject, issuer, TLS version, key size, signature...

auger example https scan wordlist status

Related Articles