This commit is contained in:
Ground-Zerro
2024-05-04 21:33:26 +11:00
parent ea65a2a223
commit 7f03918ba1
2 changed files with 96 additions and 4 deletions

92
dm-light/WgRoute.py Normal file
View File

@@ -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) # Вызов основной функции

View File

@@ -1,7 +1,8 @@
import dns.resolver import glob
import os import os
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
import glob
import dns.resolver
# Сброс счетчиков, объявление переменных # Сброс счетчиков, объявление переменных
successful_resolutions = 0 successful_resolutions = 0
@@ -11,7 +12,6 @@ unresolved_domains_file_name = "unresolved_domains.txt" # Имя файла с
result_file_name = "result.txt" # Имя файла результатов result_file_name = "result.txt" # Имя файла результатов
domain_files_pattern = "domain/*.txt" # Имя папки с txt файлами DNS domain_files_pattern = "domain/*.txt" # Имя папки с txt файлами DNS
pub_dns = "8.8.8.8" # Публичный DNS № 1 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"\nСопоставлено IP адресов доменам:", successful_resolutions)
print(f"Не удалось обработать доменных имен:", failed_resolutions) print(f"Не удалось обработать доменных имен:", failed_resolutions)
input("Нажмите \033[32mEnter\033[0m для продолжения...") # Для пользователей Windows при запуске из проводника input("Нажмите Enter для продолжения...") # Для пользователей Windows при запуске из проводника
if __name__ == "__main__": if __name__ == "__main__":