Does Holehe Have a Dry Run Mode?
No, holehe does not have a dry run mode. The open-source OSINT tool always performs live network requests to check email registration status across supported services.
Holehe is a command-line utility developed by megadose that checks whether an email address is registered on various websites. While it offers several flags to customize execution behavior, the codebase contains no mechanism to simulate or preview operations without contacting external services. Understanding this limitation is essential for users testing the tool or operating in restricted network environments.
How Holehe's CLI Arguments Work
The command-line interface in holehe/core.py defines a fixed set of arguments. Examining the source code reveals no hidden dry-run functionality.
Available Flags in holehe/core.py
The argument parser (approximately lines 80-96) exposes these options:
| Flag | Short | Purpose |
|---|---|---|
--only-used |
— | Display only sites where the email is found |
--no-color |
— | Disable colored terminal output |
--no-clear |
— | Prevent clearing the screen before displaying results |
--no-password-recovery |
-NP |
Skip password recovery attempt checks |
--csv |
-C |
Export results to a CSV file |
--timeout |
-T |
Configure HTTP request timeout (default: 10 seconds) |
None of these flags prevent network requests. Even --only-used still queries every module; it simply filters the output presentation.
The launch_module Execution Path
Every service check flows through launch_module, which unconditionally executes:
# Simplified structure from holehe/core.py
async def launch_module(module, email, client, out):
# Always performs the actual HTTP request
await module(email, client, out)
This architecture means module execution and network I/O are inseparable. There is no conditional branch to skip the await module(email, client, out) call based on a configuration flag.
Verifying Absence of Dry-Run Functionality
A comprehensive search of the repository confirms no dry-run implementation exists:
- No
--dryor--dry-runargument: Theargparseconfiguration inholehe/core.pylacks any such option - No "dry" string matches: Case-insensitive search across Python files returns no relevant results
- No documentation references: The
README.mddescribes all available flags without mentioning simulation modes - No test mode: Searching for "test" or "example" flags yields no alternative execution paths
Practical Implications for Users
Since holehe lacks dry-run capability, consider these operational realities:
Network Traffic Is Unavoidable
Running holehe example@example.com will always generate outbound HTTPS connections to every supported service. For users with:
- Metered connections: Data usage scales with the number of modules (~100+ services)
- Corporate proxies: All requests traverse your network infrastructure
- Rate-limited environments: Repeated executions may trigger IP blocks
Minimal Risk Mitigation: The -NP Flag
The no-password-recovery flag reduces query complexity without eliminating network traffic:
# Standard execution with full checks
holehe target@example.com
# Skip password recovery endpoints only
holehe target@example.com --no-password-recovery
# Combined with other output options
holehe target@example.com -NP --only-used --csv results.csv
Even with -NP,holehe still performs registration existence checks via live API calls and webpage scraping.
What a Dry-Run Mode Would Require
Implementing true dry-run functionality would require structural changes to holehe/core.py and all service modules:
- Argument extension: Add
--dry-runto the parser - Module interface modification: Pass dry-run state to each service checker
- Request interception: Replace
httpx.AsyncClientcalls with mock responses or logging stubs
As of the current implementation, no such abstraction layer exists. The modules directly embed HTTP logic without injection points for simulation.
Summary
- Holehe has no built-in dry run mode — every execution performs live network requests
- CLI flags control output formatting and check scope, not network behavior
launch_moduleinholehe/core.pyunconditionally executes HTTP calls through each service module- The
-NPflag only skips password recovery checks, not registration verification - Users requiring network isolation must modify source code or use external traffic interception tools
Frequently Asked Questions
How can I test holehe without making real requests?
You cannot using the official distribution. The tool is designed for live OSINT operations. For testing purposes, you would need to either: fork the repository and modify holehe/core.py to inject mock responses, or intercept traffic at the network level using tools like mitmproxy with recorded responses.
Does holehe cache results to avoid repeat queries?
No. Each invocation of holehe performs fresh HTTP requests to all targeted services. There is no disk-based or memory-based caching mechanism in holehe/core.py or the modules directory. Results are computed in real-time and discarded after output generation.
What is the purpose of the --only-used flag?
The --only-used flag filters the terminal output to show only successful matches — sites where the email is registered. However, this filter applies after all network requests complete. The flag does not reduce the number of services queried or prevent any HTTP traffic.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →