1 Commits

Author SHA1 Message Date
Ground-Zerro
6d5989b44b Revert "More domains are required for Copilot. Taken from https://docs.github…"
This reverts commit 29763414d6.
2025-02-01 02:58:54 +11:00
29 changed files with 2435 additions and 17906 deletions

3
.gitattributes vendored
View File

@@ -1,3 +0,0 @@
* text=auto
*.bat -text
*.cmd -text

View File

@@ -2,9 +2,6 @@
<details>
<summary>Что нового (нажать, чтобы открыть)</summary>
- Реворк работы с DNS серверами. Прогрессбар. Разделение файла на части для некоторых форматов. Обновлена утилита Сonvert.
- Keenetic BAT формат сохранения. Небольшие изменения в интерфейсе. Некоторые доработки/улучшения.
- Доабвлены некоторые [оналйн кинотеатры](https://github.com/Ground-Zerro/DomainMapper/blob/main/platforms/dns-onlinetheater.txt). Запрос @Andrey_schumacher
- Добавлены списки от [ITDog](https://t.me/itdoginfo/36).
- Добавлен сервис xBox. Запрос @Deni5c
- Запуск в докере. Запрос [Запрос @andrejs82git](https://github.com/Ground-Zerro/DomainMapper/issues/21), [Реализация @MrEagle123](https://github.com/Ground-Zerro/DomainMapper/issues/21#issuecomment-2509565392)
@@ -66,8 +63,7 @@
- Преобразование доменных имен популярных сервисов в IP-адреса.
- Агрегация маршрутов в /16 (255.255.0.0) и /24 (255.255.255.0) подсети. Комбинированный режим /24 + /32.
- Фильтрация IP-адресов Cloudflare (опционально).
- Множество форматов сохранения результата.
- Разделение больших файлов на части для некоторых форматов.
- Восемь вариантов сохранения результатов.
**Ключевые особенности**
@@ -167,14 +163,13 @@ curl -L -s "https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/hea
<details>
<summary>Для пользователей Windows (нажать, чтобы открыть)</summary>
<summary>Для пользователей Windows, не знающих "как", но кому "очень нужно" (нажать, чтобы открыть)</summary>
- Загляните в директорию [Windows](https://github.com/Ground-Zerro/DomainMapper/tree/main/Windows) репозитория.
</details>
# ☕ Поддержка
##### Протестировано в Ubuntu 20.04, macOS Sonoma и Windows 10/11
Если проект оказался Вам полезен — можно поблагодарить автора:
- [Поддержать на Boosty](https://boosty.to/ground_zerro)
## ВАЖНО:
Использование сделанных "кем-то", а не Вами лично IP-листов и готовых файлов марштутов - **плохая идея** [ЖМИ](https://github.com/Ground-Zerro/DomainMapper/discussions/50)

View File

@@ -13,9 +13,9 @@
**Можете попробовать эти варианты:**
- Запустить PowerShell и выполнить команду:
```
irm https://github.com/Ground-Zerro/DomainMapper/raw/refs/heads/main/Windows/Win.bat -OutFile "$env:TEMP\Win.bat"; cmd /c "$env:TEMP\Win.bat"
irm https://github.com/Ground-Zerro/DomainMapper/raw/main/Windows/Win.bat -OutFile "$env:TEMP\Win.bat"; cmd /c "$env:TEMP\Win.bat"
```
- Открыть командную строку Windows и выполнить команду:
```
powershell -Command "irm https://github.com/Ground-Zerro/DomainMapper/raw/refs/heads/main/Windows/Win.bat -OutFile $env:TEMP\Win.bat" && cmd /c "%TEMP%\Win.bat"
powershell -Command "irm https://github.com/Ground-Zerro/DomainMapper/raw/main/Windows/Win.bat -OutFile $env:TEMP\Win.bat" && cmd /c "%TEMP%\Win.bat"
```

View File

@@ -47,7 +47,7 @@ exit /b 0
REM Проверка и установка необходимых модулей Python
:CheckModules
set "modules=dnspython httpx colorama tqdm"
set "modules=requests dnspython ipaddress configparser httpx colorama"
echo.
echo Проверка необходимых библиотек...
@@ -87,26 +87,12 @@ if ERRORLEVEL 1 (
exit /b 1
)
echo Копирование файлов на рабочий стол...
if exist domain-ip-resolve.txt (
move /y domain-ip-resolve.txt %UserProfile%\Desktop\domain-ip-resolve.txt
echo Файл скопирован в %UserProfile%\Desktop\domain-ip-resolve.txt
) else (
echo Поиск разделенных файлов...
set "found=0"
for %%f in (domain-ip-resolve_p*.txt) do (
move /y "%%f" "%UserProfile%\Desktop\%%f"
echo Файл %%f скопирован на рабочий стол
set "found=1"
)
if "!found!"=="0" (
echo Не найдено файлов для копирования.
)
)
move /y domain-ip-resolve.txt %UserProfile%\Desktop\domain-ip-resolve.txt
echo Программа завершена.
del /q /f main.py
endlocal
echo файл скопирован в %UserProfile%\Desktop\domain-ip-resolve.txt
pause
exit /b 0
::То-ли при выгрузке на github, то-ли при скачивании с него, в файл как-то попадает BOM... Как это починить я ХЗ.

View File

@@ -1,42 +1,129 @@
[DomainMapper]
# Локальный режим загрузки (yes/no)
localplatform = no
localdns = no
# Локальный режим - загружать список сервисов и/или DNS серверов из локального файла
# yes - включить
# no или пусто - выключить
localplatform = yes
localdns = yes
# Сервисы для проверки (например: all, youtube, google, telegram, custom и т.д.)
# Имена сервисов, разделенные запятыми, для разрешения доменных имен в IP-адреса без запроса у пользователя
# опции:
# пустое значение - пользователю будет выведено меню выбора
# all - проверить все сервисы
# Antifilter community edition - список заблокированных DNS имен формируемый сообществом
# ITDog Inside - ресурсы, в том числе зарубежные, которые блокируются или сами блокируют доступ из России.
# ITDog Outside - ресурсы, которые доступны только внутри России и блокируют доступ из-за рубежа.
# Youtube
# Facebook
# Openai
# Tik-Tok
# Instagram
# Twitter
# Netflix
# Bing
# Adobe
# Apple
# Google
# Torrent Trackers - торрент трекеры
# Search engines - поисковые системы
# Github Copilot - ИИ помощник от github
# Twitch
# Discord
# Jetbrains
# Xbox
# Telegram
# custom - Custom DNS list, это файл "custom-dns-list.txt" расположенный в одном каталоге со скриптом
service =
# Список DNS серверов по номерам (0 - все, 1 - системный, 2 - google, 3 - quad9 и т.д.)
# DNS сервера (номер), разделенные пробелом, которые будут использоваться для разрешения доменных имен
# опции:
# пустое значение - пользователю будет выведено меню выбора
# 0 - использовать все доступные DNS серверы
# 1 - Системный DNS
# 2 - Google Public DNS
# 3 - Quad9
# 4 - Cloudflare DNS
# 5 - OpenDNS
# 6 - Cisco Umbrella
# 7 - DNS.Watch
# 8 - Dyn
# 9 - CleanBrowsing
# 10 - Alternate DNS
# 11 - AdGuard DNS
# 12 - Control D
# 13 - Yandex (основной)
dnsserver =
# Исключить Cloudflare IP (yes/no)
cloudflare =
# Включить фильтрацию IP-адресов cloudflare и не записывать их в файл результатов
# опции:
# пустое значение - пользователю будет выведено меню выбора
# yes - исключить IP адреса cloudflare из итогового списка
# no - оставить IP адреса cloudflare в итоговом списке
cloudflare =
# Агрегация подсетей (16, 24, mix, no)
# Сгруппировать подсети
# опции:
# пустое значение - пользователю будет выведено меню выбора
# 16 - группировка подсетей до /16 (255.255.0.0)
# 24 - группировка подсетей до /24 (255.255.255.0)
# mix - /24 и /32 в одном файле
# no - оставить как есть
subnet =
# Имя выходного файла
filename = domain-ip-resolve.txt
# Имя конечного файла
# опции:
# пустое значение - "domain-ip-resolve.txt" в каталоге со скриптом
# имя_файла - файл с указанным именем будет сохранен в каталоге со скриптом
# полный_путь/имя_файла - файл будет сохранен с указанным именем в указанной каталоге
filename =
# Лимит запросов к каждому DNS серверу (запросов в секунду, по умолчанию 50)
# Контролирует максимальное количество DNS запросов к одному серверу в секунду
rate_limit = 50
# Количество потоков сканирования, если не указано - будет использоваться 20 потоков
threads =
# Формат результата (ip, unix, win, mikrotik, ovpn, wireguard, cidr, keenetic bat и т.д.)
# Формат сохранения файла результатов
# опции:
# пустое значение - пользователю будет выведено меню выбора
# ip - только IP адрес
# unix - ip rote %IP%/32 %gateway%
# cidr - %IP%/32
# win - rote add %IP% mask 255.255.255.255 %gateway%
# mikrotik - /ip/firewall/address-list add list=%LIST_NAME% comment=%SERVICE_NAME% address=%IP%/32
# ovpn - push "route %IP% 255.255.255.255"
# wireguard - %IP%/32, и т.д...
# keenetic - ip route %IP%/32 %gateway% auto !%LIST_NAME%
filetype =
# Параметры для форматов:
## для win/unix — IP шлюза или имя интерфейса
# адрес шлюза или имя интерфейса - используется при сохранении IP-адресов в 'win' и 'unix' формате
# опции:
# пустое значение - пользователю будет выведен запрос с подсказкой
# укажите IP-адрес шлюза или имя интерфейса
gateway =
## для keenetic — IP шлюза или имя интерфейса, можно оба через пробел
# адрес шлюза или имя интерфейса - используется при сохранении IP-адресов в 'keenetic' формате
# опции:
# пустое значение - пользователю будет выведен запрос с подсказкой
# укажите IP-адрес шлюза или имя интерфейса или IP-адрес шлюза и через пробел имя интерфейса
keenetic =
## для mikrotik — имя списка address-list
# имя списка - используется при сохранении IP-адресов в 'mikrotik' формате
# опции:
# пустое значение - пользователю будет выведен запрос с подсказкой
# укажите имя
listname =
## для mikrotik - добавить или убирать "comment=%SERVICE_NAME%" в правилах Mikrotik (on/off)
# комментарий - используется при сохранении IP-адресов в 'mikrotik' формате
# опции:
# on - если вам нужен comment=%SERVICE_NAME% в строке
# off - убрать comment=%SERVICE_NAME% из строки
mk_comment = off
# Показывать конфигурацию при запуске (yes/no)
# Показывать сведения о загруженной конфигурации при запуске скрипта
# опции:
# yes или пустое значение - показывать
# no - скрыть
cfginfo = yes
# Выполнить команду или запустить приложение после завершения (команда/полный путь к приложению)
run =
# Команда для консоли после завершения скриптом всех операций, может быть полезно для автоматизации и комбинирования с другим скриптом, кодом или программой
# опции:
# исполняемая_команда_для_консоли
run =

950
main.py

File diff suppressed because it is too large Load Diff

View File

@@ -19,7 +19,4 @@ Twitch: https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/m
Discord: https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/platforms/dns-discord.txt
Jetbrains: https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/platforms/dns-jetbrains.txt
Xbox: https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/platforms/dns-xbox.txt
Telegram: https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/platforms/dns-telegram.txt
WhatsApp: https://raw.githubusercontent.com/HybridNetworks/whatsapp-cidr/main/WhatsApp/whatsapp_domainlist.txt
Online movie theaters: https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/platforms/dns-onlinetheater.txt
Windsurf: https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/platforms/dns-windsurf.txt
Telegram: https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/platforms/dns-telegram.txt

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,3 @@
copilot-telemetry.githubusercontent.com
copilot-proxy.githubusercontent.com
githubcopilot.com
github.com
api.github.com
default.exp-tas.com
origin-tracker.githubusercontent.com
copilot.github.com
breeze.aimon.applicationinsights.io
api.githubcopilot.com
api.individual.githubcopilot.com
proxy.individual.githubusercontent.com
telemetry.individual.githubcopilot.com
githubcopilot.com

View File

@@ -1,4 +1,4 @@
Www.instagram.com
a.ns.cdninstagram.com
a.ns.instagram.com
about.instagram.com
accountscenter.instagram.com
@@ -7,64 +7,39 @@ api.instagram.com
applink.instagram.com
autodiscover.instagram.com
b.i.instagram.com
b.ns.cdninstagram.com
b.ns.instagram.com
b.secure.instagram.com
badges.instagram.com
blog.instagram.com
bookstagram.com
business.instagram.com
c.ns.cdninstagram.com
c.ns.instagram.com
carstagram.com
cdninstagram.com
chickstagram.com
community.instagram.com
connect.facebook.net
d.ns.cdninstagram.com
d.ns.instagram.com
default-geo.instagram.com
default-geo-p42.instagram.com
dyi.www.instagram.com
edge-mqtt-fallback.facebook.com
edge-mqtt.facebook.com
edge-chat.instagram.com
engineering.instagram.com
fna-instagram-shv-01-fagc1.fbcdn.net
fna-instagram-shv-01-fdel1.fbcdn.net
fna-instagram-shv-01-ffcm1.fbcdn.net
fna-instagram-shv-01-ffjr1.fbcdn.net
fna-instagram-shv-01-fjai2.fbcdn.net
fna-instagram-shv-01-fktw1.fbcdn.net
fna-instagram-shv-01-fmaa1.fbcdn.net
fna-instagram-shv-01-fpat2.fbcdn.net
fna-instagram-shv-01-fric1.fbcdn.net
fna-instagram-shv-01-fsac1.fbcdn.net
fna-instagram-shv-01-fvga2.fbcdn.net
fna-instagram-shv-02-fagc1.fbcdn.net
fna-instagram-shv-02-fdel1.fbcdn.net
fna-instagram-shv-02-ffcm1.fbcdn.net
fna-instagram-shv-02-ffjr1.fbcdn.net
fna-instagram-shv-02-fhyd1.fbcdn.net
fna-instagram-shv-02-fixc1.fbcdn.net
fna-instagram-shv-02-fmaa1.fbcdn.net
fna-instagram-shv-02-fmem1.fbcdn.net
fna-instagram-shv-02-fsac1.fbcdn.net
fna-instagram-shv-03-fblr1.fbcdn.net
fna-instagram-shv-03-fdel1.fbcdn.net
fna-instagram-shv-03-ffjr1.fbcdn.net
fna-instagram-shv-03-fmaa1.fbcdn.net
fna-instagram-shv-04-fblr1.fbcdn.net
fna-instagram-shv-04-fdel1.fbcdn.net
fna-instagram-shv-04-ffjr1.fbcdn.net
fna-instagram-shv-04-fmaa1.fbcdn.net
g.instagram.com
gateway.instagram.com
geo-p42.instagram.com
geo.instagram.com
graph-fallback.instagram.com
graph.facebook.com
geo-p42.instagram.com
graph.instagram.com
graphql.instagram.com
help.instagram.com
help.latest.instagram.com
hyperlapse.instagram.com
i-fallback.instagram.com
i.instagram.com
ig.me
igcdn.com
igsonar.com
igtv.com
imstagram.com
imtagram.com
instaadder.com
@@ -76,86 +51,13 @@ instagda.com
instagify.com
instagmania.com
instagor.com
instagram-brand.com
instagram-engineering.com
instagram-help.com
instagram-p15-shv-01-arn2.fbcdn.net
instagram-p15-shv-01-lga3.fbcdn.net
instagram-p15-shv-01-mia3.fbcdn.net
instagram-p15-shv-01-sea1.fbcdn.net
instagram-p15-shv-02-bom1.fbcdn.net
instagram-p3-shv-01-arn2.fbcdn.net
instagram-p3-shv-01-atl3.fbcdn.net
instagram-p3-shv-01-ber1.fbcdn.net
instagram-p3-shv-01-bom1.fbcdn.net
instagram-p3-shv-01-bru2.fbcdn.net
instagram-p3-shv-01-cgk1.fbcdn.net
instagram-p3-shv-01-del1.fbcdn.net
instagram-p3-shv-01-dus1.fbcdn.net
instagram-p3-shv-01-eze1.fbcdn.net
instagram-p3-shv-01-gmp1.fbcdn.net
instagram-p3-shv-01-gru1.fbcdn.net
instagram-p3-shv-01-gru2.fbcdn.net
instagram-p3-shv-01-hel3.fbcdn.net
instagram-p3-shv-01-iad3.fbcdn.net
instagram-p3-shv-01-lax3.fbcdn.net
instagram-p3-shv-01-lga3.fbcdn.net
instagram-p3-shv-01-los2.fbcdn.net
instagram-p3-shv-01-maa2.fbcdn.net
instagram-p3-shv-01-mad1.fbcdn.net
instagram-p3-shv-01-mia3.fbcdn.net
instagram-p3-shv-01-mrs2.fbcdn.net
instagram-p3-shv-01-msp1.fbcdn.net
instagram-p3-shv-01-mxp1.fbcdn.net
instagram-p3-shv-01-nrt1.fbcdn.net
instagram-p3-shv-01-otp1.fbcdn.net
instagram-p3-shv-01-prg1.fbcdn.net
instagram-p3-shv-01-qro1.fbcdn.net
instagram-p3-shv-01-scl2.fbcdn.net
instagram-p3-shv-01-sea1.fbcdn.net
instagram-p3-shv-01-sjc3.fbcdn.net
instagram-p3-shv-01-sof1.fbcdn.net
instagram-p3-shv-01-ssn1.fbcdn.net
instagram-p3-shv-01-syd2.fbcdn.net
instagram-p3-shv-01-tpe1.fbcdn.net
instagram-p3-shv-01-vie1.fbcdn.net
instagram-p3-shv-01-yyz1.fbcdn.net
instagram-p3-shv-02-bom1.fbcdn.net
instagram-p3-shv-02-gru2.fbcdn.net
instagram-p3-shv-02-maa2.fbcdn.net
instagram-p3-shv-02-mia3.fbcdn.net
instagram-p3-shv-02-mrs2.fbcdn.net
instagram-p4-shv-01-arn2.fbcdn.net
instagram-p4-shv-01-lga3.fbcdn.net
instagram-p4-shv-01-mia3.fbcdn.net
instagram-p4-shv-01-sea1.fbcdn.net
instagram-p4-shv-02-bom1.fbcdn.net
instagram-p42-shv-01-arn2.fbcdn.net
instagram-p42-shv-01-bru2.fbcdn.net
instagram-p42-shv-01-lga3.fbcdn.net
instagram-p42-shv-01-mad1.fbcdn.net
instagram-p42-shv-01-mia3.fbcdn.net
instagram-p42-shv-01-mrs2.fbcdn.net
instagram-p42-shv-01-mxp1.fbcdn.net
instagram-p42-shv-01-nrt1.fbcdn.net
instagram-p42-shv-01-otp1.fbcdn.net
instagram-p42-shv-01-prg1.fbcdn.net
instagram-p42-shv-01-sea1.fbcdn.net
instagram-p42-shv-01-sof1.fbcdn.net
instagram-p42-shv-01-syd2.fbcdn.net
instagram-p42-shv-01-vie1.fbcdn.net
instagram-p42-shv-01-yyz1.fbcdn.net
instagram-p42-shv-02-bom1.fbcdn.net
instagram-press.com
instagram-press.net
instagram.c10r.instagram.com
instagram.com
instagram.fbeg10-1.fna.fbcdn.net
instagram.fkiv7-1.fna.fbcdn.net
instagram.frix7-1.fna.fbcdn.net
instagram.fsof11-1.fna.fbcdn.net
instagram.fsof8-1.fna.fbcdn.net
instagram-brand.com
instagram-engineering.com
instagramhashtags.net
instagram-help.com
instagramhilecim.com
instagramhilesi.org
instagramium.com
@@ -164,10 +66,13 @@ instagramkusu.com
instagramlogin.com
instagrampartners.com
instagramphoto.com
instagram-press.com
instagram-press.net
instagramq.com
instagramsepeti.com
instagramtips.com
instagramtr.com
instagram-www.instagram.com
instagy.com
instamgram.com
instanttelegram.com
@@ -176,22 +81,24 @@ instastyle.tv
instgram.com
l.instagram.com
live-dev.instagram.com
live-upload-staging.instagram.com
live-upload.instagram.com
live-upload-staging.instagram.com
logger.instagram.com
lookaside.facebook.com
lookaside.instagram.com
m.instagram.com
mail.instagram.com
maps.instagram.com
my-od-3.instagram.com
my-od.instagram.com
my-od-3.instagram.com
oninstagram.com
online-instagram.com
onlineinstagram.com
online-instagram.com
parents.instagram.com
platform.instagram.com
preprod.instagram.com
privacycenter.instagram.com
scontent.cdninstagram.com
scontent-a.cdninstagram.com
scontent-a-ams.cdninstagram.com
scontent-a-atl.cdninstagram.com
scontent-a-bru.cdninstagram.com
@@ -200,38 +107,42 @@ scontent-a-dfw.cdninstagram.com
scontent-a-gru.cdninstagram.com
scontent-a-hkg.cdninstagram.com
scontent-a-hkg4-2.cdninstagram.com
scontent-a-hkt1-1.cdninstagram.com
scontent-a-iad.cdninstagram.com
scontent-a-iev1-1.cdninstagram.com
scontent-akl1-1.cdninstagram.com
scontent-a-lax.cdninstagram.com
scontent-a-lga.cdninstagram.com
scontent-a-lhr.cdninstagram.com
scontent-a-mad.cdninstagram.com
scontent-a-mct1-1.cdninstagram.com
scontent-a-mia.cdninstagram.com
scontent-a-mxp.cdninstagram.com
scontent-a-nrt.cdninstagram.com
scontent-a-sea.cdninstagram.com
scontent-a-sin.cdninstagram.com
scontent-a-sjc.cdninstagram.com
scontent-a-vie.cdninstagram.com
scontent-a.cdninstagram.com
scontent-akl1-1.cdninstagram.com
scontent-ams.cdninstagram.com
scontent-ams2-1.cdninstagram.com
scontent-ams4-1.cdninstagram.com
scontent-amt2-1.cdninstagram.com
scontent-a-mxp.cdninstagram.com
scontent-a-nrt.cdninstagram.com
scontent-arn2-1.cdninstagram.com
scontent-arn2-1.xx.fbcdn.net
scontent-arn2-2.cdninstagram.com
scontent-a-sea.cdninstagram.com
scontent-a-sin.cdninstagram.com
scontent-a-sjc.cdninstagram.com
scontent-atl.cdninstagram.com
scontent-atl3-1.cdninstagram.com
scontent-atl3-2.cdninstagram.com
scontent-a-vie.cdninstagram.com
scontent-b.cdninstagram.com
scontent-b-ams.cdninstagram.com
scontent-b-atl.cdninstagram.com
scontent-b-bru.cdninstagram.com
scontent-b-dfw.cdninstagram.com
scontent-ber1-1.cdninstagram.com
scontent-b-gru.cdninstagram.com
scontent-b-hkg.cdninstagram.com
scontent-b-hkg4-1.cdninstagram.com
scontent-b-hkg4-2.cdninstagram.com
scontent-b-hkt1-2.cdninstagram.com
scontent-b-iad.cdninstagram.com
scontent-b-iev1-1.cdninstagram.com
scontent-b-lax.cdninstagram.com
@@ -241,20 +152,21 @@ scontent-b-mct1-1.cdninstagram.com
scontent-b-mia.cdninstagram.com
scontent-b-mxp.cdninstagram.com
scontent-b-nrt.cdninstagram.com
scontent-b-sin.cdninstagram.com
scontent-b-vie.cdninstagram.com
scontent-b.cdninstagram.com
scontent-ber1-1.cdninstagram.com
scontent-bog1-1.cdninstagram.com
scontent-bom1-1.cdninstagram.com
scontent-bom1-2.cdninstagram.com
scontent-bos3-1.cdninstagram.com
scontent-bos5-1.cdninstagram.com
scontent-bru.cdninstagram.com
scontent-bru2-1.cdninstagram.com
scontent-b-sin.cdninstagram.com
scontent-b-vie.cdninstagram.com
scontent-ccu1-1.cdninstagram.com
scontent-cdg.cdninstagram.com
scontent-cdg4-1.cdninstagram.com
scontent-cdg4-2.cdninstagram.com
scontent-cdg4-3.cdninstagram.com
scontent-cdt1-1.cdninstagram.com
scontent-cgk.cdninstagram.com
scontent-cgk1-1.cdninstagram.com
scontent-cgk1-2.cdninstagram.com
@@ -262,6 +174,7 @@ scontent-cph2-1.cdninstagram.com
scontent-cpt1-1.cdninstagram.com
scontent-del1-1.cdninstagram.com
scontent-del1-2.cdninstagram.com
scontent-den4-1.cdninstagram.com
scontent-dfw.cdninstagram.com
scontent-dfw5-1.cdninstagram.com
scontent-dfw5-2.cdninstagram.com
@@ -271,10 +184,18 @@ scontent-dus1-1.cdninstagram.com
scontent-eze1-1.cdninstagram.com
scontent-fco2-1.cdninstagram.com
scontent-fml1-1.cdninstagram.com
scontent-fml2-1.cdninstagram.com
scontent-for1-1.cdninstagram.com
scontent-fra3-1.cdninstagram.com
scontent-fra3-2.cdninstagram.com
scontent-fra5-1.cdninstagram.com
scontent-fra5-2.cdninstagram.com
scontent-frt3-1.cdninstagram.com
scontent-frt3-2.cdninstagram.com
scontent-frx.cdninstagram.com
scontent-frx5-1.cdninstagram.com
scontent-frx5-2.cdninstagram.com
scontent-gig2-1.cdninstagram.com
scontent-gmp1-1.cdninstagram.com
scontent-gru.cdninstagram.com
scontent-gru1-1.cdninstagram.com
@@ -285,10 +206,11 @@ scontent-gua1-1.cdninstagram.com
scontent-ham3-1.cdninstagram.com
scontent-hbe1-1.cdninstagram.com
scontent-hel3-1.cdninstagram.com
scontent-hel3-1.xx.fbcdn.net
scontent-hkg.cdninstagram.com
scontent-hkg4-1.cdninstagram.com
scontent-hkg4-2.cdninstagram.com
scontent-hkt1-1.cdninstagram.com
scontent-hkt1-2.cdninstagram.com
scontent-hou1-1.cdninstagram.com
scontent-iad.cdninstagram.com
scontent-iad3-1.cdninstagram.com
@@ -296,9 +218,14 @@ scontent-iad3-2.cdninstagram.com
scontent-iev1-1.cdninstagram.com
scontent-ist1-1.cdninstagram.com
scontent-itm1-1.cdninstagram.com
scontent-jnb1-1.cdninstagram.com
scontent-kut2-1.cdninstagram.com
scontent-kut2-2.cdninstagram.com
scontent-lax.cdninstagram.com
scontent-lax3-1.cdninstagram.com
scontent-lax3-2.cdninstagram.com
scontent-lcy1-1.cdninstagram.com
scontent-lcy1-2.cdninstagram.com
scontent-lga.cdninstagram.com
scontent-lga3-1.cdninstagram.com
scontent-lga3-2.cdninstagram.com
@@ -314,6 +241,7 @@ scontent-mad.cdninstagram.com
scontent-mad1-1.cdninstagram.com
scontent-mad2-1.cdninstagram.com
scontent-man2-1.cdninstagram.com
scontent-mba1-1.cdninstagram.com
scontent-mct1-1.cdninstagram.com
scontent-mia.cdninstagram.com
scontent-mia3-1.cdninstagram.com
@@ -331,11 +259,11 @@ scontent-nrt1-1.cdninstagram.com
scontent-nrt1-2.cdninstagram.com
scontent-ord5-1.cdninstagram.com
scontent-ord5-2.cdninstagram.com
scontent-ort2-1.cdninstagram.com
scontent-ort2-2.cdninstagram.com
scontent-otp1-1.cdninstagram.com
scontent-otp1-1.xx.fbcdn.net
scontent-pmo1-1.cdninstagram.com
scontent-prg1-1.cdninstagram.com
scontent-prg1-1.xx.fbcdn.net
scontent-qro1-1.cdninstagram.com
scontent-qro1-2.cdninstagram.com
scontent-scl2-1.cdninstagram.com
@@ -348,27 +276,32 @@ scontent-sin6-3.cdninstagram.com
scontent-sin6-4.cdninstagram.com
scontent-sjc.cdninstagram.com
scontent-sjc3-1.cdninstagram.com
scontent-sju1-1.cdninstagram.com
scontent-sof1-1.cdninstagram.com
scontent-sof1-2.cdninstagram.com
scontent-sof1-2.xx.fbcdn.net
scontent-ssn1-1.cdninstagram.com
scontent-syd2-1.cdninstagram.com
scontent-tir2-1.cdninstagram.com
scontent-tpe.cdninstagram.com
scontent-tpe1-1.cdninstagram.com
scontent-vie.cdninstagram.com
scontent-vie1-1.cdninstagram.com
scontent-waw1-1.cdninstagram.com
scontent-xsp1-1.cdninstagram.com
scontent-xsp1-2.cdninstagram.com
scontent-xsp1-3.cdninstagram.com
scontent-yyz1-1.cdninstagram.com
scontent-zrh1-1.cdninstagram.com
scontent.cdninstagram.com
scontent.fbeg10-1.fna.fbcdn.net
secure.latest.instagram.com
shortwave.instagram.com
support.instagram.com
unknownjapan.instagram.com
upload-ec2.instagram.com
upload.instagram.com
upload-ec2.instagram.com
video-ber1-1.cdninstagram.com
video-dus1-1.cdninstagram.com
video-eze1-1.cdninstagram.com
video-frt3-2.cdninstagram.com
video-gru1-2.cdninstagram.com
video-hkg4-1.cdninstagram.com
video-hkg4-2.cdninstagram.com
@@ -377,45 +310,103 @@ video-qro1-1.cdninstagram.com
video-ssn1-1.cdninstagram.com
video-tpe1-1.cdninstagram.com
web-instagram.net
web.facebook.com
wellbeing.instagram.com
www.ig.me
white.instagram.com
Www.instagram.com
www.instagram.com
www.secure.instagram.com
wwwinstagram.com
z-p15.www.instagram.com
z-p15-scontent.cdninstagram.com
z-p15-scontent-a-hkg4-1.cdninstagram.com
z-p15-scontent-a-hkg4-2.cdninstagram.com
z-p15-scontent-a-hkt1-1.cdninstagram.com
z-p15-scontent-a-hkt1-2.cdninstagram.com
z-p15-scontent-a-iev1-1.cdninstagram.com
z-p15-scontent-a-mct1-1.cdninstagram.com
z-p15-scontent-b-hkg4-1.cdninstagram.com
z-p15-scontent-b-hkg4-2.cdninstagram.com
z-p15-scontent-b-hkt1-1.cdninstagram.com
z-p15-scontent-b-hkt1-2.cdninstagram.com
z-p15-scontent-b-iev1-1.cdninstagram.com
z-p15-scontent-b-mct1-1.cdninstagram.com
z-p15-scontent-bru2-1.cdninstagram.com
z-p15-scontent-cdg2-1.cdninstagram.com
z-p15-scontent-cdt1-1.cdninstagram.com
z-p15-scontent-hkg4-1.cdninstagram.com
z-p15-scontent-hkg4-2.cdninstagram.com
z-p15-scontent-hkt1-1.cdninstagram.com
z-p15-scontent-hkt1-2.cdninstagram.com
z-p15-scontent-iev1-1.cdninstagram.com
z-p15-scontent-mct1-1.cdninstagram.com
z-p15-scontent.cdninstagram.com
z-p15.www.instagram.com
z-p3.www.instagram.com
z-p4.graph.instagram.com
z-p42.i.instagram.com
z-p42-instagram.c10r.instagram.com
z-p42-scontent.cdninstagram.com
z-p42-scontent-a-hkg4-1.cdninstagram.com
z-p42-scontent-a-hkg4-2.cdninstagram.com
z-p42-scontent-a-hkt1-1.cdninstagram.com
z-p42-scontent-a-hkt1-2.cdninstagram.com
z-p42-scontent-a-iev1-1.cdninstagram.com
z-p42-scontent-a-mct1-1.cdninstagram.com
z-p42-scontent-arn2-1.cdninstagram.com
z-p42-scontent-b-hkg4-1.cdninstagram.com
z-p42-scontent-b-hkg4-2.cdninstagram.com
z-p42-scontent-b-hkt1-1.cdninstagram.com
z-p42-scontent-b-hkt1-2.cdninstagram.com
z-p42-scontent-b-iev1-1.cdninstagram.com
z-p42-scontent-b-mct1-1.cdninstagram.com
z-p42-scontent-bru2-1.cdninstagram.com
z-p42-scontent-b-sjc3-1.cdninstagram.com
z-p42-scontent-cdg2-1.cdninstagram.com
z-p42-scontent-dus1-1.cdninstagram.com
z-p42-scontent-frt3-1.cdninstagram.com
z-p42-scontent-frt3-2.cdninstagram.com
z-p42-scontent-gru2-1.cdninstagram.com
z-p42-scontent-gru2-2.cdninstagram.com
z-p42-scontent-hkg4-1.cdninstagram.com
z-p42-scontent-hkg4-2.cdninstagram.com
z-p42-scontent-hkt1-1.cdninstagram.com
z-p42-scontent-hkt1-2.cdninstagram.com
z-p42-scontent-iev1-1.cdninstagram.com
z-p42-scontent-los2-1.cdninstagram.com
z-p42-scontent-mct1-1.cdninstagram.com
z-p42-scontent-prg1-1.cdninstagram.com
z-p42-scontent-sea1-1.cdninstagram.com
z-p42-scontent-sof1-1.cdninstagram.com
z-p42-scontent-vie1-1.cdninstagram.com
z-p4-scontent.cdninstagram.com
z-p4-scontent-a-hkg4-1.cdninstagram.com
z-p4-scontent-a-hkg4-2.cdninstagram.com
z-p4-scontent-a-hkt1-1.cdninstagram.com
z-p4-scontent-a-hkt1-2.cdninstagram.com
z-p4-scontent-a-iev1-1.cdninstagram.com
z-p4-scontent-a-mct1-1.cdninstagram.com
z-p4-scontent-ams4-1.cdninstagram.com
z-p4-scontent-amt2-1.cdninstagram.com
z-p4-scontent-arn2-1.cdninstagram.com
z-p4-scontent-b-hkg4-1.cdninstagram.com
z-p4-scontent-b-hkg4-2.cdninstagram.com
z-p4-scontent-b-hkt1-1.cdninstagram.com
z-p4-scontent-b-hkt1-2.cdninstagram.com
z-p4-scontent-b-iev1-1.cdninstagram.com
z-p4-scontent-b-mct1-1.cdninstagram.com
z-p4-scontent-cdg2-1.cdninstagram.com
z-p4-scontent-cdt1-1.cdninstagram.com
z-p4-scontent-cgk1-1.cdninstagram.com
z-p4-scontent-cgk1-2.cdninstagram.com
z-p4-scontent-cph2-1.cdninstagram.com
z-p4-scontent-dfw5-1.cdninstagram.com
z-p4-scontent-frt3-1.cdninstagram.com
z-p4-scontent-frx5-1.cdninstagram.com
z-p4-scontent-hkg4-1.cdninstagram.com
z-p4-scontent-hkg4-2.cdninstagram.com
z-p4-scontent-hkt1-1.cdninstagram.com
z-p4-scontent-hkt1-2.cdninstagram.com
z-p4-scontent-iev1-1.cdninstagram.com
z-p4-scontent-jnb1-1.cdninstagram.com
z-p4-scontent-kut2-2.cdninstagram.com
z-p4-scontent-mct1-1.cdninstagram.com
z-p4-scontent-mxp1-1.cdninstagram.com
z-p4-scontent-nrt1-1.cdninstagram.com
@@ -426,32 +417,4 @@ z-p4-scontent-sin6-2.cdninstagram.com
z-p4-scontent-sin6-3.cdninstagram.com
z-p4-scontent-ssn1-1.cdninstagram.com
z-p4-scontent-vie1-1.cdninstagram.com
z-p4-scontent.cdninstagram.com
z-p4.graph.instagram.com
z-p42-chat-e2ee-ig.facebook.com
z-p42-instagram.c10r.instagram.com
z-p42-scontent-a-hkg4-1.cdninstagram.com
z-p42-scontent-a-hkg4-2.cdninstagram.com
z-p42-scontent-a-iev1-1.cdninstagram.com
z-p42-scontent-a-mct1-1.cdninstagram.com
z-p42-scontent-arn2-1.cdninstagram.com
z-p42-scontent-b-hkg4-1.cdninstagram.com
z-p42-scontent-b-hkg4-2.cdninstagram.com
z-p42-scontent-b-iev1-1.cdninstagram.com
z-p42-scontent-b-mct1-1.cdninstagram.com
z-p42-scontent-b-sjc3-1.cdninstagram.com
z-p42-scontent-bru2-1.cdninstagram.com
z-p42-scontent-dus1-1.cdninstagram.com
z-p42-scontent-gru2-1.cdninstagram.com
z-p42-scontent-gru2-2.cdninstagram.com
z-p42-scontent-hkg4-1.cdninstagram.com
z-p42-scontent-hkg4-2.cdninstagram.com
z-p42-scontent-iev1-1.cdninstagram.com
z-p42-scontent-los2-1.cdninstagram.com
z-p42-scontent-mct1-1.cdninstagram.com
z-p42-scontent-prg1-1.cdninstagram.com
z-p42-scontent-sea1-1.cdninstagram.com
z-p42-scontent-sof1-1.cdninstagram.com
z-p42-scontent-vie1-1.cdninstagram.com
z-p42-scontent.cdninstagram.com
z-p42.i.instagram.com
z-p4-scontent-xsp1-2.cdninstagram.com

View File

@@ -113,16 +113,4 @@ view.datalore.jetbrains.com
onboard.jetbrains.com
youtube.master-zdchint.mau.jetbrains.com
youtube.staging-zdchint.mau.jetbrains.com
zillow.fls.jetbrains.com
jetbrains.net
intellij.com
intellij.org
jetbrains.team
grazie.ai
grazie.aws.intellij.net
jetbrains.ai
proxy.jetbrains.ai
proxy.stgn.jetbrains.ai
datalore.io
kotlinlang.org
youtrack.cloud
zillow.fls.jetbrains.com

File diff suppressed because it is too large Load Diff

View File

@@ -1,163 +0,0 @@
acheron.stream.voidboost.cc
anteros.stream.voidboost.cc
api-bunny.themoviedb.org
api.themoviedb.org
api.tmdb.org
apollo.stream.voidboost.cc
app.kinoplay.app
aquila.stream.voidboost.cc
atlas.stream.voidboost.cc
aurum.stream.voidboost.cc
auth.themoviedb.org
autodiscover.themoviedb.org
baator.stream.voidboost.cc
bbs.stream.voidboost.cc
blog.themoviedb.org
blue.stream.voidboost.cc
bytopia.stream.voidboost.cc
celestia.stream.voidboost.cc
centaurus.stream.voidboost.cc
coliseum.stream.voidboost.cc
consul.stream.voidboost.cc
corvus.stream.voidboost.cc
cub.red
delta.stream.voidboost.cc
developer.themoviedb.org
developers.themoviedb.org
doramy.club
druid.stream.voidboost.cc
eclipse.stream.voidboost.cc
elvis.stream.voidboost.cc
elysium.stream.voidboost.cc
explorer.stream.voidboost.cc
falcon.stream.voidboost.cc
fiber.stream.voidboost.cc
files.themoviedb.org
files.tmdb.org
filmix.ag
filmix.biz
filmix.date
filmix.fm
filmix.me
filmix.ac
flerovium.stream.voidboost.cc
gamma.stream.voidboost.cc
get.kinoplay.app
hammer.stream.voidboost.cc
hdrezka.ag
hdrezka.cm
hdrezka.me
hydrus.stream.voidboost.cc
image-bunny.tmdb.org
image.tmdb.org
images.tmdb.org
jointinum.stream.voidboost.cc
jupiter.stream.voidboost.cc
kino.pub
kinobase.org
kinoplay.app
kinovod.net
kinovod.pro
kinozal.me
kinozal.tv
kurt.stream.voidboost.cc
lacerta.stream.voidboost.cc
limbo.stream.voidboost.cc
lipsium.stream.voidboost.cc
lostfilm.download
lostfilm.tv
lostfilm.win
louvre.stream.voidboost.cc
lutetium.stream.voidboost.cc
lynx.stream.voidboost.cc
m.filmix.me
mail.kino.pub
maxima.stream.voidboost.cc
media.themoviedb.org
mercury.stream.voidboost.cc
milanium.stream.voidboost.cc
monoceros.stream.voidboost.cc
mystic.stream.voidboost.cc
nailium.stream.voidboost.cc
neon.stream.voidboost.cc
nexus.stream.voidboost.cc
nika.stream.voidboost.cc
nuceria.stream.voidboost.cc
omega.stream.voidboost.cc
osmium.stream.voidboost.cc
ozzy.stream.voidboost.cc
pe.stream.voidboost.cc
pegasus.stream.voidboost.cc
phantom.stream.voidboost.cc
phoenix.stream.voidboost.cc
platinum.stream.voidboost.cc
polaris.stream.voidboost.cc
prism.stream.voidboost.cc
proton.stream.voidboost.cc
pulse.stream.voidboost.cc
radium.stream.voidboost.cc
ranger.stream.voidboost.cc
red.stream.voidboost.cc
relax.stream.voidboost.cc
rezka.ag
rezkify.com
rufilmtv.tv
sagitta.stream.voidboost.cc
saturn.stream.voidboost.cc
scorpius.stream.voidboost.cc
secret.stream.voidboost.cc
selenium.stream.voidboost.cc
shadow.stream.voidboost.cc
sierra.stream.voidboost.cc
silence.stream.voidboost.cc
skinium.stream.voidboost.cc
skullium.stream.voidboost.cc
sound.filmix.biz
sound.filmix.fm
sound.filmix.me
srv.voidnetwork.cloud
st.kinobase.org
st.kinovod.net
static.hdrezka.ac
static.hdrezka.ag
static.lostfilm.top
static.voidboost.com
statichdrezka.ac
status.themoviedb.org
stream.voidboost.cc
stream.voidboost.in
strontium.stream.voidboost.cc
thallium.stream.voidboost.cc
themoviedb.org
thumbs.filmix.biz
thumbs.filmix.fm
tmdb.org
tornado.stream.voidboost.cc
ununbium.stream.voidboost.cc
venus.stream.voidboost.cc
vespene.stream.voidboost.cc
viking.stream.voidboost.in
web01.stream.voidboost.cc
web02.stream.voidboost.cc
www.doramy.club
www.filmix.ag
www.filmix.biz
www.filmix.fm
www.filmix.me
www.hdrezka.ag
www.hdrezka.cm
www.kinobase.org
www.kinoplay.app
www.kinovod.net
www.kinozal.me
www.kinozal.tv
www.lostfilm.download
www.lostfilm.tv
www.lostfilm.win
www.m.filmix.me
www.rezka.ag
www.serv01001.xyz
www.stream.voidboost.cc
www.themoviedb.org
zeflix.online
zetimage.net

View File

@@ -50,5 +50,4 @@ syndication.twitter.com
ton.twitter.com
x.com
abs.twimg.com
abs-0.twimg.com
pscp.tv
abs-0.twimg.com

View File

@@ -1,7 +0,0 @@
windsurf.com
codeium.com
server.codeium.com
web-backend.codeium.com
unleash.codeium.com
inference.codeium.com
codeiumdata.com

View File

@@ -1,65 +1,69 @@
account.live.com
account.microsoft.com
accounts.xboxlive.com
activeauth.argo.xboxlive.com
addr.tools
amppublish-ssl.ppe.xboxlive.com
as.gsrv.xboxlive.com
avatarcloset-part.int2.xboxlive.com
avatarcloset-pvt.int2.xboxlive.com
avatarwrite-part.int2.xboxlive.com
bay.gfx.ms
ber01p.gssv-apxy-prod.xboxlive.com
blu.gfx.ms
brms.nonprod.xboxlive.com
careerreader-cy2.xboxlive.com
cimagecallback-ssl.xboxlive.com
developer.test.xboxlive.com
developer.xboxlive.com
device.auth.xboxlive.com
reportingservices.test.xboxlive.com
msn.com
careerreader-cy2.xboxlive.com
user.auth.xboxlive.com
title.auth.xboxlive.com
account.microsoft.com
as.gsrv.xboxlive.com
df.gfx.ms
digicert.com
dlassets-ssl.xboxlive.com
gfx.ms
avatarcloset-pvt.int2.xboxlive.com
xbox.com
xboxservices.com
teal.xboxservices.com
activeauth.argo.xboxlive.com
esearch.nonprod.xboxlive.com
forum.xboxlive.com
forums4.xboxlive.com
forumsuat.xboxlive.com
gamepass.com
gssv-nodepool-wus2-test.xboxlive.com
images-eds-ssl.xboxlive.com
lesthealthfetch.xboxlive.com
liveconnect2.int2.xboxlive.com
login.live.com
ms.nonprod.xboxlive.com
msn.com
o.gfx.ms
developer.xboxlive.com
accounts.xboxlive.com
packages.xboxlive.com
pmservices.cp.microsoft.com
ms.nonprod.xboxlive.com
xboxlive.com
forumsuat.xboxlive.com
xboxab.com
forums4.xboxlive.com
xblsigman.qy.xboxlive.com
dlassets-ssl.xboxlive.com
brms.nonprod.xboxlive.com
mgt.xboxlive.com
avatarwrite-part.int2.xboxlive.com
gssv-nodepool-wus2-test.xboxlive.com
addr.tools
account.live.com
titlestorage.xboxlive.com
microsoftonline.com
xsts.auth.xboxlive.com
ber01p.gssv-apxy-prod.xboxlive.com
xlptools.xboxlive.com
login.live.com
o.gfx.ms
portalservices.xboxlive.com
rdgw2.test.xboxlive.com
redirect.int2.xboxlive.com
reportingservices.test.xboxlive.com
cimagecallback-ssl.xboxlive.com
bay.gfx.ms
tools.test.xboxlive.com
avatarcloset-part.int2.xboxlive.com
rms.nonprod.xboxlive.com
rta.xboxlive.com
search.xboxlive.com
sftp.xboxlive.com
silver.xboxservices.com
statswrite-eap1.dnet.xboxlive.com
tgs.prod.xboxlive.com
title.auth.xboxlive.com
titlestorage.xboxlive.com
tools.test.xboxlive.com
user.auth.xboxlive.com
redirect.int2.xboxlive.com
msftauth.net
amppublish-ssl.ppe.xboxlive.com
developer.test.xboxlive.com
xap.xboxlive.com
xbl-smooth.xboxlive.com
xblsigman.qy.xboxlive.com
xbox.com
xbox.nccp.eu-west-1.prodaa.netflix.com
xbox.nccp.latency.prodaa.netflix.com
xbox.nccp.us-east-1-sa.prodaa.netflix.com
xbox.nccp.us-east-1.prodaa.netflix.com
xbox.nccp.us-west-2.prodaa.netflix.com
xboxlive.com
tgs.prod.xboxlive.com
xemacs.beta.cert.xboxlive.com
xlptools.xboxlive.com
xsts.auth.xboxlive.com
forum.xboxlive.com
sftp.xboxlive.com
mp.microsoft.com
rdgw2.test.xboxlive.com
xbl-smooth.xboxlive.com
images-eds-ssl.xboxlive.com
silver.xboxservices.com
pmservices.cp.microsoft.com
blu.gfx.ms
liveconnect2.int2.xboxlive.com
cp.microsoft.com
lesthealthfetch.xboxlive.com
gamepass.com
statswrite-eap1.dnet.xboxlive.com

View File

@@ -12,7 +12,6 @@ youtu.be
youtube.com
youtubei.googleapis.com
yt4.ggpht.com
yt3.ggpht.com
ytimg.com
ytimg.l.google.com
r1---sn-2gb7sn7r.googlevideo.com
@@ -7343,7 +7342,6 @@ rr3---sn-5hneknek.googlevideo.com
rr3---sn-5hneknes.googlevideo.com
rr3---sn-5oxmp55u-8pxe.googlevideo.com
rr3---sn-8vq54voxu-5qce.googlevideo.com
rr3---sn-8ph2xajvh-axql.googlevideo.com
rr3---sn-a5mekn6d.googlevideo.com
rr3---sn-a5mekn6l.googlevideo.com
rr3---sn-a5mekn6r.googlevideo.com
@@ -7840,7 +7838,6 @@ rr6---sn-u0g3uxax3-pnul.googlevideo.com
rr6---sn-u0g3uxax3-pnur.googlevideo.com
rr6---sn-u0g3uxax3-pnus.googlevideo.com
rr6---sn-u0g3uxax3-pnuz.googlevideo.com
rr6---sn-xguxaxjvh-8v1e.googlevideo.com
rr6---sn-xuj-5qq6.googlevideo.com
rr6---sn-xuj-5qqs.googlevideo.com
rr7---sn-5oxmp55u-8pxe.googlevideo.com

View File

@@ -1,7 +1,7 @@
dnspython>=2.6.1
httpx>=0.27.0
colorama>=0.4.6
tqdm>=4.66.0
requests>=2.31.0
beautifulsoup4>=4.12.3
configparser~=7.0.1
ipaddress~=1.0.23
dnspython~=2.6.1
httpx~=0.27.0
colorama~=0.4.6
requests~=2.31.0
beautifulsoup4~=4.12.3

View File

@@ -2,7 +2,6 @@
- [subdomain - поиск субдоменов](#subdomain)
- [verified - проверка активности доменов](#verified)
- [convert - конвертер маршрутов](#convert)
- [split - разбить список на файлы по 1000 строк](#split)
## subdomain
@@ -71,44 +70,27 @@
### Функции
- Извлечение IP-адресов из файла (файл может содержать любой текст - IP автоматически извлекаются).
- Исключение IP-адресов Cloudflare из итогового списка (опционально).
- Агрегация IP-адресов в подсети:
- `/16` (255.255.0.0)
- `/24` (255.255.255.0)
- Mix режим (`/24` + `/32`)
- Загрузка списка IP-адресов из файла.
- Агрегация IP-адресов в подсети с масками `/16`, `/24`, или объединение нескольких подсетей.
- Исключение IP-адресов Cloudflare из итогового списка (при необходимости).
- Поддержка различных форматов маршрутизации:
- Только IP-адреса
- Windows route (`route add`)
- Linux route (`ip route`)
- Keenetic BAT (`route add` для bat-файлов)
- Keenetic CLI (`ip route` с интерфейсом)
- Mikrotik firewall (`/ip/firewall/address-list`)
- Windows (`route add`)
- Unix (`ip route`)
- Keenetic (`ip route` с интерфейсом)
- Mikrotik (`/ip firewall`)
- WireGuard
- OpenVPN (`push "route"`)
- CIDR нотация
- Автоматическое разделение больших файлов на части (для Keenetic BAT формата, max 999 строк).
- Удаление исходного файла после разделения на части.
- Проверка наличия входного файла с выводом инструкций при его отсутствии.
- OpenVPN
- CIDR (с указанием маски)
### Использование
#### Linux/macOS
1. Установите [зависимости](https://github.com/Ground-Zerro/DomainMapper/blob/main/requirements.txt):
```bash
pip install -r requirements.txt
```
2. Создайте файл `ip.txt` в директории со скриптом и добавьте в него IP-адреса (по одному на строку) или любой текст содержащий IP-адреса.
Пример содержимого `ip.txt`:
```
192.168.1.1
10.0.0.1
Какой-то текст с IP: 172.16.0.1
```
2. Поместите файл c IP-адресами `ip.txt` в корневую директорию проекта. Файл может содержать любой текст и IP-адреса в любом виде - лишнее будет убрано автоматически.
3. Запустите скрипт:
@@ -116,53 +98,4 @@
python convert.py
```
4. Следуйте интерактивным подсказкам на экране:
- Выберите, нужно ли исключить IP-адреса Cloudflare (1 - да, Enter - нет)
- Выберите агрегацию подсетей (1 - /16, 2 - /24, 3 - mix, Enter - без агрегации)
- Выберите формат сохранения (1-8 или Enter для простого списка IP)
- При необходимости укажите шлюз/интерфейс/имя списка
5. Результат будет сохранен в файл `ip.txt` (или в несколько файлов, если был выбран формат с автоматическим разделением).
#### Windows
1. Скачайте файл [convert.bat](https://github.com/Ground-Zerro/DomainMapper/raw/refs/heads/main/utilities/win/convert.bat)
2. Создайте файл `ip.txt` в той же директории, где находится `convert.bat`, и добавьте в него IP-адреса
3. Запустите `convert.bat`
## split
Утилита для разбиения текстового файла на части фиксированного размера.
### Функции
В исходном файле остаются только первые 1000 строк (значение по умолчанию).
Остальные строки сохраняются в новые файлы:
- domain-ip-resolve2.txt
- domain-ip-resolve3.txt
- и т.д., по 1000 строк в каждом.
Если строк меньше или равно 1000 — разбиение не выполняется.
### Использование
1. Установите [зависимости](https://github.com/Ground-Zerro/DomainMapper/blob/main/requirements.txt):
```bash
pip install -r requirements.txt
```
2. Поместите файл c IP-адресами `domain-ip-resolve.txt` в корневую директорию проекта.
3. Запустите скрипт:
```bash
python split.py
```
### Можно указать свой файл и размер блока строк:
```bash
split_file_exact("mydata.txt", max_lines=500)
```
4. Следуйте подсказкам на экране.

View File

@@ -1,12 +1,11 @@
import asyncio
import ipaddress
import os
import re
from collections import defaultdict
import httpx
from colorama import Fore, Style, init
# Цвета
init(autoreset=True)
@@ -29,9 +28,12 @@ def red(text):
def magneta(text):
return f"{Fore.MAGENTA}{text}{Style.RESET_ALL}"
def blue(text):
return f"{Fore.BLUE}{text}{Style.RESET_ALL}"
# IP шлюза для win и unix
def gateway_input(gateway):
if not gateway:
input_gateway = input(f"Укажите {green('IP шлюза')} или {green('имя интерфейса')}: ")
@@ -39,6 +41,8 @@ def gateway_input(gateway):
else:
return gateway
# IP шлюза и имя интерфейса для keenetic
def ken_gateway_input(ken_gateway):
if not ken_gateway:
input_ken_gateway = input(
@@ -47,6 +51,8 @@ def ken_gateway_input(ken_gateway):
else:
return ken_gateway
# Загрузка IP-адресов cloudflare
async def get_cloudflare_ips():
try:
async with httpx.AsyncClient() as client:
@@ -68,22 +74,17 @@ async def get_cloudflare_ips():
print("Ошибка при получении IP адресов Cloudflare:", e)
return set()
# Промт cloudflare фильтр
def check_include_cloudflare(cloudflare):
if cloudflare in ['yes', 'y', 'no', 'n']:
return cloudflare in ['yes', 'y']
return input(f"\n{yellow('Исключить IP адреса Cloudflare из итогового списка?')}"
f"\n{green('yes')} - исключить"
f"\n{green('Enter')} - оставить: ").strip().lower() in ['yes', 'y']
user_input = input(
f"\n{yellow('Исключить IP адреса Cloudflare из итогового списка?')}"
f"\n1. исключить"
f"\n{green('Enter')} - оставить"
f"\nВаш выбор: "
).strip()
if user_input == '1':
return True
else:
return False
# комментарий для microtik firewall
def mk_list_name_input(mk_list_name):
if not mk_list_name:
input_mk_list_name = input(f"Введите {green('LIST_NAME')} для Mikrotik firewall: ")
@@ -91,117 +92,80 @@ def mk_list_name_input(mk_list_name):
else:
return mk_list_name
# Уплотняем имена сервисов
def comment(selected_service):
return ",".join(["".join(word.title() for word in s.split()) for s in selected_service])
# Промт на объединение IP в подсети
def subnet_input(subnet):
if not subnet:
choice = input(
f"\n{yellow('Объединить IP-адреса в подсети?')}"
f"\n1. сократить до {green('/16')} (255.255.0.0)"
f"\n2. сократить до {green('/24')} (255.255.255.0)"
f"\n3. сократить до {green('/24')} + {green('/32')} (255.255.255.0 и 255.255.255.255)"
f"\n{green('Enter')} - пропустить"
f"\nВаш выбор: "
).strip()
if choice == '1':
subnet = '16'
elif choice == '2':
subnet = '24'
elif choice == '3':
subnet = 'mix'
else:
subnet = '32'
subnet = input(
f"\n{yellow('Объединить IP-адреса в подсети?')} "
f"\n{green('16')} - сократить до /16 (255.255.0.0)"
f"\n{green('24')} - сократить до /24 (255.255.255.0)"
f"\n{green('mix')} - сократить до /24 (255.255.255.0) и /32 (255.255.255.255)"
f"\n{green('Enter')} - пропустить: "
).strip().lower()
return subnet if subnet in {'16', '24', 'mix'} else '32'
def group_ips_in_subnets_optimized(filename: str, subnet: str):
# Агрегация маршрутов
def group_ips_in_subnets(filename, subnet):
try:
with open(filename, 'r', encoding='utf-8') as file:
ips = {line.strip() for line in file if line.strip()}
ips = {line.strip() for line in file if line.strip()} # Собираем уникальные IP адреса
subnets = set()
if subnet == "16":
def process_ips(subnet):
for ip in ips:
try:
network = ipaddress.IPv4Network(f"{ip}/16", strict=False)
subnets.add(str(network.network_address))
except ValueError:
continue
print(f"{Style.BRIGHT}IP-адреса агрегированы до /16 подсети{Style.RESET_ALL}")
if subnet == "16":
# Преобразуем в /16 (два последних октета заменяются на 0.0)
network = ipaddress.IPv4Network(f"{ip}/16", strict=False)
subnets.add(f"{network.network_address}")
elif subnet == "24":
# Преобразуем в /24 (последний октет заменяется на 0)
network = ipaddress.IPv4Network(f"{ip}/24", strict=False)
subnets.add(f"{network.network_address}")
except ValueError as e:
print(f"Ошибка в IP адресе: {ip} - {e}")
elif subnet == "24":
for ip in ips:
try:
network = ipaddress.IPv4Network(f"{ip}/24", strict=False)
subnets.add(str(network.network_address))
except ValueError:
continue
print(f"{Style.BRIGHT}IP-адреса агрегированы до /24 подсети{Style.RESET_ALL}")
if subnet in ["24", "16"]:
process_ips(subnet)
print(f"{Style.BRIGHT}IP-адреса агрегированы до /{subnet} подсети{Style.RESET_ALL}")
elif subnet == "mix":
octet_groups = defaultdict(list)
octet_groups = {}
for ip in ips:
key = '.'.join(ip.split('.')[:3])
key = '.'.join(ip.split('.')[:3]) # Группировка по первым трем октетам
if key not in octet_groups:
octet_groups[key] = []
octet_groups[key].append(ip)
for key, group in octet_groups.items():
if len(group) > 1:
subnets.add(key + '.0')
else:
subnets.update(group)
# IP-адреса с совпадающими первыми тремя октетами
network_24 = {key + '.0' for key, group in octet_groups.items() if
len(group) > 1} # Базовый IP для /24 подсетей
# Удаляем IP с совпадающими первыми тремя октетами из множества
ips -= {ip for group in octet_groups.values() if len(group) > 1 for ip in group}
# Оставляем только IP без указания маски для /24 и одиночных IP
subnets.update(ips) # IP без маски для одиночных IP
subnets.update(network_24) # Базовые IP для /24 подсетей
print(f"{Style.BRIGHT}IP-адреса агрегированы до масок /24 и /32{Style.RESET_ALL}")
with open(filename, 'w', encoding='utf-8') as file:
for subnet_ip in sorted(subnets, key=lambda x: ipaddress.IPv4Address(x.split('/')[0])):
file.write(subnet_ip + '\n')
for subnet in sorted(subnets):
file.write(subnet + '\n')
except Exception as e:
print(f"Ошибка при обработке файла: {e}")
def split_file_by_lines(filename: str, max_lines: int = 999):
try:
with open(filename, 'r', encoding='utf-8') as file:
lines = file.readlines()
total_lines = len(lines)
if total_lines <= max_lines:
return False
base_name = filename.rsplit('.', 1)[0] if '.' in filename else filename
extension = '.' + filename.rsplit('.', 1)[1] if '.' in filename else '.txt'
num_parts = (total_lines + max_lines - 1) // max_lines
print(f"\n{Style.BRIGHT}Результаты сохранены в файлы:{Style.RESET_ALL}")
for part in range(num_parts):
start_index = part * max_lines
end_index = min((part + 1) * max_lines, total_lines)
part_filename = f"{base_name}_p{part + 1}{extension}"
with open(part_filename, 'w', encoding='utf-8') as file:
file.writelines(lines[start_index:end_index])
print(f"{Style.BRIGHT}{part_filename} ({end_index - start_index} строк){Style.RESET_ALL}")
print(f"{Style.BRIGHT}Разделение завершено. Создано {num_parts} частей{Style.RESET_ALL}")
try:
os.remove(filename)
except Exception as e:
print(f"{red('Не удалось удалить исходный файл:')} {e}")
return True
except Exception as e:
print(f"{red('Ошибка при разделении файла:')} {e}")
return False
def process_file_format(filename, filetype, gateway, selected_service, mk_list_name, mk_comment, subnet, ken_gateway):
# Выбор формата сохранения результатов
def process_file_format(filename, filetype, gateway, selected_service, mk_list_name, subnet, ken_gateway):
def read_file(filename):
try:
with open(filename, 'r', encoding='utf-8') as file:
@@ -218,83 +182,73 @@ def process_file_format(filename, filetype, gateway, selected_service, mk_list_n
else:
file.write('\n'.join(formatted_ips))
# Определение маски подсети
net_mask = subnet if subnet == "mix" else "255.255.0.0" if subnet == "16" else "255.255.255.0" if subnet == "24" else "255.255.255.255"
if not filetype:
user_input = input(f"""
filetype = input(f"""
{yellow('В каком формате сохранить файл?')}
1. {green('win')} - route add {cyan('IP')} mask {net_mask} {cyan('GATEWAY')}
2. {green('unix')} - ip route {cyan('IP')}/{subnet} {cyan('GATEWAY')}
3. {green('keenetic bat')} - route add {cyan('IP')} mask {net_mask} 0.0.0.0
4. {green('keenetic cli')} - ip route {cyan('IP')}/{subnet} {cyan('GATEWAY GATEWAY_NAME')} auto !{comment(selected_service)}
5. {green('cidr')} - {cyan('IP')}/{subnet}
6. {green('mikrotik')} - /ip/firewall/address-list add list={cyan("LIST_NAME")}{f' comment="{comment(selected_service)}"' if mk_comment != "off" else ""} address={cyan("IP")}/{subnet}
7. {green('ovpn')} - push "route {cyan('IP')} {net_mask}"
8. {green('wireguard')} - {cyan('IP')}/{subnet}, {cyan('IP')}/{subnet}, и т.д...
{green('win')} - route add {cyan('IP')} mask {net_mask} {cyan('GATEWAY')}
{green('unix')} - ip route {cyan('IP')}/{subnet} {cyan('GATEWAY')}
{green('keenetic')} - ip route {cyan('IP')}/{subnet} {cyan('GATEWAY GATEWAY_NAME')} auto !{comment(selected_service)}
{green('cidr')} - {cyan('IP')}/{subnet}
{green('mikrotik')} - /ip/firewall/address-list add list={cyan("LIST_NAME")} comment="{comment(selected_service)}" address={cyan("IP")}/{subnet}
{green('ovpn')} - push "route {cyan('IP')} {net_mask}"
{green('wireguard')} - {cyan('IP')}/{subnet}, {cyan('IP')}/{subnet}, и т.д...
{green('Enter')} - {cyan('IP')}
Ваш выбор: """).strip()
mapping = {
'1': 'win',
'2': 'unix',
'3': 'keenetic bat',
'4': 'keenetic cli',
'5': 'cidr',
'6': 'mikrotik',
'7': 'ovpn',
'8': 'wireguard'
}
filetype = mapping.get(user_input, '')
Ваш выбор: """)
ips = read_file(filename)
if not ips:
return
if filetype in ['win', 'unix']:
# Дополнительные запросы в зависимости от формата файла
if filetype in ['win', 'unix']: # Запрашиваем IP шлюза для win и unix
gateway = gateway_input(gateway)
elif filetype == 'keenetic cli':
elif filetype == 'keenetic': # Запрашиваем IP шлюза и имя интерфейса для keenetic
ken_gateway = ken_gateway_input(ken_gateway)
elif filetype == 'mikrotik':
elif filetype == 'mikrotik': # Запрашиваем ввод комментария для microtik firewall
mk_list_name = mk_list_name_input(mk_list_name)
# обычный формат
formatters = {
'win': lambda ip: f"route add {ip} mask {net_mask} {gateway}",
'unix': lambda ip: f"ip route {ip}/{subnet} {gateway}",
'keenetic bat': lambda ip: f"route add {ip} mask {net_mask} 0.0.0.0",
'keenetic cli': lambda ip: f"ip route {ip}/{subnet} {ken_gateway} auto !{comment(selected_service)}",
'keenetic': lambda ip: f"ip route {ip}/{subnet} {ken_gateway} auto !{comment(selected_service)}",
'cidr': lambda ip: f"{ip}/{subnet}",
'ovpn': lambda ip: f'push "route {ip} {net_mask}"',
'mikrotik': lambda ip: f'/ip/firewall/address-list add list={mk_list_name}' + (f' comment="{comment(selected_service)}"' if mk_comment != "off" else "") + f' address={ip}/{subnet}',
'mikrotik': lambda
ip: f'/ip/firewall/address-list add list={mk_list_name} comment="{comment(selected_service)}" address={ip}/{subnet}',
'wireguard': lambda ip: f"{ip}/{subnet}"
}
# mix формат
if subnet == "mix":
if filetype in ['win', 'keenetic bat']:
mix_formatter = lambda ip: f"{ip.strip()} mask 255.255.255.0" if ip.endswith('.0') else f"{ip.strip()} mask 255.255.255.255"
elif filetype.lower() == 'ovpn':
mix_formatter = lambda ip: f"{ip.strip()} 255.255.255.0" if ip.endswith('.0') else f"{ip.strip()} 255.255.255.255"
else:
if filetype.lower() == 'win': # Обработка для win
mix_formatter = lambda ip: f"{ip.strip()} mask 255.255.255.0" if ip.endswith(
'.0') else f"{ip.strip()} mask 255.255.255.255"
elif filetype.lower() == 'ovpn': # Обработка для ovpn
mix_formatter = lambda ip: f"{ip.strip()} 255.255.255.0" if ip.endswith(
'.0') else f"{ip.strip()} 255.255.255.255"
else: # Обработка для остальных форматов
mix_formatter = lambda ip: f"{ip.strip()}/24" if ip.endswith('.0') else f"{ip.strip()}/32"
formatters.update({
'win': lambda ip: f"route add {mix_formatter(ip)} {gateway}",
'unix': lambda ip: f"ip route {mix_formatter(ip)} {gateway}",
'keenetic bat': lambda ip: f"route add {mix_formatter(ip)} 0.0.0.0",
'keenetic cli': lambda ip: f"ip route {mix_formatter(ip)} {ken_gateway} auto !{comment(selected_service)}",
'keenetic': lambda ip: f"ip route {mix_formatter(ip)} {ken_gateway} auto !{comment(selected_service)}",
'cidr': lambda ip: f"{mix_formatter(ip)}",
'ovpn': lambda ip: f'push "route {mix_formatter(ip)}"',
'mikrotik': lambda ip: f'/ip/firewall/address-list add list={mk_list_name}' + (f' comment="{comment(selected_service)}"' if mk_comment != "off" else "") + f' address={mix_formatter(ip)}',
'mikrotik': lambda ip: f'/ip/firewall/address-list add list={mk_list_name} comment="{comment(selected_service)}" address={mix_formatter(ip)}',
'wireguard': lambda ip: f"{mix_formatter(ip)}"
})
# Запись в файл
if filetype.lower() in formatters:
write_file(filename, ips, formatters[filetype.lower()])
if filetype.lower() == 'keenetic bat':
return split_file_by_lines(filename, max_lines=999)
return False
# Стартуем
async def main():
filename = "ip.txt"
cloudflare = None
@@ -303,45 +257,42 @@ async def main():
gateway = None
selected_services = ["Service"]
mk_list_name = None
mk_comment = 'off'
ken_gateway = None
if not os.path.exists(filename):
print(f"\n{red(f'Ошибка: файл {filename} не найден!')}")
print(f"{yellow('Инструкция:')}")
print(f"1. Создайте файл {green(filename)} в текущей директории")
print(f"2. Добавьте в него IP-адреса (по одному на строку) или текст содержащий IP-адреса")
print(f"3. Запустите скрипт снова")
return
ip_pattern = re.compile(r'\b(?:\d{1,3}\.){3}\d{1,3}\b')
# Открываем файл и читаем строки
with open(filename, 'r') as file:
# Создаем множество для хранения уникальных IP-адресов
ips = set()
# Проходим по каждой строке файла
for line in file:
# Ищем все IP-адреса в строке
found_ips = ip_pattern.findall(line)
# Добавляем найденные IP-адреса в множество
ips.update(found_ips)
# Фильтр Cloudflare
include_cloudflare = check_include_cloudflare(cloudflare)
if include_cloudflare:
if include_cloudflare: # Загрузка IP-адресов Cloudflare
cloudflare_ips = await get_cloudflare_ips()
else:
cloudflare_ips = set()
# Удаляем IP-адреса Cloudflare
ips -= cloudflare_ips
with open(filename, 'w', encoding='utf-8') as file:
for ip in sorted(ips):
file.write(ip + '\n')
# Группировка IP-адресов в подсети
subnet = subnet_input(subnet)
if subnet != '32':
group_ips_in_subnets_optimized(filename, subnet)
if subnet != '32': # Если не '32', вызываем функцию для агрегации
group_ips_in_subnets(filename, subnet)
file_was_split = process_file_format(filename, filetype, gateway, selected_services, mk_list_name, mk_comment, subnet, ken_gateway)
if not file_was_split:
print(f"\n{Style.BRIGHT}Результаты сохранены в файл:{Style.RESET_ALL} {filename}")
process_file_format(filename, filetype, gateway, selected_services, mk_list_name, subnet, ken_gateway)
if __name__ == "__main__":

View File

@@ -1,48 +0,0 @@
def split_file_exact(input_file, max_lines=1000):
"""
Разбивает файл согласно точному описанию:
- В исходном файле оставляет первые 1000 строк
- Остальные строки переносит в domain-ip-resolve2.txt, domain-ip-resolve3.txt и т.д.
"""
try:
# Читаем все строки из исходного файла
with open(input_file, 'r', encoding='utf-8') as f:
lines = f.readlines()
total_lines = len(lines)
if total_lines <= max_lines:
print(f"Файл содержит {total_lines} строк, разбиение не требуется.")
return
# Оставляем первые 1000 строк в исходном файле
with open(input_file, 'w', encoding='utf-8') as f:
f.writelines(lines[:max_lines])
# Остальные строки распределяем по новым файлам
remaining_lines = lines[max_lines:]
num_additional_files = (len(remaining_lines) + max_lines - 1) // max_lines
for i in range(num_additional_files):
start_index = i * max_lines
end_index = min((i + 1) * max_lines, len(remaining_lines))
output_file = f"domain-ip-resolve{i+2}.txt"
with open(output_file, 'w', encoding='utf-8') as f:
f.writelines(remaining_lines[start_index:end_index])
print(f"Создан файл {output_file} со строками {max_lines + start_index + 1}-{max_lines + end_index}")
print(f"Разбиение завершено. Создано {num_additional_files} дополнительных файлов.")
except FileNotFoundError:
print(f"Ошибка: Файл {input_file} не найден.")
except Exception as e:
print(f"Произошла ошибка: {e}")
# Использование
if __name__ == "__main__":
input_filename = "domain-ip-resolve.txt"
split_file_exact(input_filename)

View File

@@ -1,13 +0,0 @@
# Запуск вспомогательных утилит под Win:
- [convert - конвертер маршрутов](#convert)
**Описание:** Поставит Python и зависимости, запустит выбранную утилиту.
## convert
**Использование:**
1. Скачайте файл [convert.bat](https://github.com/Ground-Zerro/DomainMapper/raw/refs/heads/main/utilities/win/convert.bat)
2. Создайте файл `ip.txt` в той же директории, где находится `convert.bat`, и добавьте в него IP-адреса
3. Запустите `convert.bat`

View File

@@ -1,113 +0,0 @@
@echo off
setlocal enabledelayedexpansion
chcp 65001 > NUL
REM Проверка Python 3
:CheckPython
python --version 2>NUL | findstr /I "Python 3" >NUL
if ERRORLEVEL 1 (
echo Python 3 не установлен.
choice /C YN /M "Установить?"
if ERRORLEVEL 2 (
echo Без Python 3 ничего не получится...
pause
exit /b 1
) else (
call :InstallPython
)
) else (
echo Python 3 установлен.
)
goto :CheckModules
REM Инсталляция Python 3
:InstallPython
echo Загрузка дистрибутива...
powershell -Command "if ($PSVersionTable.PSVersion.Major -ge 3) {Invoke-WebRequest -Uri 'https://www.python.org/ftp/python/3.12.5/python-3.12.5-amd64.exe' -OutFile 'python_installer.exe'} else {Start-BitsTransfer -Source 'https://www.python.org/ftp/python/3.12.5/python-3.12.5-amd64.exe' -Destination 'python_installer.exe'}"
REM Проверяем успешность загрузки
if not exist "python_installer.exe" (
echo Ошибка загрузки установщика Python 3.
pause
exit /b 1
)
REM Установка Python 3
echo Установка...
echo PS - не забудьте ее разрешить в соседнем окне
python_installer.exe /quiet InstallAllUsers=1 PrependPath=1
del /q /f python_installer.exe
REM Оповещение о перезапуске
echo.
echo Установка завершена, но требуется обновить окружение.
echo - закройте это окно и запустите скрипт снова.
pause
exit /b 0
REM Проверка и установка необходимых модулей Python
:CheckModules
set "modules=requests dnspython ipaddress configparser httpx colorama"
echo.
echo Проверка необходимых библиотек...
for %%m in (%modules%) do (
pip show %%m >NUL 2>&1
if ERRORLEVEL 1 (
echo Установка библиотеки %%m...
pip install %%m
if ERRORLEVEL 1 (
echo Не удалось установить библиотеку %%m. Проверьте pip.
exit /b 1
)
)
)
goto :DownloadMain
REM Загрузка и запуск convert.py
:DownloadMain
echo Загрузка Domain Mapper Converter...
powershell -Command "if ($PSVersionTable.PSVersion.Major -ge 3) {Invoke-WebRequest -Uri 'https://github.com/Ground-Zerro/DomainMapper/raw/refs/heads/main/utilities/convert.py' -OutFile 'convert.py'} else {Start-BitsTransfer -Source 'https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/main/utilities/convert.py' -Destination 'convert.py'}"
if not exist "convert.py" (
echo Ошибка загрузки Domain Mapper Converter.
pause
exit /b 1
)
if not exist "ip.txt" (
echo.
echo Файл ip.txt не найден.
echo Создайте файл ip.txt в текущей директории и добавьте в него IP-адреса.
echo.
choice /C YN /M "Создать пустой файл ip.txt сейчас?"
if ERRORLEVEL 2 (
echo Завершение работы.
del /q /f convert.py
pause
exit /b 1
) else (
echo. > ip.txt
echo Файл ip.txt создан. Добавьте в него IP-адреса и запустите скрипт снова.
del /q /f convert.py
pause
exit /b 0
)
)
cls
echo Запускаем...
python convert.py
if ERRORLEVEL 1 (
echo Ошибка выполнения convert.py.
pause
del /q /f convert.py
exit /b 1
)
echo Программа завершена.
del /q /f convert.py
endlocal
pause
exit /b 0

11
web/README.md Normal file
View File

@@ -0,0 +1,11 @@
# Попытка перенести DomainMapper на WEB платформу для размещения желающими на собсвтенном хостинге.
Не уверен, что закончу начатое.
Предложения в виде **pull requests** приветствуются.
```
bash <(curl -s https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/web/web_install.sh)
```

44
web/app.py Normal file
View File

@@ -0,0 +1,44 @@
import os
import subprocess
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import uvicorn
# Определение модели для данных запроса
class RunScriptRequest(BaseModel):
config: str
userId: str
# Инициализация FastAPI приложения
app = FastAPI()
@app.post("/run")
async def run_script(request: RunScriptRequest):
config_content = request.config
user_id = request.userId
# Создание имени файла конфигурации
config_filename = f"config-id_{user_id}.ini"
try:
# Запись конфигурации в файл
with open(config_filename, 'w') as f:
f.write(config_content)
# Выполнение команды через subprocess
result = subprocess.run(
['python3', 'main.py', '-c', config_filename],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
# Возвращение результатов выполнения скрипта
return {"stdout": result.stdout, "stderr": result.stderr}
except Exception as e:
raise HTTPException(status_code=500, detail=f"Ошибка: {str(e)}")
# Запуск приложения (для использования с Uvicorn)
if __name__ == "__main__":
# Запуск FastAPI с использованием Uvicorn
uvicorn.run(app, host="0.0.0.0", port=5000)

233
web/index.html Normal file
View File

@@ -0,0 +1,233 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DNS Resolver Settings</title>
<script>
function validateForm(event) {
const services = document.querySelectorAll('input[name="services"]:checked');
const dnsServers = document.querySelectorAll('input[name="dns_servers"]:checked');
const format = document.querySelector('input[name="format"]:checked');
if (services.length === 0) {
alert("Выберите хотя бы один сервис.");
event.preventDefault();
return false;
}
if (dnsServers.length === 0) {
alert("Выберите хотя бы один DNS сервер.");
event.preventDefault();
return false;
}
if (!format) {
alert("Выберите формат сохранения.");
event.preventDefault();
return false;
}
if ((format.value === 'unix' || format.value === 'win' || format.value === 'keenetic') &&
!document.getElementById('gateway').value) {
alert("Укажите IP шлюза.");
event.preventDefault();
return false;
}
return true;
}
function generateConfig(event) {
event.preventDefault();
if (!validateForm(event)) {
return;
}
const services = Array.from(document.querySelectorAll('input[name="services"]:checked')).map(el => el.value).join(',');
const dnsServers = Array.from(document.querySelectorAll('input[name="dns_servers"]:checked')).map(el => el.value).join(' ');
const format = document.querySelector('input[name="format"]:checked').value;
const gateway = document.getElementById('gateway')?.value || '';
const commentary = document.getElementById('commentary')?.value || '';
const cloudflare = document.querySelector('input[name="cloudflare"]:checked') ? 'yes' : 'no';
const aggregation = document.querySelector('input[name="aggregation"]:checked').value;
const userId = Math.floor(Math.random() * 100000); // Случайный ID пользователя
const filename = `out-id_${userId}.txt`;
const config = `
[DomainMapper]
localplatform = no
localdns = no
service = ${services}
dnsserver = ${dnsServers}
cloudflare = ${cloudflare}
subnet = ${aggregation}
filename = ${filename}
filetype = ${format}
gateway = ${gateway}
keenetic = ${gateway}
listname = ${commentary}
mk_comment = off
cfginfo = no
run =
`;
sendConfigToServer(config, userId);
}
function sendConfigToServer(config, userId) {
fetch('/run', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ config: config, userId: userId })
})
.then(response => response.text())
.then(data => {
document.getElementById('progress').innerText = `Конфигурация создана и скрипт запущен. Результат: ${data}`;
})
.catch(error => {
console.error('Ошибка при отправке конфигурации:', error);
document.getElementById('progress').innerText = 'Ошибка при выполнении.';
});
}
function loadServices() {
const serviceUrl = 'https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/platformdb';
fetch(serviceUrl)
.then(response => response.text())
.then(data => {
const lines = data.split('\n');
const servicesContainer = document.getElementById('servicesContainer');
lines.forEach(line => {
const parts = line.split(':');
if (parts.length > 1) {
const serviceName = parts[0].trim();
const label = document.createElement('label');
const input = document.createElement('input');
input.type = 'checkbox';
input.name = 'services';
input.value = serviceName;
label.appendChild(input);
label.appendChild(document.createTextNode(` ${serviceName}`));
servicesContainer.appendChild(label);
servicesContainer.appendChild(document.createElement('br'));
}
});
})
.catch(error => console.error('Error loading services:', error));
}
function loadDNSServers() {
const dnsUrl = 'https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/dnsdb';
fetch(dnsUrl)
.then(response => response.text())
.then(data => {
const lines = data.split('\n');
const dnsServersContainer = document.getElementById('dnsServersContainer');
lines.forEach(line => {
const parts = line.split(':');
if (parts.length > 1) {
const dnsServerName = parts[0].trim();
const label = document.createElement('label');
const input = document.createElement('input');
input.type = 'checkbox';
input.name = 'dns_servers';
input.value = dnsServerName;
label.appendChild(input);
label.appendChild(document.createTextNode(` ${dnsServerName}`));
dnsServersContainer.appendChild(label);
dnsServersContainer.appendChild(document.createElement('br'));
}
});
})
.catch(error => console.error('Error loading DNS servers:', error));
}
function toggleGatewayField() {
const format = document.querySelector('input[name="format"]:checked');
const gatewayField = document.getElementById('gatewayField');
if (format && (format.value === 'unix' || format.value === 'win' || format.value === 'keenetic')) {
gatewayField.style.display = 'block';
} else {
gatewayField.style.display = 'none';
}
}
function toggleCommentField() {
const format = document.querySelector('input[name="format"]:checked');
const commentField = document.getElementById('commentaryField');
if (format && (format.value === 'mikrotik' || format.value === 'keenetic')) {
commentField.style.display = 'block';
} else {
commentField.style.display = 'none';
}
}
window.onload = function() {
loadServices();
loadDNSServers();
toggleGatewayField();
toggleCommentField();
};
document.addEventListener('change', function(event) {
if (event.target.name === 'format') {
toggleGatewayField();
toggleCommentField();
}
});
</script>
</head>
<body>
<h2>Настройки</h2>
<form id="dnsForm" onsubmit="generateConfig(event)">
<label><strong>Список сервисов:</strong></label><br>
<div id="servicesContainer"></div><br>
<label><strong>Список используемых DNS серверов:</strong></label><br>
<div id="dnsServersContainer"></div><br>
<label><strong>Фильтрация Cloudflare:</strong></label><br>
<input type="checkbox" name="cloudflare" value="yes"> Исключить Cloudflare<br><br>
<label><strong>Агрегация подсетей:</strong></label><br>
<input type="radio" name="aggregation" value="16"> До /16 (255.255.0.0)<br>
<input type="radio" name="aggregation" value="24"> До /24 (255.255.255.0)<br>
<input type="radio" name="aggregation" value="mix"> Микс /24 и /32<br>
<input type="radio" name="aggregation" value="none" checked> Не агрегировать<br><br>
<label><strong>Формат сохранения:</strong></label><br>
<input type="radio" name="format" value="ip"> IP (только IP адреса)<br>
<input type="radio" name="format" value="cidr"> CIDR (%IP%/32)<br>
<input type="radio" name="format" value="win"> Windows Route (route add %IP% mask 255.255.255.255 %gateway%)<br>
<input type="radio" name="format" value="unix"> Unix Route (ip route %IP%/32 %gateway%)<br>
<input type="radio" name="format" value="wg"> Wireguard/AmneziaWG (%IP%/32, %IP%/32, и т.д...)<br>
<input type="radio" name="format" value="openvpn"> Open VPN (push "route %IP% 255.255.255.255")<br>
<input type="radio" name="format" value="keenetic"> Keenetic CLI (ip route %IP%/32 %gateway% auto !%commentary%)<br>
<input type="radio" name="format" value="mikrotik"> Mikrotik firewall (/ip/firewall/address-list add list=%commentary% address=%IP%/32)<br><br>
<div id="gatewayField" style="display:none;">
<label><strong>Укажите IP шлюза или имя интерфейса:</strong></label><br>
<input type="text" id="gateway" name="gateway" placeholder="IP или имя шлюза"><br><br>
</div>
<div id="commentaryField" style="display:none;">
<label><strong>Укажите комментарий для списка:</strong></label><br>
<input type="text" id="commentary" name="commentary" placeholder="Комментарий для списка"><br><br>
</div>
<button type="submit">Создать конфигурацию</button>
</form>
<div id="progress"></div>
</body>
</html>

View File

View File

144
web/web_install.sh Normal file
View File

@@ -0,0 +1,144 @@
#!/bin/bash
set -e # Завершение скрипта при ошибке
set -u # Завершение при использовании необъявленных переменных
# Переменные
USERNAME="test123"
APP_DIR="/home/$USERNAME/dns_resolver_app"
SERVICE_FILE="/etc/systemd/system/dns_resolver.service"
NGINX_CONF="/etc/nginx/sites-available/dns_resolver"
EMAIL_ADR="email@example.com"
DOMAIN_NAME="your-domain.com"
# Проверка существования пользователя
if ! id "$USERNAME" &>/dev/null; then
echo "Пользователь $USERNAME не существует."
read -p "Хотите создать пользователя? (y/n): " CREATE_USER
if [[ "$CREATE_USER" =~ ^[Yy]$ ]]; then
sudo useradd -m -s /bin/bash "$USERNAME"
echo "Пользователь $USERNAME успешно создан."
else
echo "Скрипт завершён, так как пользователь не существует."
exit 1
fi
fi
# Убедиться, что пользователь $USERNAME и www-data имеют общую группу
sudo usermod -aG www-data "$USERNAME"
# Обновление системы и установка зависимостей
echo "Обновляем систему и устанавливаем зависимости..."
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip python3-venv gunicorn nginx certbot python3-certbot-nginx -y
# Создание директории приложения
if [[ ! -d "$APP_DIR" ]]; then
echo "Создаем директорию приложения..."
sudo mkdir -p "$APP_DIR"
sudo chown -R "$USERNAME:www-data" "$APP_DIR"
sudo chmod -R 750 "$APP_DIR"
else
echo "Директория приложения уже существует. Пропускаем."
fi
# Создание виртуального окружения от имени www-data
if [[ ! -d "$APP_DIR/venv" ]]; then
echo "Создаем виртуальное окружение..."
sudo -u www-data python3 -m venv "$APP_DIR/venv"
sudo chown -R "$USERNAME:www-data" "$APP_DIR/venv"
sudo chmod -R 750 "$APP_DIR/venv"
else
echo "Виртуальное окружение уже существует. Пропускаем."
fi
# Загрузка файла requirements.txt
REQUIREMENTS_URL="https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/requirements.txt"
if curl --head --fail "$REQUIREMENTS_URL" &>/dev/null; then
curl -o "$APP_DIR/requirements.txt" "$REQUIREMENTS_URL"
echo "Файл requirements.txt успешно загружен."
else
echo "Ошибка: Файл requirements.txt недоступен."
exit 1
fi
# Установка зависимостей Python от имени www-data
echo "Устанавливаем зависимости Python..."
sudo -u www-data bash -c "source $APP_DIR/venv/bin/activate && pip install -r $APP_DIR/requirements.txt fastapi uvicorn pydantic gunicorn"
# Загрузка файлов приложения
FILES=("index.html" "app.py" "main.py")
for FILE in "${FILES[@]}"; do
URL="https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/web/$FILE"
if curl --head --fail "$URL" &>/dev/null; then
curl -o "$APP_DIR/$FILE" "$URL"
echo "Файл $FILE успешно загружен."
sudo chown "$USERNAME:www-data" "$APP_DIR/$FILE"
sudo chmod 640 "$APP_DIR/$FILE"
else
echo "Ошибка: Файл $FILE недоступен."
fi
done
# Проверка прав доступа
sudo chown -R "$USERNAME:www-data" "$APP_DIR"
sudo chmod -R 750 "$APP_DIR"
# Создание системного сервиса
echo "Создаем системный сервис..."
sudo bash -c "cat <<EOF > $SERVICE_FILE
[Unit]
Description=DNS Resolver Web App
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=$APP_DIR
ExecStart=$APP_DIR/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker --bind 127.0.0.1:5000 app:app
[Install]
WantedBy=multi-user.target
EOF"
sudo systemctl daemon-reload
sudo systemctl enable --now dns_resolver
# Настройка Nginx
if [[ ! -f "$NGINX_CONF" ]]; then
echo "Настраиваем Nginx..."
sudo bash -c "cat <<EOF > $NGINX_CONF
server {
listen 80;
server_name $DOMAIN_NAME;
root $APP_DIR;
index index.html;
location / {
try_files \$uri /index.html;
}
location /run {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
}
error_page 404 /index.html;
}
EOF"
sudo ln -sf "$NGINX_CONF" /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx
else
echo "Конфигурация Nginx уже существует. Пропускаем."
fi
# Настройка HTTPS
echo "Настраиваем HTTPS..."
sudo certbot --nginx -n --agree-tos --email "$EMAIL_ADR" -d "$DOMAIN_NAME"
echo "Скрипт выполнен успешно. Приложение доступно по адресу https://$DOMAIN_NAME"