Ansferatu
Multifunctional tool for HTTP reconnaissance, web crawling and web directory bruteforce. Based on PSpider.
Features
- Fast multi-URL crawling
- Fast multi-URL directory bruteforce
- Discover new subdomains without DNS bruteforce (e.g.
https://example.com→ many*.example.comhosts) - Optional headless browsing and automatic form fill-up (via Playwright)
- JSONL output (Nuclei/proxify-compatible)
Installation
Ansferatu is a regular Python package and requires Python 3.8+.
From PyPI:
pip3 install ansferatu
From source / GitHub:
pip3 install git+https://github.com/frostbits-security/ansferatu.git
# or, from a local checkout:
pip3 install .
Headless / form-filling support is optional. The --headless and --fill-forms
modes rely on Playwright. Install the extra and
download the Chromium runtime:
pip3 install 'ansferatu[headless]'
playwright install chromium
Installing the package exposes an ansferatu console command (equivalent to
python3 -m ansferatu).
How to run
Run via the ansferatu command. Use ansferatu --help (or ansferatu crawl --help)
to see all options.
crawl
Crawl one or more web sites. The main parameter is --limit (requests per subdirectory).
ansferatu crawl --url https://example.com -o ./results/ --limit 1
crawl --headless
Same crawl, but with Playwright headless extraction for qualifying pages.
Requires the headless extra (pip install 'ansferatu[headless]' && playwright install chromium).
ansferatu crawl --headless --url https://example.com -o ./results/
crawl --fill-forms
Extends the headless crawl with form detection and interaction: detects <form>
elements, fills fields with smart defaults (email, password, search, etc.), submits
them, and captures the resulting responses and new URLs. Implies --headless.
ansferatu crawl --fill-forms --url https://example.com -o ./results/
brute
Classic web directory bruteforce. Needs a wordlist.
ansferatu brute --url https://example.com -w ./wordlists/fuzz_big.txt -o ./results/
Use as a library
The package can be imported into other Python tools:
from ansferatu import common_crawler, common_brute_from_file
common_crawler(
url_list=["https://example.com"],
scope=["example.com"],
exclude_codes_list=[403, 404, 401],
visit_count_limit=10,
max_deep=2,
threads=10,
output_file="results.jsonl",
)
For lower-level control, build the spider directly:
from ansferatu.spider import WebSpider, TaskFetch
Docker
Build the image:
docker build -t ansferatu .
Run the container (the image's entrypoint is the ansferatu command):
docker run --rm -it -v /tmp/ansferatu_out:/ansferatu/results ansferatu \
crawl --url https://example.com -o /ansferatu/results/ --limit 1
Development
Editable install (source changes are picked up immediately):
pip3 install -e '.[headless,dev]'
Run the test suite:
pytest
Building & publishing to PyPI
The project is configured with pyproject.toml (PEP 621). Build the distribution
artifacts (source distribution + wheel):
pip3 install build
python3 -m build # writes dist/ansferatu-<version>.tar.gz and .whl
Validate and upload with Twine:
pip3 install twine
twine check dist/*
# Test upload first (recommended): https://test.pypi.org
twine upload --repository testpypi dist/*
# Real upload
twine upload dist/*
Notes:
- Bump
versioninpyproject.toml(and__version__inansferatu/__init__.py) before each release; PyPI rejects re-uploads of an existing version. - Uploading requires a PyPI account and an API token (configured via
~/.pypircor theTWINE_USERNAME=__token__/TWINE_PASSWORD=<token>environment variables).
Roadmap
- Dynamic dictionary generation for bruteforce
- Improved deduplication (Simhash / page-hash similarity)
- HTML reports alongside JSONL output
- Collect query parameters (GET and POST)
License
MIT — see LICENSE.
Metadata
Release files for ansferatu 0.1.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ansferatu-0.1.6.tar.gz | 180.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ansferatu-0.1.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 363.4 kB
Release files / ansferatu-0.1.6.tar.gz
| Download URL | ansferatu-0.1.6.tar.gz |
|---|---|
| Size | 180.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7c4b5d0f487f33b4749bb3a245e6e65f31cbb129c612602d1f105f694960be5c
|
|
BLAKE2b-256 checksum How to use checksums |
6efe64f78a52e88089ba5f67b1b4e7f439ec09c0bcf25adc2faf3e03a3674860
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / ansferatu-0.1.6-py3-none-any.whl
| Download URL | ansferatu-0.1.6-py3-none-any.whl |
|---|---|
| Size | 183.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e5ba4dad5119561a9a6e33a36b02c9ba832df6b6b90dd73c5540734da5f03169
|
|
BLAKE2b-256 checksum How to use checksums |
ecc9f71c9d498c09ad5e116ac56ce033e2eafa58559baabae2a718e8c40eebab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|