Skip to content

Repository files navigation

AtDork – Professional OSINT Dorking Tool

VersionPythonLicensePlatformTestsLinesPyPI DownloadsWelcome New Contributor

AtDork is a powerful, ethical OSINT tool that performs advanced search queries (Google Dorks) across multiple search engines simultaneously. Designed for security researchers, penetration testers, and bug bounty hunters.


Why AtDork?

  • 🚀 Blazing fast – Multi‑threaded batch processing with configurable concurrency.
  • 🔍 Multi‑engine – Queries DuckDuckGo, Google, Bing, Startpage, Yandex, Yahoo, and more.
  • 🛡️ Anonymous – Built‑in proxy rotation, Tor integration, strict mode to prevent IP leaks. IP leak detection (--ip-guard) stops the scan immediately if your real IP is exposed.
  • 🧹 Clean results – Automatic spam filtering, URL validation, and deduplication.
  • 📊 Professional output – Export to JSON, CSV, TXT; SQLite database for history and resume. CSV exports are protected against formula injection.
  • 🎯 Smart filtering – Vulnerability signature detection for WordPress, Joomla, SQLi, and more.
  • 📝 Template system – Curated YAML‑based dork collections for instant productivity.
  • 🗂️ Local dork database – Load pre-built, categorized dork collections straight from disk (see Database Dorks below).
  • 🌐 GHDB scraper – Pull fresh dorks directly from the public Exploit-DB Google Hacking Database, filterable by category and year.
  • ⚙️ Highly configurable – 60+ CLI flags to control every aspect of your search.
  • 🔧 Post‑processing – Execute external commands on discovered URLs (--exec).
  • 💾 Caching – Cache search results locally to avoid redundant requests and enable offline access.
  • 🔒 Safe logging – Proxy credentials are automatically redacted from log files to prevent accidental leaks.
  • 🔔 Notifications – Send batch summaries to Discord, Slack, or Telegram webhooks.

Installation

From PyPI (Recommended)

pip install atdork

From Source

git clone https://github.com/amnottdevv/atdork.git
cd atdork
pip install .

Verify Installation

atdork --version
# Output: atdork 1.3.9.6

Quick Start

1. Your First Search

atdork -q "site:gov filetype:pdf" -r 10

This finds PDF files on government websites and displays the top 10 results.

2. Save Results to a File

atdork -q "intitle:index.of mp3" -r 20 --format json -o music.json

3. Batch Processing

Create a file dorks.txt:

site:edu filetype:xls
inurl:admin login
intitle:"index of" "backup"

Run them all at once:

atdork --batch-file dorks.txt -r 30 --format csv -o results.csv

4. Search with Proxy (Anonymous)

atdork -q "confidential filetype:docx" --proxy "http://user:pass@proxy:8080" --strict

Detailed Usage

Single Query

atdork -q "inurl:product.php?id=" -r 50 --backend google --region uk-en --safesearch off
FlagPurpose
-qYour dork query
-rNumber of results (max 100)
--backendSearch engine: google, bing, duckduckgo, startpage, yandex, auto
--regionRegion code: us-en, uk-en, de-de, ru-ru, etc.
--safesearchon, moderate, off

Batch Processing with Multi‑Threading

atdork --batch-file dorks.txt -r 40 --concurrency 5 --delay 2 --format json -o batch_results.json
FlagPurpose
--batch-fileText file with one dork per line
--concurrencyNumber of parallel threads (1‑10)
--delaySeconds between requests (avoid rate limits)
-oSave all results to a single file
--output-dirSave each query result as a separate file

Template Dorks (Pre‑Built)

List available templates:

atdork --list-templates

Use a template:

atdork --template sqli --target example.com -r 30

Combine multiple templates with custom queries:

atdork --template sqli,wordpress,exposed_config -q "site:gov filetype:pdf" -r 25

Preview what a template will do:

atdork --template login_panels --preview

