import dns.resolver
import threading
import time
# Function to resolve a subdomain
def resolve_subdomain(domain, subdomain, results):
full_domain = f"{subdomain}.{domain}"
try:
answers = dns.resolver.resolve(full_domain, 'A')
for answer in answers:
results.append(full_domain)
print(f"Found: {full_domain} -> {answer}")
except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN):
pass
except Exception as e:
print(f"Error resolving {full_domain}: {e}")
# Function to perform DNS enumeration
def dns_enum(domain, subdomains):
results = []
threads = []
print(f"Starting DNS enumeration for {domain}...")
for subdomain in subdomains:
thread = threading.Thread(target=resolve_subdomain, args=(domain, subdomain, results))
threads.append(thread)
thread.start()
for thread in threads:
thread.join() # Wait for all threads to complete
return results
if __name__ == "__main__":
target_domain = input("Enter the target domain (e.g., example.com): ")
subdomain_list = [
"www", "mail", "ftp", "test", "dev", "api", "blog", "shop", "admin", "secure",
"staging", "portal", "test", "webmail", "status"
] # Add more subdomains as needed
start_time = time.time()
found_subdomains = dns_enum(target_domain, subdomain_list)
end_time = time.time()
print("\nEnumeration complete.")
print(f"Total subdomains found: {len(found_subdomains)}")
print(f"Time taken: {end_time - start_time:.2f} seconds")