httpAlive is a high-performance, asynchronous web reconnaissance tool designed for security researchers and bug bounty hunters. It efficiently probes lists of subdomains and URLs to identify alive targets, extract metadata, fingerprint technology stacks, and detect WAF protection.
- Blazing Fast: Powered by
asyncioandhttpxfor extreme concurrency. - Memory Efficient: Uses a producer-consumer worker pool to handle millions of targets with negligible RAM usage.
- Tech Fingerprinting: Detects CMS (WordPress, Drupal), Frameworks (React, Next.js), and Web Servers.
- WAF Detection: Identifies protection layers like Cloudflare, Akamai, AWS WAF, Imperva, and more.
- Asynchronous DNS: Resolves IP addresses concurrently with HTTP probing.
- Flexible Piping: Seamlessly integrates into your existing recon pipeline via
stdin. - Professional Exports: Multi-format support for Text, JSON (Line-delimited), and CSV.
- Real-time Dashboard: Live-updating UI with progress bars and statistics using
rich.
Unlike traditional multi-threaded tools that suffer from high context-switching overhead, httpAlive uses a single-threaded event loop with an asynchronous worker pool:
- Queue System: URLs are fed into an
asyncio.Queue(either from a file orstdin). - Worker Pool: A set number of workers (default: 50) pull from the queue and perform non-blocking I/O.
- Connection Pooling: Reuses TCP connections via
httpx.Limitsto maximize speed and minimize socket exhaustion.
git clone https://github.com/aashishtechsecurity/httpAlive.git
cd httpAlive
pip install -r requirements.txtYou can install it globally to use the httpAlive command anywhere:
pip install .Read from a file and save to default httpAlive_output.txt:
python httpAlive.py -l subdomains.txtIntegrate with other tools like subfinder or assetfinder:
subfinder -d example.com -silent | python httpAlive.py -mc 200 -j alive.jsonMatch specific status codes and exclude others:
# Only find 200 OK and 302 Redirects, ignore 404s
python httpAlive.py -l targets.txt -mc 200,302 -hc 404python httpAlive.py -l list.txt -H "Cookie: session=xyz" -H "User-Agent: MyCustomScanner"Results are saved as line-delimited JSON (JSONL) for easy parsing with jq:
{"url": "example.com", "ip": "93.184.216.34", "status": 200, "size": 1256, "server": "ECS", "title": "Example Domain", "tech": ["Nginx"], "final_url": "https://example.com/"}Standard CSV structure for spreadsheet analysis:
URL, IP Address, Status, Size, Server, Title, Tech, Final URL
The tool currently fingerprints:
- WAFs: Cloudflare, Akamai, AWS WAF, Imperva, Sucuri, F5 BigIP.
- CMS: WordPress, Shopify, Drupal, Joomla.
- Frameworks: React, Angular, Vue.js, Next.js, Nuxt.js, Laravel.
- Servers: Nginx, Apache, IIS, LiteSpeed.
| Flag | Description | Default |
|---|---|---|
-l, --list |
Input file (use - or omit for stdin) |
None |
-c, --concurrency |
Number of concurrent workers | 50 |
-o, --output |
Text output file | httpAlive_output.txt |
-j, --json |
JSON output file (JSONL format) | None |
--csv |
CSV output file | None |
-mc, --match-code |
List of status codes to match (e.g. 200,302) | All |
-hc, --hide-code |
List of status codes to hide | None |
-H, --header |
Custom header (can be repeated) | None |
-t, --timeout |
Request timeout in seconds | 10 |
Distributed under the MIT License. See LICENSE for more information.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Author: Bande Aashish
Support: If you find this tool useful, give it a ⭐ on GitHub!