Skip to main content

Overview

This page documents every CLI flag available in IronBullet, including aliases, data types, default values, and validation rules.

Argument Parser

IronBullet uses a custom argument parser implemented in cli.rs:30-98. Arguments are parsed from left to right, supporting both long-form (--flag) and short-form (-f) syntax.

Flag Reference

—config

--config
string
required
Alias: -cRequired: YesDescription: Path to the configuration fileSupported Formats:
  • .rfx - IronBullet native binary format
  • .svb - SilverBullet XML format
  • .opk - OpenBullet compressed format
  • .loli - LoliCode script format
  • .json - JSON format
Format Detection: For .rfx files, IronBullet loads the native format directly. For all other extensions, the file is read as bytes and the format is auto-detected by the import system.Validation:
  • File must exist and be readable
  • Must be a valid config in one of the supported formats
Source: cli.rs:43-45, cli.rs:119-144Example:
ironbullet --config /path/to/config.rfx -w wordlist.txt
ironbullet -c imported-config.svb -w data.txt

—wordlist

--wordlist
string
required
Alias: -wRequired: YesDescription: Path to the wordlist/combo file containing data lines to processFormat: Plain text file with one entry per line. Format depends on config’s data pool settings:
  • Line mode: Each line is treated as a single value
  • CSV mode: Lines are split by delimiter into multiple fields
Validation:
  • File must exist and be readable
  • Empty files are allowed but will result in no processing
Source: cli.rs:47-49, cli.rs:172-173Example:
ironbullet -c config.rfx --wordlist combos.txt
ironbullet -c config.rfx -w /data/emails.txt

—threads

--threads
u32
Alias: -tRequired: NoDefault: Uses pipeline.runner_settings.threads from config fileDescription: Number of concurrent worker threadsRange: Typically 1-500. Higher values require more system resources.Validation:
  • Must be a positive integer
  • Value is parsed with .parse::<u32>()
  • Invalid values (non-numeric, negative, too large) cause error
Override Behavior: When specified, this value replaces the thread count in the config file at cli.rs:153-155Source: cli.rs:51-54Example:
ironbullet -c config.rfx -w data.txt --threads 100
ironbullet -c config.rfx -w data.txt -t 25
Error Example:
$ ironbullet -c config.rfx -w data.txt --threads abc
error: invalid thread count: abc

—proxies

--proxies
string
Alias: -pRequired: NoDefault: No proxies (direct connection)Description: Path to proxy list fileFormat: Plain text file, one proxy per line. Supports:
  • http://host:port
  • https://host:port
  • socks5://host:port
  • socks4://host:port
  • Optional authentication: protocol://user:pass@host:port
Behavior: Proxies are loaded into a ProxyPool with ban duration from pipeline.proxy_settings.ban_duration_secsValidation:
  • File must exist and be readable
  • Invalid proxy formats are logged as warnings but don’t halt execution
Source: cli.rs:56-58, cli.rs:196-203Example:
ironbullet -c config.rfx -w data.txt --proxies socks5-list.txt
ironbullet -c config.rfx -w data.txt -p /proxies/http.txt

—outfile

--outfile
string
Alias: -oRequired: NoDefault: results/ (specified in config)Description: Output directory for saving hits and resultsBehavior:
  • Sets pipeline.output_settings.output_directory to the specified path
  • Automatically enables pipeline.output_settings.save_to_file = true
Directory Creation: Directory is created automatically if it doesn’t exist when hits are savedSource: cli.rs:60-62, cli.rs:162-165Example:
ironbullet -c config.rfx -w data.txt --outfile ./results/
ironbullet -c config.rfx -w data.txt -o /output/2024-01-15/

—skip

--skip
u32
Alias: NoneRequired: NoDefault: 0Description: Skip the first N lines from the wordlistUse Case: Resume interrupted runs by skipping already-processed linesBehavior:
  • Wordlist is loaded fully into memory
  • First skip lines are discarded via .skip(skip) iterator
  • Remaining lines are processed
Validation:
  • Must be a positive integer
  • If skip >= total lines, no processing occurs (empty data pool)
Override Behavior: Sets pipeline.runner_settings.skip at cli.rs:156-158Source: cli.rs:64-67, cli.rs:176-190Example:
# Skip first 5000 lines
ironbullet -c config.rfx -w data.txt --skip 5000
Combined with —take:
# Process lines 1000-1999
ironbullet -c config.rfx -w data.txt --skip 1000 --take 1000

—take

--take
u32
Alias: NoneRequired: NoDefault: 0 (process all lines)Description: Process only N lines from the wordlist (after skip)Use Case: Test configs on a subset of dataBehavior:
  • Value of 0 means process all remaining lines (no limit)
  • Non-zero value limits processing via .take(take) iterator
  • Applied after --skip
Validation:
  • Must be a non-negative integer
  • Value of 0 is valid and means “take all”
Override Behavior: Sets pipeline.runner_settings.take at cli.rs:159-161Source: cli.rs:69-72, cli.rs:176-190Example:
# Process only first 100 lines
ironbullet -c config.rfx -w data.txt --take 100

# Process all lines (explicit)
ironbullet -c config.rfx -w data.txt --take 0

—debug

--debug
boolean
Alias: -dRequired: NoDefault: falseDescription: Enable debug mode for verbose outputBehavior:
  • Each block execution result is printed to stderr
  • Proxy information is printed for each hit
  • Useful for troubleshooting config issues