Run only specific dorks from a template:

atdork --template sqli --select 1,3,5 -r 20
FlagPurpose
--templateTemplate name(s), comma‑separated
--targetDomain to substitute {target} in template dorks
--selectRun specific dork numbers from template
--list-templatesShow all available templates
--previewShow dorks without executing
--template-pathCustom template folder

Database Dorks

AtDork ships with a local, categorized collection of dork files that you can load directly without hitting the network. This is useful for offline prep, reproducible test runs, or building your own batch lists from a known-good set.

# Extract the bundled dork collection into ./database
atdork --extract-database
# Extract to a custom location, overwriting if it already exists
atdork --extract-database-to mydorks/ --force
# List the available files and how many dorks each contains
atdork --list-database-dork
# Load dorks from one file and run them
atdork --database-dork 01_footholds -r 20
# Combine multiple files
atdork --database-dork 01_footholds,03_sensitive_directories -r 20
# Randomly sample N dorks from the combined set (reproducible with a seed)
atdork --database-dork 01_footholds --database-r 10 --database-seed 42
# Preview what would be loaded without running anything
atdork --database-dork 01_footholds --database-preview
# Point at a custom database root instead of auto-discovery
atdork --database-dork subdir/file --database-path /path/to/custom/db
FlagPurpose
--extract-databaseExtract the bundled dork collection to ./database
--extract-database-to PATHExtract to a custom destination
--database-dork-extract PATHShortcut for the two flags above
--forceOverwrite an existing extraction destination
--list-database-dorkList available dork files with counts
--database-dork SPECLoad dorks from file(s); comma-separated, subdirectories supported
--database-r NRandomly select N dorks from the combined set
--database-seed NSeed for reproducible --database-r selection
--database-path PATHCustom database root directory
--database-previewPreview loaded dorks without executing them

The files are organized by topic (web misconfigurations, exposed directories/files, exposed panels, and similar categories relevant to authorized security testing). Run atdork --list-database-dork to see exactly what's available in your build.

GHDB Scraper

Pull dorks live from the public Exploit-DB Google Hacking Database, with optional category/year filters.

# Show available GHDB categories and how many dorks each has
atdork --ghdb-scraper --ghdb-list-categories
# Scrape and save dorks about exposed passwords from 2022-2024
atdork --ghdb-scraper --ghdb-categories password --ghdb-years 2022-2024 --ghdb-file dorks.txt
# Limit total results, save as JSON (includes metadata)
atdork --ghdb-scraper --ghdb-categories 9,12 --ghdb-r 50 --ghdb-file dorks.json
FlagPurpose
--ghdb-scraperRun the GHDB scraper mode
--ghdb-fileSave results to file (.json or .txt, auto-detected)
--ghdb-categoriesFilter by category name (partial match) or numeric ID, comma-separated
--ghdb-yearsFilter by year(s), e.g. 2024 or 2020-2023,2024
--ghdb-rLimit total number of dorks returned after filtering
--ghdb-list-categoriesList GHDB categories with dork counts, then exit

Proxy & Anonymity

# Single proxy
atdork -q "target" --proxy "http://user:pass@host:8080"# Multiple proxies (comma‑separated)
atdork -q "target" --proxy "http://p1:8080,socks5://p2:1080"# From file
atdork -q "target" --proxy-file proxies.txt
# Tor integration
atdork -q "target" --tor --strict
# Strict mode (fail if all proxies down)
atdork -q "target" --proxy-file proxies.txt --strict
# Proxy management
atdork -q "target" --proxy-file proxies.txt --proxy-cooldown 120 --max-failures 3

Proxy file format (proxies.txt):

# HTTP proxies
http://user:pass@dc1.provider.com:3128
http://user:pass@dc2.provider.com:3128
# SOCKS proxies
socks5://res1.provider.com:1080
socks5h://res2.provider.com:1080
# Comments with # are ignored

Vulnerability Filtering

