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")