Flag Type: This is a boolean flag (no value required)Source: cli.rs:74-76, cli.rs:211, cli.rs:257-261Output Format:
[HIT] user@example.com:pass | token=abc
  proxy: socks5://127.0.0.1:9050
Example:
ironbullet -c config.rfx -w data.txt --debug
ironbullet -c config.rfx -w data.txt -d

—help

--help
boolean
Alias: -hRequired: NoDescription: Display help message and exitBehavior:
  • Prints usage information to stderr via print_help() at cli.rs:100-116
  • Exits with code 0 immediately
  • No other processing occurs
Flag Type: Boolean flag (no value required)Source: cli.rs:77-80Example:
ironbullet --help
ironbullet -h
Output:
ironbullet — pipelined request automation

USAGE:
  ironbullet --config <path> --wordlist <path> [options]

OPTIONS:
  -c, --config <path>     Config file (.rfx, .svb, .opk, .loli, .json)
  -w, --wordlist <path>   Wordlist / combo file
  -t, --threads <n>       Thread count (overrides config)
  -p, --proxies <path>    Proxy list file
  -o, --outfile <dir>     Output directory for hits (default: results/)
      --skip <n>          Skip first N data lines
      --take <n>          Process only N data lines (0 = all)
  -d, --debug             Print each block result to stderr
  -h, --help              Show this help

Argument Parsing Rules

Order Independence

Flags can appear in any order:
# All valid
ironbullet --config test.rfx --wordlist data.txt --threads 50
ironbullet --threads 50 --config test.rfx --wordlist data.txt
ironbullet -w data.txt -t 50 -c test.rfx

Value Requirements

Flags that require values must have a following argument:
# Valid
ironbullet --config test.rfx
ironbullet -c test.rfx

# Invalid - missing value
ironbullet --config --wordlist data.txt
# Error: --config requires a path

Boolean Flags

Boolean flags (--debug, --help) don’t take values:
# Valid
ironbullet -c test.rfx -w data.txt --debug
ironbullet --help

# Invalid - don't provide values
ironbullet --debug true  # 'true' will be treated as unknown argument

Unknown Arguments

Any unrecognized flag causes an error:
$ ironbullet --config test.rfx --wordlist data.txt --unknown-flag
error: unknown argument: --unknown-flag
run with --help for usage
Source: cli.rs:81-83

Data Types

String Arguments

Flags: --config, --wordlist, --proxies, --outfile
  • Stored as Option<String> during parsing
  • Required flags are unwrapped with .ok_or("error") at cli.rs:89-90
  • No additional validation during parsing (file existence checked later)

Integer Arguments

Flags: --threads, --skip, --take
  • Parsed using .parse::<u32>()
  • Errors return descriptive message: format!("invalid {}: {}", flag, val)
  • Valid range: 0 to 4,294,967,295 (u32 max)
Source: cli.rs:54, cli.rs:67, cli.rs:72

Boolean Flags

Flags: --debug, --help
  • Stored as bool (not Option<bool>)
  • Default value is false
  • Presence of flag sets to true
  • No argument value consumed
Source: cli.rs:38, cli.rs:75

CliArgs Structure

All parsed arguments are stored in the CliArgs struct:
pub struct CliArgs {
    pub config: String,          // Required
    pub wordlist: String,        // Required
    pub threads: Option<u32>,    // Optional - overrides config
    pub proxies: Option<String>, // Optional - path to proxy list
    pub outfile: Option<String>, // Optional - output directory
    pub skip: Option<u32>,       // Optional - default 0
    pub take: Option<u32>,       // Optional - default 0 (all)
    pub debug: bool,             // Optional - default false
}
Source: cli.rs:19-28

Validation & Error Handling

Argument Parsing Errors

Parsing errors are returned as Result<CliArgs, String> with descriptive messages:
Error ConditionError MessageExit Code
Missing required flag"--config is required"1
Missing required flag"--wordlist is required"1
Missing value"--config requires a path"1
Invalid number"invalid thread count: {val}"1
Unknown flag"unknown argument: {arg}"1
Source: cli.rs:45, cli.rs:49, cli.rs:54, cli.rs:82, main.rs:213-217

Runtime Errors

Runtime errors during config loading or execution:
Error ConditionError FormatExit Code
Config load failure"failed to load {path}: {error}"1
Config read failure"failed to read {path}: {error}"1
Wordlist load failure"failed to load wordlist: {error}"1
Proxy load failure"failed to load proxies: {error}"1
Source: cli.rs:122, cli.rs:129, cli.rs:173, cli.rs:198, main.rs:222-225

Import Warnings

When loading non-native config formats (.svb, .opk, .loli), the import system may emit warnings:
[warn] SilverBullet keycheck 'BAN' mapped to 'RETRY'
[warn] Block 'ParseJson' uses legacy syntax
These are printed to stderr but don’t halt execution. Source: cli.rs:132-136

Security Issues

The config import system may detect security issues in imported configs:
[MEDIUM] Unsafe Regex — Pattern contains catastrophic backtracking risk
[HIGH] Command Injection — Block executes shell commands with user input
These are logged but don’t prevent execution. Review them carefully. Source: cli.rs:137-141

Platform Differences

Windows

  • Executable: ironbullet.exe
  • Console attachment: Automatic via AttachConsole(ATTACH_PARENT_PROCESS)
  • Required for CLI output when compiled with windows_subsystem = "windows"
Source: main.rs:188-195

Linux/macOS

  • Executable: ironbullet
  • No special console handling required
  • Direct stdout/stderr output
Source: main.rs:197-198

See Also