mirror of
https://github.com/Ground-Zerro/DomainMapper.git
synced 2025-12-10 01:47:18 +07:00
update on community requests
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -88,6 +88,13 @@ gateway =
|
|||||||
# укажите имя
|
# укажите имя
|
||||||
listname =
|
listname =
|
||||||
|
|
||||||
|
# Показывать сведения о загруженной конфигурации при запуске скрипта
|
||||||
|
# опции:
|
||||||
|
# yes или пустое значение - показывать
|
||||||
|
# no - не показывать
|
||||||
|
cfginfo = yes
|
||||||
|
|
||||||
|
|
||||||
# Команда для консоли после завершения скриптом всех операций, может быть полезно для автоматизации и комбинирования с другим скриптом, кодом или программой
|
# Команда для консоли после завершения скриптом всех операций, может быть полезно для автоматизации и комбинирования с другим скриптом, кодом или программой
|
||||||
# опции:
|
# опции:
|
||||||
# исполняемая_команда_для_консоли
|
# исполняемая_команда_для_консоли
|
||||||
|
|||||||
29
main.py
29
main.py
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user