massdns
High-performance DNS stub resolver for bulk lookups.
Quickstart
# Resolve subdomain list
massdns -r resolvers.txt -t A -o S -w results.txt subs.txt
# Simple resolve
massdns -r resolvers.txt -t A subs.txt
# With output parsing
massdns -r resolvers.txt -t A -o S subs.txt | awk '{print $1}' | sed 's/.$//'
Core Concepts
| Concept |
Description |
| Stub resolver |
Sends queries to upstream resolvers |
| Bulk lookups |
Handle millions of queries fast |
| Resolvers |
List of DNS servers to query |
Syntax
massdns [options] <domainlist>
Options
Input/Output
| Option |
Description |
-r <file> |
Resolver list (required) |
-w <file> |
Output file |
-o <format> |
Output format (S, F, J, L) |
-t <type> |
Record type (A, AAAA, CNAME, etc.) |
Output Formats
| Format |
Description |
S |
Simple (just answers) |
F |
Full (all sections) |
J |
JSON (ndjson) |
L |
List (one per line) |
Performance
| Option |
Description |
-s <n> |
Concurrent queries (default 10000) |
-c <n> |
Resolve count per domain |
--processes <n> |
Parallel processes |
Filtering
| Option |
Description |
--filter <expr> |
Filter results |
--root |
Retry with root servers |
Recipes
Basic Resolution
# Resolve A records
massdns -r resolvers.txt -t A subs.txt
# With output file
massdns -r resolvers.txt -t A -o S -w results.txt subs.txt
# Simple format
massdns -r resolvers.txt -t A -o S subs.txt
Record Types
# A records
massdns -r resolvers.txt -t A subs.txt
# AAAA records
massdns -r resolvers.txt -t AAAA subs.txt
# CNAME records
massdns -r resolvers.txt -t CNAME subs.txt
# MX records
echo "target.com" | massdns -r resolvers.txt -t MX
# ANY (all records)
massdns -r resolvers.txt -t ANY subs.txt
Output Formats
# Simple (just answers)
massdns -r resolvers.txt -t A -o S subs.txt
# Full (detailed)
massdns -r resolvers.txt -t A -o F subs.txt
# JSON
massdns -r resolvers.txt -t A -o J subs.txt
# List format
massdns -r resolvers.txt -t A -o L subs.txt
Performance Tuning
# High concurrency
massdns -r resolvers.txt -t A -s 50000 subs.txt
# Lower for stability
massdns -r resolvers.txt -t A -s 5000 subs.txt
# Multiple attempts per domain
massdns -r resolvers.txt -t A -c 3 subs.txt
Resolver List
# Create resolver list
cat > resolvers.txt << EOF
8.8.8.8
8.8.4.4
1.1.1.1
1.0.0.1
9.9.9.9
EOF
# Use public resolvers
# https://public-dns.info/
Pipeline Integration
# subfinder → massdns
subfinder -d target.com -silent | massdns -r resolvers.txt -t A -o S
# Extract live hosts
massdns -r resolvers.txt -t A -o S subs.txt | \
awk '{print $1}' | sed 's/.$//' | sort -u
# Full pipeline
subfinder -d target.com -silent | \
massdns -r resolvers.txt -t A -o S | \
awk '{print $1}' | sed 's/.$//' | \
httpx -silent
Parse Output
# Extract resolved domains
massdns -r resolvers.txt -t A -o S subs.txt | awk '{print $1}' | sed 's/.$//'
# Extract IPs
massdns -r resolvers.txt -t A -o S subs.txt | awk '{print $3}'
# Domain to IP mapping
massdns -r resolvers.txt -t A -o S subs.txt | awk '{gsub(/\.$/, "", $1); print $1, $3}'
# JSON parsing
massdns -r resolvers.txt -t A -o J subs.txt | jq -r '.name'
Filter Dead/Wildcard
# Get only resolved
massdns -r resolvers.txt -t A -o S subs.txt | grep -v "NXDOMAIN"
# Unique resolved domains
massdns -r resolvers.txt -t A -o S subs.txt | \
awk '{print $1}' | sed 's/.$//' | sort -u
Output & Parsing
# Simple output parsing
massdns -r resolvers.txt -t A -o S -w results.txt subs.txt
cat results.txt | awk '{print $1}' | sed 's/.$//'
# JSON output
massdns -r resolvers.txt -t A -o J subs.txt > results.json
cat results.json | jq -r '.name'
# Extract unique IPs
awk '{print $3}' results.txt | sort -u
Troubleshooting
| Issue |
Solution |
| No results |
Check resolver list, domain format |
| Slow |
Increase -s, use more resolvers |
| Many timeouts |
Reduce -s, better resolvers |
| Wildcards |
Filter common IPs, use dnsx |
References