# Basic WordPress detection
atdork -q "inurl:wp-content" -r 30 --filter-vuln wordpress
# Link‑only filter (only matches URLs)
atdork -q "site:example.com" --filter-vuln wordpress-link

Create your own wordlist files in wordlists/ folder:

# wordlists/myplatform.txt
wp-content
wp-admin
wp-includes

Resilience & Rate Limiting

# Enable circuit breaker & backend fallback
atdork --batch-file dorks.txt --resilient
# Adaptive delay based on backend response
atdork --batch-file dorks.txt --adaptive-delay
# Combined
atdork --batch-file dorks.txt --resilient --adaptive-delay --concurrency 5 --delay 2

Output Validation

# Disable all filtering (keep raw results)
atdork -q "test" --no-validate
# Strict filtering (require non‑empty snippet)
atdork -q "test" --strict-filter
# Granular control
atdork -q "test" --validate-url only --validate-title 10 --validate-desc 50 --validate-spam true

Database & History (SQLite)

# Resume interrupted batch
atdork --resume
# View search history
atdork --history
# Export database to JSON/CSV
atdork --export-db all_results.json
# Disable duplicate URL detection
atdork -q "test" --no-dedup

IP Leak Detection

# Halt immediately if your real IP is exposed while using proxies
atdork --batch-file dorks.txt --proxy-file proxies.txt --strict --ip-guard

Post‑Processing

# Run a command for every discovered URL
atdork -q "inurl:admin" -r 10 --exec "curl -I {} | grep Server"# Run a command only on URLs flagged as vulnerable
atdork -q "inurl:wp-content" -r 30 --filter-vuln wordpress --exec-on-vuln "wpscan --url {}"

Cache Results

# Cache search results for 24 hours (default)
atdork -q "site:gov filetype:pdf" -r 20 --cache
# Use cached results only (offline mode)
atdork -q "site:gov filetype:pdf" -r 20 --cache-only
# Clear all cached data
atdork --clear-cache

Notifications

Send batch summaries to Discord, Slack, or Telegram after searches complete.

Discord Webhook

atdork --batch-file dorks.txt -r 20 \
--notify "discord:https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN"

Slack Webhook

atdork --batch-file dorks.txt -r 20 \
--notify "slack:https://hooks.slack.com/services/YOUR/WEBHOOK/URL"

Telegram Bot

# Format: telegram:<bot_token>/<chat_id>
atdork --batch-file dorks.txt -r 20 \
--notify "telegram:123456789:ABCDefGHIjklmnoPQRstUVwxyz/987654321"

Notification Options

# Send notification only if vulnerable results were found
atdork --batch-file dorks.txt --notify "discord:..." --notify-if-vuln

Setup Instructions:

  1. Discord: Create a webhook in your server's channel settings > Integrations > Webhooks
  2. Slack: Create an incoming webhook at api.slack.com/apps > Create New App > Incoming Webhooks
  3. Telegram: Get your bot token from @BotFather and chat ID by messaging your bot and visiting https://api.telegram.org/bot<TOKEN>/getUpdates

Complete Flag Reference

