update on community requests

This commit is contained in:
Ground-Zerro
2024-09-10 23:22:42 +11:00
parent b480850740
commit 29b26ddcd8
3 changed files with 45 additions and 16 deletions

View File

@@ -51,10 +51,17 @@ pip3 install -r requirements.txt
**Работа с личным списком DNS:** **Работа с личным списком DNS:**
- Создать файл "custom-dns-list.txt", записать в него DNS имена (одна строчка - одно имя) и положить рядом со скриптом. Список будет подхвачен при запуске и отображен в меню как "Custom DNS list". - Создать файл "custom-dns-list.txt", записать в него DNS имена (одна строчка - одно имя) и положить рядом со скриптом. Список будет подхвачен при запуске и отображен в меню как "Custom DNS list".
**Использование скрипта с кастомным конфигурационным файлом**
- Можно передавать путь к конфигурационному файлу при запуске скрипта с помощью опции -c (или --config). Если параметр не указан, по умолчанию будет использоваться файл config.ini.
Пример использования: `main.py -с myconfig.ini` или `python main.py -с myconfig.ini`
**Кто не знает "как", но кому "очень нужно":** **Кто не знает "как", но кому "очень нужно":**
- Загляните в директорию "Windows" репозитория. - Загляните в директорию "Windows" репозитория.
**New** **New**
- Опция config.ini: Отключить при запуске отображение сведений о загруженой конфигурации.
- Кастомное имя конфигурационного файла. Запрос от @Noksa
- Добавлен сервис Github сopilot. Запрос от @aspirisen - Добавлен сервис Github сopilot. Запрос от @aspirisen
- Keenetic CLI формат сохранения. Запрос от @vchikalkin - Keenetic CLI формат сохранения. Запрос от @vchikalkin
- Wireguard формат сохранения. Запрос от @sanikroot - Wireguard формат сохранения. Запрос от @sanikroot

View File

@@ -88,6 +88,13 @@ gateway =
# укажите имя # укажите имя
listname = listname =
# Показывать сведения о загруженной конфигурации при запуске скрипта
# опции:
# yes или пустое значение - показывать
# no - не показывать
cfginfo = yes
# Команда для консоли после завершения скриптом всех операций, может быть полезно для автоматизации и комбинирования с другим скриптом, кодом или программой # Команда для консоли после завершения скриптом всех операций, может быть полезно для автоматизации и комбинирования с другим скриптом, кодом или программой
# опции: # опции:
# исполняемая_команда_для_консоли # исполняемая_команда_для_консоли

29
main.py
View File

