Updated Oct 13, 2026

Scanners

patator: brute-force SSH, FTP, and HTTP logins

patator is an open-source, multi-threaded, multi-protocol brute-forcing tool that tests credentials and fuzzes services such as SSH, FTP, HTTP, SMTP, and databases through modular engines with fine-grained response filtering.

installpip install patator

Python · GPL-2.0 license

Agent

overview

What patator does

After host and service discovery, run patator as the credential-testing stage. Choose a module (ssh_login, ftp_login, http_fuzz, mysql_login), feed hosts, users, and passwords, and collect FILE and FOLDER results.

Control the run with --threads, --rate-limit, and --timeout. ignore-regex drops failed-login noise. --start and --stop offset the payload product so long jobs can resume. --groups switches cartesian product to lockstep.

Prefer hydra or medusa for simple parallel sprays across many protocols. Prefer patator when you need modular response filtering and payload offsets. A Hits/Done/Skip/Fail/Size line of all zeros usually means empty wordlists or a bad FILEn path.

source github.com/lanjelot/patator

use cases

Where patator fits

Brute force credentials over many protocols

Select the module for the service, then feed username and password files to test logins across SSH, FTP, HTTP, MySQL, and more with one engine.

Filter out failed-login noise

Set a condition on the response so patator drops attempts that match a failure pattern and reports only the ones that look like a valid login.

Control combinations and pacing

Iterate payload sets as a cartesian product or in lockstep, set --threads, and add a --rate-limit to stay within a target's tolerance.

Resume a large run

Set --start to an offset in the combined payload space to pick up a long brute-force run where it stopped instead of restarting from zero.

reference

patator inputs and flags

16 inputs
NameTypeFlagDescription
moduleSTRING·Module name selecting the protocol or service to test (ssh_login, ftp_login, http_fuzz, mysql_login).
hostsFILE·List of host:port targets.
usersFILE·Usernames to test.
passwordsFILE·Passwords to test.
threadsSTRING--threadsNumber of threads (default 10).
rate-limitSTRING--rate-limitWait N seconds between each attempt (default 0).
ignore-regexSTRING·Do not report responses that match this regex.
startSTRING--startStart from offset N in the product of all payload sets.

Showing key inputs. patator exposes 16 inputs in total.

Full flag reference (16 inputs)
NameTypeFlagDescription
yesBOOLEAN-yautomatically answer yes for all questions
stopSTRING--stopstop at offset N
debugBOOLEAN--debugenable debug messages
hostsFILE·list of host:port targets
startSTRING--startstart from offset N in the product of all payload sets
usersFILE·usernames to test
groupsSTRING--groupsiterate over payload sets simultaneously (pitchfork) instead of the cartesian product; default is '0,1..n'
moduleSTRING·module name
threadsSTRING--threadsnumber of threads (default is 10)
timeoutSTRING--timeoutwait N seconds for a response before retrying payload (default is 0)
passwordsFILE·passwords to test
rate-limitSTRING--rate-limitwait N seconds between each attempt (default is 0)
max-retriesSTRING--max-retriesskip payload after N retries (default is 4) (-1 for unlimited)
ignore-regexSTRING·do not report responses that match this regex
auto-progressSTRING--auto-progressautomatically display progress every N seconds
condition-delimiterSTRING-Xdelimiter string in conditions (default is ',')

example

Run patator

patator · command
# SSH login brute force, drop failed attempts, paced at 1s
patator ssh_login host=198.51.100.10 user=FILE0 password=FILE1 0=users.txt 1=passwords.txt --threads 5 --rate-limit 1 -x ignore:mesg='Authentication failed'
sample output
17:42:03 patator    INFO - Starting Patator v1.0 (https://github.com/lanjelot/patator)
17:42:03 patator    INFO - code  size    time | candidate                        |   num | mesg
17:42:03 patator    INFO - -----------------------------------------------------------------
17:42:05 patator    INFO - 1     22      0.031 | root:root                        |     3 | Authentication failed.
17:42:06 patator    INFO - 1     22      0.028 | admin:admin                      |    11 | Authentication failed.
17:42:08 patator    INFO - 0     40      0.412 | deploy:s3cret2026                |    27 | SSH-2.0-OpenSSH_8.9
17:42:11 patator    INFO - Hits/Done/Skip/Fail/Size: 1/40/0/0/40
17:42:11 patator    INFO - Time: 0h 0m 8s.

guidance

Choosing patator

Use patator for multi-protocol credential testing with precise response filtering after host and port discovery. For a single HTTP panel form, a dedicated tool or hydra http-post-form may be simpler. For broad AD or SMB spraying, prefer netexec.

hydra

Parallel login cracker across many protocols. patator adds modular response filtering and payload offsets.

medusa

Another parallel brute forcer. patator makes hit-versus-noise separation easier via ignore-regex and conditions.

netexec

Multi-protocol enumeration and spraying. patator is the focused per-module brute-force engine.

faq

patator questions

Size 0 means no payloads loaded — empty wordlists or a FILEn path that does not resolve. Confirm users and passwords files have contents and map to real paths, then re-run.

Hits are responses kept after your filters. Done is attempts completed. Skip covers offsets such as --start. Fail is attempts that errored after retries. Size is the planned product of all payload sets.

Set ignore-regex on the node to drop known false positives, for example mesg='Authentication failed'. Tune --threads and --rate-limit when the target throttles or drops connections.

Pass the prior offset to --start to continue in the combined payload space. Use --stop to end at a chosen offset. Pair with host and service discovery upstream so modules target known services.

Pick hydra for a fast parallel spray with less filtering setup. Pick patator when module-level response filtering, --groups lockstep, or --start resume matter more than raw spray simplicity.

In http_fuzz, follow=1 makes patator follow HTTP redirects, and accept_cookie=1 stores cookies from each response and resends them on the next request. Pair them with before_urls to issue a prior request (for example to grab a CSRF token) before each attempt.

Run patator yourself

A host list and username and password files feed patator, which brute forces the service and writes the valid credentials as a queryable output.

Facts on this page come from the live Trickest tool library.