FlagDescriptionDefault
-q, --querySearch dork query
-r, --max-resultsMaximum results (1‑100)20
--batch-fileFile with one query per line
--batch-separatorSeparator for inline queries;
-o, --outputSave results to file
--output-dirSave each query to separate file
--formatOutput format: txt, json, csvtxt
-v, --verboseShow results in batch mode
--no-snippetHide snippets in terminal
--templateLoad dork template(s)
--targetDomain for template substitution
--selectSelect specific dorks from template
--list-templatesList available templates
--template-pathCustom template directory
--previewPreview template dorks
--extract-databaseExtract bundled dork collection to ./database
--extract-database-toCustom extraction destination
--database-dork-extractShortcut: extract to given path
--forceOverwrite existing extraction destination
--list-database-dorkList available database dork files
--database-dorkLoad dorks from database file(s)
--database-rRandomly select N dorks from database
--database-seedSeed for reproducible --database-r
--database-pathCustom database root directory
--database-previewPreview database dorks without running
--ghdb-scraperRun GHDB scraper mode
--ghdb-fileSave GHDB results to file
--ghdb-categoriesFilter GHDB by category name/ID
--ghdb-yearsFilter GHDB by year(s)/range
--ghdb-rLimit total GHDB results
--ghdb-list-categoriesList GHDB categories, then exit
--regionSearch regionus-en
--safesearchon, moderate, offmoderate
--timelimitd, w, m, y
--backendSearch engine(s)auto
--user-agentCustom User‑Agentauto‑rotate
--timeoutRequest timeout (seconds)10
--retriesRetry attempts on failure2
--delayDelay between requests (seconds)0
--proxyComma‑separated proxy URLs
--proxy-fileFile with proxy URLs
--torUse Tor SOCKS5 proxy
--strictFail if all proxies down
--proxy-cooldownCooldown after proxy failure (seconds)60
--max-failuresRemove proxy after N failures3
--concurrencyParallel threads for batch1
--resilientEnable circuit breaker & fallback
--adaptive-delayEnable adaptive rate limiting
--ip-guardEnable IP leak detection
--execExecute command on each result URL
--exec-on-vulnExecute command on vulnerable results
--exec-parallelParallel --exec processes1
--exec-timeoutTimeout per --exec command (seconds)30
--cacheEnable result caching
--cache-dbCache database pathatdork_cache.db
--cache-ttlCache TTL in hours24
--cache-onlyUse cache only, no network requests
--clear-cacheDelete all cache before starting
--notifySend notification to webhook (<platform>:<url>)
--notify-if-vulnOnly notify if vulnerable results found
--no-validateDisable spam filtering
--strict-filterStrict validation
--validate-urlURL validation modeall
--validate-titleMinimum title length5
--validate-descMinimum description length10
--validate-spamEnable spam detectiontrue
--filter-vulnVulnerability platform filter
--no-fallback-backendsDisable backend fallback
--no-verifyDisable SSL verification
--log-fileLog file pathatdork.log
--db-pathSQLite history/dedup database pathatdork.db
--resumeResume pending queries
--historyShow search history
--no-dedupDisable URL deduplication
--export-dbExport history database to file
--configYAML config file path
--interactiveInteractive mode
--debugEnable debug logging
--versionShow version and exit

Real‑World Use Cases

Bug Bounty Reconnaissance with Full Protection

atdork --template sqli,xss,lfi --target target.com \
--proxy-file proxies.txt --strict --resilient --ip-guard \
--format json -o recon.json

Reproducible Recon Runs from the Local Database

atdork --database-dork 01_footholds,03_sensitive_directories \
--database-r 25 --database-seed 7 \
--proxy-file proxies.txt --format json -o recon_batch.json

Finding Admin Panels

atdork -q 'intitle:"admin panel" inurl:login' -r 30 --backend google --region uk-en

WordPress Vulnerability Scanning with Post‑Processing

atdork -q "inurl:wp-content site:example.com" -r 40 \
--filter-vuln wordpress \
--exec-on-vuln "wpscan --url {} --enumerate p" \
--exec-parallel 2 --exec-timeout 60

Automated Weekly Monitoring with Notifications

# Add to crontab (Linux/macOS)
0 6 ** 1 cd /path/to/atdork && atdork --batch-file weekly_dorks.txt --format csv --output-dir /reports/$(date +\%Y-\%W)/ --notify "slack:https://hooks.slack.com/services/YOUR/WEBHOOK/URL"

Configuration File

Create atdork.yaml for persistent settings:

max_results: 30region: "uk-en"safesearch: "off"delay: 1.0format: "json"output_dir: "./results"proxy_file: "proxies.txt"notify: "discord:https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN"

AtDork automatically loads this file from the current directory. CLI flags override YAML values.


