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.2
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.2.tar.gz | 165.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ansferatu-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 338.4 kB
Release files / ansferatu-0.1.2.tar.gz
| Download URL | ansferatu-0.1.2.tar.gz |
|---|---|
| Size | 165.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
42f41451eba26f9c5a6b0368877265c42204b866b970f09bfcedc82500c4086b
|
|
BLAKE2b-256 checksum How to use checksums |
0896139a9ddc1a417d04cf157e9e75fa526f9eed88e9ca5727af551f79b86dd6
|
| 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.2-py3-none-any.whl
| Download URL | ansferatu-0.1.2-py3-none-any.whl |
|---|---|
| Size | 173.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cc19c885c0325f5696b80d941a65f89cc800224bb05e9e0e8542d334f0a03ae1
|
|
BLAKE2b-256 checksum How to use checksums |
7425530419c3c52227e73597f55af25ee08a4e09816a5263af8183b168639575
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|