import random
import string
import subprocess
import time
import argparse

def get_random_string(length=16):
	chars = string.ascii_letters + string.digits
	return ''.join(random.choices(chars, k=length))

def resolve_domain(domain):
	try:
		result = subprocess.run(
			["nslookup", "-type=A", domain],
			stdout=subprocess.DEVNULL,
			stderr=subprocess.DEVNULL
		)
		return result.returncode == 0
	except Exception as e:
		print(f"[!] Error resolving domain {domain}: {e}")
		return False
	
def main(base_domain, queries, delay):
	print(f"\n[+] Iniciando simulación DGA para '*.{base_domain}'\n")
	for i in range(1, queries + 1):
		subdomain = get_random_string().lower()
		fqdn = f"{subdomain}.{base_domain}"
		print(f"[{i}] Consultando: {fqdn}")
		
		success = resolve_domain(fqdn)
		if success:
			print("    [+] Respuesta recibida")
		else:
			print("    [-] Sin respuesta")
			
		time.sleep(delay)
		
	print(f"\n[+] Finalizado. Total de consultas realizadas: {queries}\n")
	
if __name__ == "__main__":
	parser = argparse.ArgumentParser(description="Simulador de tráfico DNS tipo DGA")
	parser.add_argument("-d", "--domain", required=True, help="Dominio base (ej. midominio.com)")
	parser.add_argument("-q", "--queries", type=int, default=10, help="Número de consultas DNS")
	parser.add_argument("-s", "--sleep", type=int, default=1, help="Segundos entre consultas")
	
	args = parser.parse_args()
	main(args.domain, args.queries, args.sleep)
	
	