@@ -1,3 +1,4 @@
import argparse
import asyncio import asyncio
import configparser import configparser
import ipaddress import ipaddress
@@ -31,10 +32,10 @@ def blue(text):
return f"{Fore.BLUE}{text}{Style.RESET_ALL}" return f"{Fore.BLUE}{text}{Style.RESET_ALL}"
# Читаем конфигурацию # Читаем конфигурацию
def read_config(filename): def read_config(cfg_file):
try: try:
config = configparser.ConfigParser() config = configparser.ConfigParser()
with open(filename, 'r', encoding='utf-8-sig') as file: with open(cfg_file, 'r', encoding='utf-8-sig') as file:
config.read_file(file) config.read_file(file)
if 'DomainMapper' in config: if 'DomainMapper' in config:
config = config['DomainMapper'] config = config['DomainMapper']
@@ -48,22 +49,25 @@ def read_config(filename):
dns_server_indices = list(map(int, config.get('dnsserver', '').split())) if config.get('dnsserver') else [] dns_server_indices = list(map(int, config.get('dnsserver', '').split())) if config.get('dnsserver') else []
mk_list_name = config.get('listname') or '' mk_list_name = config.get('listname') or ''
subnet = config.get('subnet') or '' subnet = config.get('subnet') or ''
cfginfo = config.get('cfginfo') or 'yes'
print(f"{yellow('Загружена конфигурация из config.ini:')}") if cfginfo == 'yes':
print(f"{yellow(f'Загружена конфигурация из {cfg_file}:')}")
print(f"{Style.BRIGHT}Сервисы для проверки:{Style.RESET_ALL} {service if service else 'спросить у пользователя'}") print(f"{Style.BRIGHT}Сервисы для проверки:{Style.RESET_ALL} {service if service else 'спросить у пользователя'}")
print(f"{Style.BRIGHT}Использовать DNS сервер:{Style.RESET_ALL} {dns_server_indices if dns_server_indices else 'спросить у пользователя'}") print(f"{Style.BRIGHT}Использовать DNS сервер:{Style.RESET_ALL} {dns_server_indices if dns_server_indices else 'спросить у пользователя'}")
print(f"{Style.BRIGHT}Количество одновременных запросов к одному DNS серверу:{Style.RESET_ALL} {request_limit}") print(f"{Style.BRIGHT}Количество одновременных запросов к одному DNS серверу:{Style.RESET_ALL} {request_limit}")
print(f"{Style.BRIGHT}Фильтр IP-адресов Cloudflare:{Style.RESET_ALL} {'включен' if cloudflare == 'yes' else 'выключен' if cloudflare == 'no' else 'спросить у пользователя'}") print(f"{Style.BRIGHT}Фильтр IP-адресов Cloudflare:{Style.RESET_ALL} {'включена' if cloudflare == 'yes' else 'вЫключена' if cloudflare == 'no' else 'спросить у пользователя'}")
print(f"{Style.BRIGHT}Агрегация IP-адресов:{Style.RESET_ALL} {'до /16 подсети' if subnet == '16' else 'до /24 подсети' if subnet == '24' else 'вЫключена' if subnet == 'no' else 'спросить у пользователя'}") print(f"{Style.BRIGHT}Агрегация IP-адресов:{Style.RESET_ALL} {'до /16 подсети' if subnet == '16' else 'до /24 подсети' if subnet == '24' else 'вЫключена' if subnet == 'no' else 'спросить у пользователя'}")
print(f"{Style.BRIGHT}Сохранить результаты в файл:{Style.RESET_ALL} {filename}") print(f"{Style.BRIGHT}Сохранить результаты в файл:{Style.RESET_ALL} {filename}")
print(f"{Style.BRIGHT}Формат сохранения:{Style.RESET_ALL} {'только IP' if filetype == 'ip' else 'Linux route' if filetype == 'unix' else 'CIDR-нотация' if filetype == 'cidr' else 'Windows route' if filetype == 'win' else 'CLI Mikrotik firewall' if filetype == 'mikrotik' else 'open vpn' if filetype == 'ovpn' else 'Keenetic CLI' if filetype == 'keenetic' else 'Wireguard' if filetype == 'wireguard' else 'спросить у пользователя'}") print(f"{Style.BRIGHT}Формат сохранения:{Style.RESET_ALL} {'только IP' if filetype == 'ip' else 'Linux route' if filetype == 'unix' else 'CIDR-нотация' if filetype == 'cidr' else 'Windows route' if filetype == 'win' else 'CLI Mikrotik firewall' if filetype == 'mikrotik' else 'open vpn' if filetype == 'ovpn' else 'Keenetic CLI' if filetype == 'keenetic' else 'Wireguard' if filetype == 'wireguard' else 'спросить у пользователя'}")
print(f"{Style.BRIGHT}Шлюз/Имя интерфейса для маршрутов:{Style.RESET_ALL} {gateway if gateway else 'спросить у пользователя'}") print(f"{Style.BRIGHT}Шлюз/Имя интерфейса для маршрутов:{Style.RESET_ALL} {gateway if gateway else 'спросить у пользователя'}")
print(f"{Style.BRIGHT}Имя списка для Mikrotik firewall:{Style.RESET_ALL} {mk_list_name if mk_list_name else 'спросить у пользователя'}") print(f"{Style.BRIGHT}Имя списка для Mikrotik firewall:{Style.RESET_ALL} {mk_list_name if mk_list_name else 'спросить у пользователя'}")
print(f"{Style.BRIGHT}Выполнить по завершению:{Style.RESET_ALL} {run_command if run_command else 'не указано'}") print(f"{Style.BRIGHT}Выполнить по завершению:{Style.RESET_ALL} {run_command if run_command else 'не указано'}")
return service, request_limit, filename, cloudflare, filetype, gateway, run_command, dns_server_indices, mk_list_name, subnet return service, request_limit, filename, cloudflare, filetype, gateway, run_command, dns_server_indices, mk_list_name, subnet
except Exception as e: except Exception as e:
print(f"{yellow('Ошибка загрузки config.ini:')} {e}\n{Style.BRIGHT}Используются настройки 'по умолчанию'.{Style.RESET_ALL}") print(f"{yellow(f'Ошибка загрузки {cfg_file}:')} {e}\n{Style.BRIGHT}Используются настройки 'по умолчанию'.{Style.RESET_ALL}")
return '', 20, 'domain-ip-resolve.txt', '', '', '', '', [], '', '' return '', 20, 'domain-ip-resolve.txt', '', '', '', '', [], '', ''
@@ -435,8 +439,19 @@ def process_file_format(filename, filetype, gateway, selected_service, mk_list_n
# Ну чо, погнали?! # Ну чо, погнали?!
async def main(): async def main():
# Инициализация настроек из config.ini # Парсинг аргументов командной строки
service, request_limit, filename, cloudflare, filetype, gateway, run_command, dns_server_indices, mk_list_name, subnet = read_config('config.ini') parser = argparse.ArgumentParser(description="DNS resolver script with custom config file.")
parser.add_argument(
'-c', '--config',
type=str,
default='config.ini',
help='Путь к конфигурационному файлу (по умолчанию: config.ini)'
)
args = parser.parse_args()
# Инициализация настроек из переданного конфигурационного файла
config_file = args.config
service, request_limit, filename, cloudflare, filetype, gateway, run_command, dns_server_indices, mk_list_name, subnet = read_config(config_file)
# Load URLs # Load URLs
platform_db_url = "https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/main/platformdb" platform_db_url = "https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/main/platformdb"