Fierce is a DNS reconnaissance tool used for locating non-contiguous IP space and hostnames against specified domains. It’s particularly useful for finding targets both inside and outside a corporate network.
# Kali/Debian
sudo apt install fierce
# Python pip
pip install fierce
fierce --domain <target_domain> [options]
# Basic domain enumeration
fierce --domain example.com
# With verbose output
fierce --domain example.com --verbose
# Specify DNS server
fierce --domain example.com --dns-servers 8.8.8.8
Option Description
--domainTarget domain to scan
--dns-serversDNS servers to use (comma-separated)
--subdomain-fileCustom wordlist for subdomain brute-forcing
--traverseScan IPs near discovered hosts
--searchSearch filter for –traverse
--rangeScan IP range (CIDR notation)
--delayDelay between lookups (seconds)
--threadsNumber of threads to use
--wideScan entire class C of discovered hosts
--connectAttempt HTTP connection to discovered hosts
# Fierce automatically attempts zone transfers
fierce --domain example.com
# Output shows:
# NS: ns1.example.com. ns2.example.com.
# SOA: ns1.example.com.
# Zone: success/failure
# Using default wordlist
fierce --domain example.com
# Using custom wordlist
fierce --domain example.com --subdomain-file /path/to/wordlist.txt
# Using SecLists wordlist
fierce --domain example.com --subdomain-file /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
# Scan specific IP range
fierce --range 192.168.1.0/24
# Scan range with DNS resolution
fierce --range 10.0.0.0/24 --dns-servers 10.0.0.1
# Scan adjacent IPs of discovered hosts
fierce --domain example.com --traverse 10
# With search filter
fierce --domain example.com --traverse 5 --search "example"
# Scan entire class C networks of discovered hosts
fierce --domain example.com --wide
# Use multiple DNS servers
fierce --domain example.com --dns-servers 8.8.8.8,8.8.4.4,1.1.1.1
# Use internal DNS servers
fierce --domain internal.corp --dns-servers 10.0.0.53,10.0.0.54
# Add delay between requests
fierce --domain example.com --delay 0.5
# Multi-threaded scanning
fierce --domain example.com --threads 10
NS: ns1.example.com. ns2.example.com.
SOA: ns1.example.com. (192.168.1.10)
Zone: success
{<DNS name @>: '@ 7200 IN SOA ns1.example.com. admin.example.com. ...'
<DNS name www>: 'www 7200 IN A 192.168.1.20'
<DNS name mail>: 'mail 7200 IN A 192.168.1.30'
<DNS name ftp>: 'ftp 7200 IN A 192.168.1.40'
...
}
Found: www.example.com (192.168.1.20)
Found: mail.example.com (192.168.1.30)
Found: vpn.example.com (192.168.1.50)
Found: admin.example.com (192.168.1.60)
# Save output for further processing
fierce --domain example.com > fierce_output.txt
# Extract IPs for nmap
fierce --domain example.com 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u > ips.txt
nmap -iL ips.txt -sV
# Pipe to other tools
fierce --domain example.com | tee results.txt
Wordlist Location
Default Built into fierce
SecLists subdomains /usr/share/seclists/Discovery/DNS/subdomains-top1million-*.txt
SecLists fierce /usr/share/seclists/Discovery/DNS/fierce-hostlist.txt
Amass default /usr/share/amass/wordlists/
Tool Use Case
fierceQuick DNS recon, zone transfers, subdomain enum
subfinderPassive subdomain enumeration
amassComprehensive subdomain enumeration
dnsreconDetailed DNS enumeration
dnsenumDNS enumeration with Google scraping
# Step 1: Initial fierce scan
fierce --domain target.com
# Step 2: If zone transfer fails, brute-force subdomains
fierce --domain target.com --subdomain-file /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
# Step 3: Scan adjacent IPs
fierce --domain target.com --traverse 5
# Step 4: Check HTTP services on discovered hosts
fierce --domain target.com --connect
# If no results, try different DNS servers
fierce --domain example.com --dns-servers 8.8.8.8
# Increase delay if getting rate limited
fierce --domain example.com --delay 1
# Use verbose mode for debugging
fierce --domain example.com --verbose
Fierce first attempts zone transfers on all discovered name servers
If zone transfer fails, it falls back to subdomain brute-forcing
The --traverse option is useful for finding additional hosts in the same network
Always have permission before scanning - DNS enumeration may be logged