dnstwist
Installation
Sección titulada «Installation»From PyPI
Sección titulada «From PyPI»pip install dnstwist
From Source
Sección titulada «From Source»git clone https://github.com/elceef/dnstwist.git
cd dnstwist
pip install -e .
docker run -it elceef/dnstwist dnstwist example.com
Requirements
Sección titulada «Requirements»- Python 3.7+
dnspython— DNS resolutionrequests— HTTP requestsurllib3— URL parsingGeoIP2database (optional, for geolocation)
Basic Usage
Sección titulada «Basic Usage»Simple Permutation Check
Sección titulada «Simple Permutation Check»dnstwist example.com
Check and Resolve DNS
Sección titulada «Check and Resolve DNS»dnstwist -r example.com
Extended Output with Registered Domains
Sección titulada «Extended Output with Registered Domains»dnstwist -r --registered example.com
Verbose Mode
Sección titulada «Verbose Mode»dnstwist -v example.com
Permutation Types
Sección titulada «Permutation Types»Bitsquatting
Sección titulada «Bitsquatting»Domain names differing by single bit flip in DNS wire format.
dnstwist --bitsquatting example.com
Homoglyph Attack
Sección titulada «Homoglyph Attack»Visually similar characters (e.g., rn → m, 0 → O).
dnstwist --homoglyph example.com
Insertion
Sección titulada «Insertion»Add characters within domain name.
dnstwist --insertion example.com
Omission
Sección titulada «Omission»Remove single characters from domain.
dnstwist --omission example.com
Repetition
Sección titulada «Repetition»Double consecutive characters.
dnstwist --repetition example.com
Replacement
Sección titulada «Replacement»Replace characters with similar ones.
dnstwist --replacement example.com
Transposition
Sección titulada «Transposition»Swap adjacent characters.
dnstwist --transposition example.com
Vowel Swap
Sección titulada «Vowel Swap»Replace vowels with other vowels.
dnstwist --vowelswap example.com
Addition
Sección titulada «Addition»Add common TLD variations and prefixes/suffixes.
dnstwist --addition example.com
Hyphenation
Sección titulada «Hyphenation»Add hyphens at various positions.
dnstwist --hyphenation example.com
All Permutation Types
Sección titulada «All Permutation Types»dnstwist -a example.com
DNS Resolution
Sección titulada «DNS Resolution»Resolve A Records
Sección titulada «Resolve A Records»dnstwist -r example.com
Resolve AAAA Records (IPv6)
Sección titulada «Resolve AAAA Records (IPv6)»dnstwist -r --aaaa example.com
Resolve with Specific Nameserver
Sección titulada «Resolve with Specific Nameserver»dnstwist -r -ns 8.8.8.8 example.com
Check Registration Status
Sección titulada «Check Registration Status»dnstwist --registered example.com
Verify DNSSEC
Sección titulada «Verify DNSSEC»dnstwist -r --dnssec example.com
MX Record Checking
Sección titulada «MX Record Checking»Detect MX Records
Sección titulada «Detect MX Records»dnstwist -r example.com | grep MX
Full MX Verification
Sección titulada «Full MX Verification»dnstwist -r --mx example.com
Mail Server Analysis
Sección titulada «Mail Server Analysis»dnstwist -r -mx example.com | head -20
GeoIP Lookup
Sección titulada «GeoIP Lookup»Enable GeoIP Resolution
Sección titulada «Enable GeoIP Resolution»dnstwist -r --geoip example.com
Download GeoIP2 Database
Sección titulada «Download GeoIP2 Database»# Requires MaxMind account
curl https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=YOUR_KEY&suffix=tar.gz -o geolite2.tar.gz
tar xzf geolite2.tar.gz
Use Custom GeoIP Database
Sección titulada «Use Custom GeoIP Database»dnstwist -r --geoip --db /path/to/GeoLite2-City.mmdb example.com
Web Page Similarity Detection
Sección titulada «Web Page Similarity Detection»Fuzzy Hash Comparison
Sección titulada «Fuzzy Hash Comparison»dnstwist -r --ssdeep example.com
Detect Phishing Pages
Sección titulada «Detect Phishing Pages»dnstwist -r --ssdeep --verify example.com
HTTP Banner Grabbing
Sección titulada «HTTP Banner Grabbing»dnstwist -r --http example.com
HTTPS Certificate Analysis
Sección titulada «HTTPS Certificate Analysis»dnstwist -r --cert example.com
Output Formats
Sección titulada «Output Formats»CSV Output
Sección titulada «CSV Output»dnstwist -r --csv example.com > results.csv
JSON Output
Sección titulada «JSON Output»dnstwist -r --json example.com > results.json
List Format (Default)
Sección titulada «List Format (Default)»dnstwist -r example.com > results.txt
Domain Names Only
Sección titulada «Domain Names Only»dnstwist example.com | cut -d' ' -f1
Registered Domains Only
Sección titulada «Registered Domains Only»dnstwist -r example.com | grep -E "^[a-z].*\[" | cut -d' ' -f1
Dictionary-Based Generation
Sección titulada «Dictionary-Based Generation»Add Dictionary Words
Sección titulada «Add Dictionary Words»dnstwist -w /path/to/wordlist.txt example.com
Generate with Common Dictionary
Sección titulada «Generate with Common Dictionary»dnstwist -w /usr/share/dict/words example.com
Dictionary-Only Mode
Sección titulada «Dictionary-Only Mode»dnstwist -w wordlist.txt --dictionary-only example.com
Wordlist Format
Sección titulada «Wordlist Format»# One word per line
malware
phishing
security
admin
Combine with Permutations
Sección titulada «Combine with Permutations»dnstwist -w wordlist.txt -a example.com
WHOIS Lookups
Sección titulada «WHOIS Lookups»Basic WHOIS Query
Sección titulada «Basic WHOIS Query»dnstwist -r example.com | grep WHOIS
Registrar Information
Sección titulada «Registrar Information»whois examplee.com
Bulk WHOIS Batch
Sección titulada «Bulk WHOIS Batch»dnstwist -r --whois example.com
Monitoring and Automation
Sección titulada «Monitoring and Automation»Run Periodic Checks (Bash Loop)
Sección titulada «Run Periodic Checks (Bash Loop)»while true; do
dnstwist -r --json example.com > check_$(date +%s).json
sleep 3600 # Check hourly
done
Continuous Monitoring with cron
Sección titulada «Continuous Monitoring with cron»# Add to crontab -e
0 * * * * /usr/local/bin/dnstwist -r --json example.com >> /var/log/dnstwist.log
Real-Time Monitoring Script
Sección titulada «Real-Time Monitoring Script»#!/bin/bash
domain="example.com"
baseline=$(dnstwist -r --json "$domain")
while true; do
current=$(dnstwist -r --json "$domain")
if [ "$baseline" != "$current" ]; then
echo "Change detected at $(date)" | mail -s "dnstwist Alert" admin@example.com
baseline="$current"
fi
sleep 300
done
Log Results to Database
Sección titulada «Log Results to Database»dnstwist -r --json example.com | jq . | sqlite3 dnstwist.db
API and CI Integration
Sección titulada «API and CI Integration»JSON API Output for Integration
Sección titulada «JSON API Output for Integration»dnstwist -r --json example.com | jq '.[] | select(.dns_a != null)'
Parse JSON Results
Sección titulada «Parse JSON Results»dnstwist -r --json example.com | jq '.[] | {domain, dns_a, dns_aaaa, whois_created}'
Filter Registered Domains
Sección titulada «Filter Registered Domains»dnstwist -r --json example.com | jq '.[] | select(.dns_a != null) | .domain'
GitHub Actions Integration
Sección titulada «GitHub Actions Integration»name: dnstwist Security Check
on: [schedule]
jobs:
dnstwist:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v2
- run: pip install dnstwist
- run: dnstwist -r --json example.com > results.json
- uses: actions/upload-artifact@v2
with:
name: dnstwist-results
path: results.json
GitLab CI Integration
Sección titulada «GitLab CI Integration»dnstwist_scan:
image: python:3.9
script:
- pip install dnstwist
- dnstwist -r --json example.com > results.json
artifacts:
paths:
- results.json
Jenkins Pipeline
Sección titulada «Jenkins Pipeline»pipeline {
stages {
stage('dnstwist Scan') {
steps {
sh 'pip install dnstwist'
sh 'dnstwist -r --json example.com > results.json'
archiveArtifacts artifacts: 'results.json'
}
}
}
}
Advanced Options
Sección titulada «Advanced Options»Custom Threads for Parallel Resolution
Sección titulada «Custom Threads for Parallel Resolution»dnstwist -r --threads 10 example.com
Set DNS Query Timeout
Sección titulada «Set DNS Query Timeout»dnstwist -r --timeout 2 example.com
Name Server Configuration
Sección titulada «Name Server Configuration»dnstwist -r -ns 1.1.1.1 example.com
Disable DNSSEC Validation
Sección titulada «Disable DNSSEC Validation»dnstwist -r --no-dnssec example.com
Quiet Mode (Minimal Output)
Sección titulada «Quiet Mode (Minimal Output)»dnstwist -q example.com
Typical Workflows
Sección titulada «Typical Workflows»Complete Phishing Investigation
Sección titulada «Complete Phishing Investigation»dnstwist -r -a --ssdeep --geoip --json example.com > investigation.json
Monitor High-Risk Domains
Sección titulada «Monitor High-Risk Domains»for domain in company.com company.org company.net; do
echo "=== $domain ==="
dnstwist -r --registered "$domain"
done
Generate Squatting Report
Sección titulada «Generate Squatting Report»dnstwist -r --csv -a example.com > squatting_report.csv
# Then import into spreadsheet for analysis
Check Permutations Without Resolution
Sección titulada «Check Permutations Without Resolution»dnstwist example.com | wc -l # Total permutations
dnstwist example.com # List all potential domains
Find Only Suspicious Registrations
Sección titulada «Find Only Suspicious Registrations»dnstwist -r example.com | grep -E "\[A\]|\[MX\]" | grep -v "$(dig +short example.com)"
Performance Tips
Sección titulada «Performance Tips»- Reduce Threads for API Rate Limits:
--threads 2on restricted networks - Skip DNS Verification: Remove
-rflag for faster enumeration - Filter by Permutation Type: Use specific flags instead of
-ato reduce output - Export to CSV Early: Process data in spreadsheet tools rather than terminal
- Batch Multiple Domains: Create script to iterate and append to single JSON
Common Issues
Sección titulada «Common Issues»DNS Timeout
Sección titulada «DNS Timeout»# Increase timeout value
dnstwist -r --timeout 5 example.com
Rate Limiting
Sección titulada «Rate Limiting»# Add delay between requests
dnstwist -r --threads 1 example.com
GeoIP Database Not Found
Sección titulada «GeoIP Database Not Found»# Ensure database is in expected location
dnstwist -r --geoip --db ~/GeoLite2-City.mmdb example.com
Memory Usage with Large Wordlists
Sección titulada «Memory Usage with Large Wordlists»# Process in chunks instead
split -l 1000 wordlist.txt chunk_
for chunk in chunk_*; do
dnstwist -w "$chunk" example.com
done
Security Best Practices
Sección titulada «Security Best Practices»- Responsible Disclosure: Only test domains you own or have authorization for
- Rate Limiting: Respect DNS provider rate limits and ISP policies
- Logging: Enable verbose mode during investigations for audit trails
- Automation Consent: Inform stakeholders of automated monitoring
- Data Privacy: Securely store results containing sensitive information
- Legal Compliance: Verify domain monitoring is within acceptable use policies