#compdef feroxbuster autoload -U is-at-least _feroxbuster() { typeset -A opt_args typeset -a _arguments_options local ret=1 if is-at-least 5.2; then _arguments_options=(-s -S -C) else _arguments_options=(-s -C) fi local context curcontext="$curcontext" state line _arguments "${_arguments_options[@]}" : \ '-u+[The target URL (required, unless \[--stdin || --resume-from || --request-file\] used)]:URL:_urls' \ '--url=[The target URL (required, unless \[--stdin || --resume-from || --request-file\] used)]:URL:_urls' \ '(-u --url)--resume-from=[State file from which to resume a partially complete scan (ex. --resume-from ferox-1606586780.state)]:STATE_FILE:_files' \ '(-u --url)--request-file=[Raw HTTP request file to use as a template for all requests]:REQUEST_FILE:_files' \ '-p+[Proxy to use for requests (ex\: http(s)\://host\:port, socks5(h)\://host\:port)]:PROXY:_urls' \ '--proxy=[Proxy to use for requests (ex\: http(s)\://host\:port, socks5(h)\://host\:port)]:PROXY:_urls' \ '-P+[Send only unfiltered requests through a Replay Proxy, instead of all requests]:REPLAY_PROXY:_urls' \ '--replay-proxy=[Send only unfiltered requests through a Replay Proxy, instead of all requests]:REPLAY_PROXY:_urls' \ '*-R+[Status Codes to send through a Replay Proxy when found (default\: --status-codes value)]:REPLAY_CODE: ' \ '*--replay-codes=[Status Codes to send through a Replay Proxy when found (default\: --status-codes value)]:REPLAY_CODE: ' \ '-a+[Sets the User-Agent (default\: feroxbuster/2.11.0)]:USER_AGENT: ' \ '--user-agent=[Sets the User-Agent (default\: feroxbuster/2.11.0)]:USER_AGENT: ' \ '*-x+[File extension(s) to search for (ex\: -x php -x pdf js); reads values (newline-separated) from file if input starts with an @ (ex\: @ext.txt)]:FILE_EXTENSION: ' \ '*--extensions=[File extension(s) to search for (ex\: -x php -x pdf js); reads values (newline-separated) from file if input starts with an @ (ex\: @ext.txt)]:FILE_EXTENSION: ' \ '*-m+[Which HTTP request method(s) should be sent (default\: GET)]:HTTP_METHODS: ' \ '*--methods=[Which HTTP request method(s) should be sent (default\: GET)]:HTTP_METHODS: ' \ '--data=[Request'\''s Body; can read data from a file if input starts with an @ (ex\: @post.bin)]:DATA: ' \ '*-H+[Specify HTTP headers to be used in each request (ex\: -H Header\:val -H '\''stuff\: things'\'')]:HEADER: ' \ '*--headers=[Specify HTTP headers to be used in each request (ex\: -H Header\:val -H '\''stuff\: things'\'')]:HEADER: ' \ '*-b+[Specify HTTP cookies to be used in each request (ex\: -b stuff=things)]:COOKIE: ' \ '*--cookies=[Specify HTTP cookies to be used in each request (ex\: -b stuff=things)]:COOKIE: ' \ '*-Q+[Request'\''s URL query parameters (ex\: -Q token=stuff -Q secret=key)]:QUERY: ' \ '*--query=[Request'\''s URL query parameters (ex\: -Q token=stuff -Q secret=key)]:QUERY: ' \ '--protocol=[Specify the protocol to use when targeting via --request-file or --url with domain only (default\: https)]:PROTOCOL: ' \ '*--dont-scan=[URL(s) or Regex Pattern(s) to exclude from recursion/scans]:URL: ' \ '*-S+[Filter out messages of a particular size (ex\: -S 5120 -S 4927,1970)]:SIZE: ' \ '*--filter-size=[Filter out messages of a particular size (ex\: -S 5120 -S 4927,1970)]:SIZE: ' \ '*-X+[Filter out messages via regular expression matching on the response'\''s body/headers (ex\: -X '\''^ignore me\$'\'')]:REGEX: ' \ '*--filter-regex=[Filter out messages via regular expression matching on the response'\''s body/headers (ex\: -X '\''^ignore me\$'\'')]:REGEX: ' \ '*-W+[Filter out messages of a particular word count (ex\: -W 312 -W 91,82)]:WORDS: ' \ '*--filter-words=[Filter out messages of a particular word count (ex\: -W 312 -W 91,82)]:WORDS: ' \ '*-N+[Filter out messages of a particular line count (ex\: -N 20 -N 31,30)]:LINES: ' \ '*--filter-lines=[Filter out messages of a particular line count (ex\: -N 20 -N 31,30)]:LINES: ' \ '(-s --status-codes)*-C+[Filter out status codes (deny list) (ex\: -C 200 -C 401)]:STATUS_CODE: ' \ '(-s --status-codes)*--filter-status=[Filter out status codes (deny list) (ex\: -C 200 -C 401)]:STATUS_CODE: ' \ '*--filter-similar-to=[Filter out pages that are similar to the given page (ex. --filter-similar-to http\://site.xyz/soft404)]:UNWANTED_PAGE:_urls' \ '*-s+[Status Codes to include (allow list) (default\: All Status Codes)]:STATUS_CODE: ' \ '*--status-codes=[Status Codes to include (allow list) (default\: All Status Codes)]:STATUS_CODE: ' \ '-T+[Number of seconds before a client'\''s request times out (default\: 7)]:SECONDS: ' \ '--timeout=[Number of seconds before a client'\''s request times out (default\: 7)]:SECONDS: ' \ '--server-certs=[Add custom root certificate(s) for servers with unknown certificates]:PEM|DER:_files' \ '--client-cert=[Add a PEM encoded certificate for mutual authentication (mTLS)]:PEM:_files' \ '--client-key=[Add a PEM encoded private key for mutual authentication (mTLS)]:PEM:_files' \ '-t+[Number of concurrent threads (default\: 50)]:THREADS: ' \ '--threads=[Number of concurrent threads (default\: 50)]:THREADS: ' \ '-d+[Maximum recursion depth, a depth of 0 is infinite recursion (default\: 4)]:RECURSION_DEPTH: ' \ '--depth=[Maximum recursion depth, a depth of 0 is infinite recursion (default\: 4)]:RECURSION_DEPTH: ' \ '-L+[Limit total number of concurrent scans (default\: 0, i.e. no limit)]:SCAN_LIMIT: ' \ '--scan-limit=[Limit total number of concurrent scans (default\: 0, i.e. no limit)]:SCAN_LIMIT: ' \ '(-v --verbosity -u --url)--parallel=[Run parallel feroxbuster instances (one child process per url passed via stdin)]:PARALLEL_SCANS: ' \ '(--auto-tune)--rate-limit=[Limit number of requests per second (per directory) (default\: 0, i.e. no limit)]:RATE_LIMIT: ' \ '--time-limit=[Limit total run time of all scans (ex\: --time-limit 10m)]:TIME_SPEC: ' \ '-w+[Path or URL of the wordlist]:FILE:_files' \ '--wordlist=[Path or URL of the wordlist]:FILE:_files' \ '-B+[Automatically request likely backup extensions for "found" urls (default\: ~, .bak, .bak2, .old, .1)]' \ '--collect-backups=[Automatically request likely backup extensions for "found" urls (default\: ~, .bak, .bak2, .old, .1)]' \ '*-I+[File extension(s) to Ignore while collecting extensions (only used with --collect-extensions)]:FILE_EXTENSION: ' \ '*--dont-collect=[File extension(s) to Ignore while collecting extensions (only used with --collect-extensions)]:FILE_EXTENSION: ' \ '-o+[Output file to write results to (use w/ --json for JSON entries)]:FILE:_files' \ '--output=[Output file to write results to (use w/ --json for JSON entries)]:FILE:_files' \ '--debug-log=[Output file to write log entries (use w/ --json for JSON entries)]:FILE:_files' \ '--limit-bars=[Number of directory scan bars to show at any given time (default\: no limit)]:NUM_BARS_TO_SHOW: ' \ '(-u --url)--stdin[Read url(s) from STDIN]' \ '(-p --proxy -k --insecure --burp-replay)--burp[Set --proxy to http\://127.0.0.1\:8080 and set --insecure to true]' \ '(-P --replay-proxy -k --insecure)--burp-replay[Set --replay-proxy to http\://127.0.0.1\:8080 and set --insecure to true]' \ '(--rate-limit --auto-bail)--smart[Set --auto-tune, --collect-words, and --collect-backups to true]' \ '(--rate-limit --auto-bail)--thorough[Use the same settings as --smart and set --collect-extensions and --scan-dir-listings to true]' \ '-A[Use a random User-Agent]' \ '--random-agent[Use a random User-Agent]' \ '-f[Append / to each request'\''s URL]' \ '--add-slash[Append / to each request'\''s URL]' \ '-r[Allow client to follow redirects]' \ '--redirects[Allow client to follow redirects]' \ '-k[Disables TLS certificate validation in the client]' \ '--insecure[Disables TLS certificate validation in the client]' \ '-n[Do not scan recursively]' \ '--no-recursion[Do not scan recursively]' \ '(-n --no-recursion)--force-recursion[Force recursion attempts on all '\''found'\'' endpoints (still respects recursion depth)]' \ '-e[Extract links from response body (html, javascript, etc...); make new requests based on findings (default\: true)]' \ '--extract-links[Extract links from response body (html, javascript, etc...); make new requests based on findings (default\: true)]' \ '--dont-extract-links[Don'\''t extract links from response body (html, javascript, etc...)]' \ '(--auto-bail)--auto-tune[Automatically lower scan rate when an excessive amount of errors are encountered]' \ '--auto-bail[Automatically stop scanning when an excessive amount of errors are encountered]' \ '-D[Don'\''t auto-filter wildcard responses]' \ '--dont-filter[Don'\''t auto-filter wildcard responses]' \ '-E[Automatically discover extensions and add them to --extensions (unless they'\''re in --dont-collect)]' \ '--collect-extensions[Automatically discover extensions and add them to --extensions (unless they'\''re in --dont-collect)]' \ '-g[Automatically discover important words from within responses and add them to the wordlist]' \ '--collect-words[Automatically discover important words from within responses and add them to the wordlist]' \ '--scan-dir-listings[Force scans to recurse into directory listings]' \ '(--silent)*-v[Increase verbosity level (use -vv or more for greater effect. \[CAUTION\] 4 -v'\''s is probably too much)]' \ '(--silent)*--verbosity[Increase verbosity level (use -vv or more for greater effect. \[CAUTION\] 4 -v'\''s is probably too much)]' \ '(-q --quiet)--silent[Only print URLs (or JSON w/ --json) + turn off logging (good for piping a list of urls to other commands)]' \ '-q[Hide progress bars and banner (good for tmux windows w/ notifications)]' \ '--quiet[Hide progress bars and banner (good for tmux windows w/ notifications)]' \ '--json[Emit JSON logs to --output and --debug-log instead of normal text]' \ '--no-state[Disable state output file (*.state)]' \ '-U[Update feroxbuster to the latest version]' \ '--update[Update feroxbuster to the latest version]' \ '-h[Print help (see more with '\''--help'\'')]' \ '--help[Print help (see more with '\''--help'\'')]' \ '-V[Print version]' \ '--version[Print version]' \ && ret=0 } (( $+functions[_feroxbuster_commands] )) || _feroxbuster_commands() { local commands; commands=() _describe -t commands 'feroxbuster commands' commands "$@" } if [ "$funcstack[1]" = "_feroxbuster" ]; then _feroxbuster "$@" else compdef _feroxbuster feroxbuster fi