From 7b356c524a32c2f37e6c58dcc1b2c09d77287ed0 Mon Sep 17 00:00:00 2001 From: Ground-Zerro Date: Sat, 6 Apr 2024 18:57:51 +1100 Subject: [PATCH] update --- config.txt => config.ini | 4 +-- main.py | 71 +++++++++++++++++++++++++++------------- 2 files changed, 50 insertions(+), 25 deletions(-) rename config.txt => config.ini (81%) diff --git a/config.txt b/config.ini similarity index 81% rename from config.txt rename to config.ini index 45b27f5..9c72be6 100644 --- a/config.txt +++ b/config.ini @@ -17,10 +17,10 @@ filename = threads = # Тип выходного файла -# доступные опции: 'ip' - только "IP" адрес, 'cidr' - "IP/маска", 'win' - "rote add %IP% mask %mask% %gateway%", если значение пусте (по умолчанию) - пользователю будет выведен запрос с подсказкой +# доступные опции: 'ip' - только "IP" адрес, 'unix' - "ip rote %IP% mask/%mask% %gateway%", cidr' - "IP/маска", 'win' - "rote add %IP% mask %mask% %gateway%", если значение пусте (по умолчанию) - пользователю будет выведен запрос с подсказкой filetype = -# адрес шлюза - используется, только если опция "filetype" установлена в 'win' или пользователь выбрал такой формат выходного файла +# адрес шлюза - используется для опций "filetype" - 'win', 'unix' или если пользователь указал один из них в интерактивном меню # если не указан, будет использоваться значение по умолчанию (0.0.0.0) gateway = diff --git a/main.py b/main.py index 624a79f..cdf3f0d 100644 --- a/main.py +++ b/main.py @@ -109,37 +109,39 @@ def resolve_domain(resolver, domain, unique_ips_current_service, unique_ips_all_ # Function to read configuration file def read_config(filename): - # Default values - default_values = ('', int(20), 'domain-ip-resolve.txt', '', '', '0.0.0.0', '') - try: config = configparser.ConfigParser() with open(filename, 'r', encoding='utf-8-sig') as file: config.read_file(file) - if 'DomainMapper' in config: - domain_mapper_config = config['DomainMapper'] + config = config['DomainMapper'] + service = config.get('service') or '' + threads = int(config.get('threads') or 20) + filename = config.get('filename') or 'domain-ip-resolve.txt' + cloudflare = config.get('cloudflare') or '' + filetype = config.get('filetype') or '' + gateway = config.get('gateway') or '0.0.0.0' + run_command = config.get('run') or '' - service = domain_mapper_config.get('service', default_values[0]) or '' - threads = int(domain_mapper_config.get('threads', default_values[1])) or int(20) - filename = domain_mapper_config.get('filename', default_values[2]) or 'domain-ip-resolve.txt' - cloudflare = domain_mapper_config.get('cloudflare', default_values[3]) or '' - filetype = domain_mapper_config.get('filetype', default_values[4]) or '' - gateway = domain_mapper_config.get('gateway', default_values[5]) or '0.0.0.0' - run_command = domain_mapper_config.get('run', default_values[6]) or '' - - return service, threads, filename, cloudflare, filetype, gateway, run_command - else: - return default_values + print("Загружена конфигурация из config.ini.") + return service, threads, filename, cloudflare, filetype, gateway, run_command except Exception as e: - print(f"Не найдены значения {e}") - return default_values + print(f"Ошибка загрузки конфигурации: {e}") + service = '' + threads = int(20) + filename = 'domain-ip-resolve.txt' + cloudflare = '' + filetype = '' + gateway = '0.0.0.0' + run_command = '' + + return service, threads, filename, cloudflare, filetype, gateway, run_command def main(): # Read parameters from the configuration file - service, threads, filename, cloudflare, filetype, gateway, run_command = read_config('config.txt') + service, threads, filename, cloudflare, filetype, gateway, run_command = read_config('config.ini') total_resolved_domains = 0 selected_services = [] @@ -157,7 +159,7 @@ def main(): os.system('cls') # Очистить экран else: os.system('clear') - print("Выберите сервисы:\n") + print("\nВыберите сервисы:\n") print("0 - Отметить все") for idx, (service, url) in enumerate(urls.items(), 1): checkbox = "[*]" if service in selected_services else "[ ]" @@ -205,9 +207,10 @@ def main(): # Asking for file format if filetype is not specified in the configuration file if not filetype: - filetype = input("\nВыберите в каком формате сохранить файл: \n\033[32mwin\033[0m " - "- 'route add %IP% mask %mask% %gateway%', \033[32mcidr\033[0m " - "- 'IP/mask', \033[32mEnter\033[0m - только IP: ") + filetype = input("\nВыберите в каком формате сохранить файл: \n\033[32mwin\033[0m" + " - 'route add %IP% mask %mask% %gateway%', \033[32munix\033[0m" + " - 'ip route %IP%/%mask% %gateway%', \033[32mcidr\033[0m" + " - 'IP/mask', \033[32mEnter\033[0m - только IP: ") if filetype.lower() == 'cidr': # Handle CIDR format here with open(filename, 'r', encoding='utf-8-sig') as file: @@ -225,9 +228,22 @@ def main(): with open(filename, 'w', encoding='utf-8-sig') as file: for ip in ips: file.write(f"route add {ip.strip()} mask 255.255.255.255 {gateway}\n") + + elif filetype.lower() == 'unix': + # Handle Unix-like format here + gateway_input = input(f"Укажите имя интерфейса или шлюз (\033[32mEnter\033[0m - {gateway}): ") + if gateway_input: + gateway = gateway_input.strip() + with open(filename, 'r', encoding='utf-8-sig') as file: + ips = file.readlines() + with open(filename, 'w', encoding='utf-8-sig') as file: + for ip in ips: + file.write(f"ip route {ip.strip()}/32 {gateway}\n") + else: # Handle default IP address format here (no modification needed) pass + elif filetype.lower() == 'cidr': # Handle CIDR format if specified in the configuration file with open(filename, 'r') as file: @@ -235,6 +251,7 @@ def main(): with open(filename, 'w') as file: for ip in ips: file.write(f"{ip.strip()}/32\n") # Assuming /32 subnet mask for all IPs + elif filetype.lower() == 'win': # Handle Windows format if specified in the configuration file with open(filename, 'r', encoding='utf-8-sig') as file: @@ -243,6 +260,14 @@ def main(): for ip in ips: file.write(f"route add {ip.strip()} mask 255.255.255.255 {gateway}\n") + elif filetype.lower() == 'unix': + # Handle Unix-like format if specified in the configuration file + with open(filename, 'r', encoding='utf-8-sig') as file: + ips = file.readlines() + with open(filename, 'w', encoding='utf-8-sig') as file: + for ip in ips: + file.write(f"ip route {ip.strip()}/32 {gateway}\n") + # Executing the command after the program is completed, if it is specified in the configuration file if run_command is not None and run_command.strip(): print("\nВыполнение команды после завершения программы...")