diff --git a/dm-light/WgRoute.py b/dm-light/WgRoute.py new file mode 100644 index 0000000..bda85b8 --- /dev/null +++ b/dm-light/WgRoute.py @@ -0,0 +1,92 @@ +import dns.resolver +import os +from concurrent.futures import ThreadPoolExecutor +import glob + +routerconf = "work.conf" + +# Сброс счетчиков, объявление переменных +successful_resolutions = 0 +failed_resolutions = 0 +unresolved_domains_file_name = "unresolved_domains.txt" # Имя файла с необработанными доменами +result_file_name = "result.txt" # Имя файла результатов +domain_files_pattern = "domain/*.txt" # Имя папки с txt файлами DNS +pub_dns = "8.8.8.8" # Публичный DNS № 1 + + +# Функция записи разрешенных IP-адресов в файл .conf +def write_allowed_ips(resolved_ips): + # Открываем файл routerconf для чтения и чтения содержимого + with open(routerconf, 'r') as f: + lines = f.readlines() + + # Находим строку с "AllowedIPs = " и удаляем имеющиеся IP-адреса после нее + for i, line in enumerate(lines): + if line.startswith("AllowedIPs = "): + ips = ", ".join(resolved_ips) + "/32\n" + lines[i] = "AllowedIPs = " + ips + break + + # Записываем обновленное содержимое в файл + with open(routerconf, 'w') as f: + f.writelines(lines) + + +# Функция разрешения DNS-имени с использованием заданного DNS-сервера +def resolve_dns(domain): + global successful_resolutions, failed_resolutions + ip_addresses = [] # Изменение на список для хранения нескольких IP-адресов + try: + answers = dns.resolver.resolve(domain, 'A') + for rdata in answers: + ip_address = rdata.address + successful_resolutions += 1 + print(f"{domain} IP адрес: {ip_address}") + ip_addresses.append(ip_address) # Добавление IP-адреса в список + return domain, ip_addresses # Возвращаем домен и список IP-адресов + except dns.resolver.NXDOMAIN: + failed_resolutions += 1 + print(f"Не удалось обработать домен: {domain}, Не существует") + return None, None + except dns.resolver.NoAnswer: + failed_resolutions += 1 + print(f"Не удалось обработать домен: {domain}, Нет ответа") + return None, None + except dns.resolver.Timeout: + failed_resolutions += 1 + print(f"Не удалось обработать домен: {domain}, Тайм-аут") + return None, None + + +# Основная +def resolve_dns_in_threads(domain_files, num_threads=20): + global successful_resolutions, failed_resolutions + resolved_ips = set() # Создание множества для хранения IP обработанных доменов + + # Выполнение резолва в нескольких потоках + with ThreadPoolExecutor(max_workers=num_threads) as executor: + futures = [] + for domain_file in domain_files: + if os.path.isfile(domain_file): + with open(domain_file, 'r', encoding='utf-8-sig') as f: + domains = [line.strip() for line in f] + for domain in domains: + future = executor.submit(resolve_dns, domain) + futures.append(future) + + for future in futures: + domain, ip_addresses = future.result() + if ip_addresses: + resolved_ips.update(ip_addresses) # Добавление всех IP-адресов в множество + + # Запись разрешенных IP-адресов в файл routerconf + write_allowed_ips(resolved_ips) # Запись разрешенных IP-адресов в файл routerconf + + print(f"\nСопоставлено IP адресов доменам:", successful_resolutions) + print(f"Не удалось обработать доменных имен:", failed_resolutions) + + +if __name__ == "__main__": + script_directory = os.path.dirname(os.path.abspath(__file__)) # Получение пути к директории с исполняемым файлом + domain_files = glob.glob(os.path.join(script_directory, domain_files_pattern)) # Создание списка txt файлов в директории "domain" + resolve_dns_in_threads(domain_files) # Вызов основной функции diff --git a/dm-light/dm-light.py b/dm-light/dm-light.py index 3ab5dc8..863a600 100644 --- a/dm-light/dm-light.py +++ b/dm-light/dm-light.py @@ -1,7 +1,8 @@ -import dns.resolver +import glob import os from concurrent.futures import ThreadPoolExecutor -import glob + +import dns.resolver # Сброс счетчиков, объявление переменных successful_resolutions = 0 @@ -11,7 +12,6 @@ unresolved_domains_file_name = "unresolved_domains.txt" # Имя файла с result_file_name = "result.txt" # Имя файла результатов domain_files_pattern = "domain/*.txt" # Имя папки с txt файлами DNS pub_dns = "8.8.8.8" # Публичный DNS № 1 -pub_dns_alt = "208.67.222.222" # Публичный DNS № 2 # Постобработка файла вывода @@ -101,7 +101,7 @@ def resolve_dns_in_threads(domain_files, result_file, num_threads=20): print(f"\nСопоставлено IP адресов доменам:", successful_resolutions) print(f"Не удалось обработать доменных имен:", failed_resolutions) - input("Нажмите \033[32mEnter\033[0m для продолжения...") # Для пользователей Windows при запуске из проводника + input("Нажмите Enter для продолжения...") # Для пользователей Windows при запуске из проводника if __name__ == "__main__":