Troubleshooting

ProblemSolution
Rate limited (429)Add --delay 3, use --proxy-file, or enable --adaptive-delay
No resultsTry different --backend (e.g., startpage, yandex) or --region
Proxy failsCheck format: scheme://user:pass@host:port
Batch stuckReduce --concurrency, add --timeout 15, enable --resilient
Install errorUse pip install -e . for development mode
IP leak with --strictEnable --ip-guard to detect leaks early; use SOCKS5h proxies
All backends exhaustedEnable --resilient to activate backend fallback chain
CSV opens with formulasUpdate to v1.3.8+ (CSV injection fixed)
Proxy credentials in logsUpdate to v1.3.8+ (credentials are now redacted)
Notification not sentCheck webhook format and URL; ensure no trailing spaces; verify platform credentials
"Database directory not found"Run atdork --extract-database first, or pass --database-path

Project Structure

atdork/
├── atdork.py # CLI entry point
├── core/
│ ├── scanner.py # Search engine integration
│ ├── batch_runner.py # Batch execution (seq/parallel, resilience)
│ ├── proxy_manager.py # Proxy pool management
│ ├── filter_vuln.py # Vulnerability signature filtering
│ ├── template_dork.py # YAML template loader
│ ├── database_dork.py # Local dork database loader/extractor
│ ├── ghdb_scraper.py # Exploit-DB GHDB scraper
│ ├── post_processor.py # External command execution on results
│ ├── manage_cache.py # SQLite-based result caching
│ ├── notification.py # Discord, Slack, Telegram webhooks
│ ├── database.py # SQLite storage & export (history/dedup)
│ ├── config.py # YAML configuration loader
│ ├── logger.py # Rotating file logger
│ └── case/
│ ├── circuit_breaker.py # Prevent hammering dead backends
│ ├── ip_guard.py # Real IP leak detection
│ ├── error_classifier.py # Categorize exceptions
│ ├── fallback_manager.py # Intelligent backend/proxy switching
│ ├── retry_handler.py # Exponential backoff with jitter
│ ├── adaptive_delay.py # Per‑backend dynamic delay
│ ├── recovery_strategy.py # Map errors to recovery actions
│ └── stats.py # Runtime statistics collector
├── lib/
│ ├── display.py # Terminal output formatting
│ ├── storage.py # File export (TXT/JSON/CSV)
│ ├── validator.py # Spam/invalid result filtering
│ └── redactor.py # Proxy credential redaction
├── database/ # Bundled dork collection (extract with --extract-database)
├── wordlists/ # Vulnerability signatures & templates
├── tests/ # Unit tests (pytest)
├── pyproject.toml # Package configuration
└── README.md

Ethical Use & Disclaimer

AtDork is intended for legal, authorized security testing only. You must have explicit written permission from the target owner before scanning.

Prohibited uses:

  • Unauthorized access to systems or data
  • Harvesting information in violation of laws
  • Any activity that infringes on privacy or intellectual property rights

The developer assumes no liability for misuse of this software.


License

Distributed under the MIT License. See LICENSE for details.


Acknowledgements

  • tg12 – for responsibly disclosing critical security vulnerabilities (CSV injection and proxy credential leakage) and helping make AtDork safer for everyone.
  • Peter7896 – for the excellent pull request that fixed packaged wordlist resources, ensuring seamless functionality for pip install users.

Contact & Support

If you find this tool useful, consider leaving a ⭐ on GitHub!

Code Quality Metrics

ComplexityMaintainabilityCoveragePylint

MetricScoreStatus
Cyclomatic Complexity5.68 avg✅ Good
Maintainability Index63.9✅ Good
Test Coverage31.3%⚠️ Fair
Pylint Score8.76/100✅ Good

Analysis: atdork.py, core/, lib/ • Last updated: 2026-07-09 15:47:34 UTC

Releases

Packages

Contributors

Languages