DNS Enumeration Script

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