70 Commits

Author SHA1 Message Date
Ground-Zerro
ff01ca1738 Merge pull request #108 from drwolfik/patch-1
Update dns-youtube.txt for ios mobile app
2025-11-03 11:24:10 +11:00
drwolfik
c39753de3f Update dns-youtube.txt for ios mobile app 2025-11-03 00:05:05 +03:00
Ground-Zerro
1f1422c69d Fix line endings for .bat files to CRLF 2025-11-01 23:20:10 +11:00
Ground-Zerro
50c8910dcf Merge branch 'main' of https://github.com/Ground-Zerro/DomainMapper 2025-11-01 22:00:55 +11:00
Ground-Zerro
af64289c0c add-correct 2025-11-01 22:00:02 +11:00
Ground-Zerro
521026aff6 Add files via upload 2025-11-01 21:50:16 +11:00
Ground-Zerro
c097a7dcd5 Delete utilities/win/convert.bat 2025-11-01 21:49:59 +11:00
Ground-Zerro
64abff705f fixS 2025-11-01 21:48:45 +11:00
Ground-Zerro
487093e254 Update README.md 2025-11-01 21:31:26 +11:00
Ground-Zerro
a493beec6f Add files via upload 2025-11-01 21:29:55 +11:00
Ground-Zerro
fd893ac674 Delete Windows/Win.bat 2025-11-01 21:29:33 +11:00
Ground-Zerro
b2c50641b7 Delete old directory 2025-11-01 21:28:02 +11:00
Ground-Zerro
f90af7fec7 Add files via upload 2025-11-01 21:27:34 +11:00
Ground-Zerro
e11e5696cf update 2025-11-01 21:25:15 +11:00
Ground-Zerro
b8ec267ae3 Merge branch 'main' of https://github.com/Ground-Zerro/DomainMapper 2025-10-29 20:29:11 +11:00
Ground-Zerro
dca5e107b4 Update dns-youtube.txt 2025-10-29 20:29:06 +11:00
Ground-Zerro
02970393f6 Merge pull request #102 from MysticalHeat/main
SyntaxError: f-string expression part cannot include a backslash
2025-10-07 20:44:20 +11:00
Ilya
4251bd3e3c Update main.py 2025-10-07 01:03:54 +03:00
Ilya
60dc6d7ae1 Update main.py 2025-10-07 01:02:52 +03:00
Ilya
4568e426a7 Update main.py 2025-10-07 00:57:40 +03:00
Ground-Zerro
d673d30498 Add files via upload 2025-10-06 11:10:21 +11:00
Ground-Zerro
8b25b5c28e Delete Win.bat 2025-10-06 11:09:20 +11:00
Ground-Zerro
0921e326f4 Update Win.bat 2025-10-06 11:07:39 +11:00
Ground-Zerro
527cc4aae8 Update Win.bat 2025-10-06 11:05:34 +11:00
Ground-Zerro
a527bf8f8a Merge branch 'main' of https://github.com/Ground-Zerro/DomainMapper 2025-10-06 11:04:28 +11:00
Ground-Zerro
27d525ae60 Create .gitattributes 2025-10-06 11:03:54 +11:00
Ground-Zerro
c631c4cf44 Add files via upload 2025-10-06 11:00:34 +11:00
Ground-Zerro
03c18c52fc Update Win.bat 2025-10-06 10:52:34 +11:00
Ground-Zerro
7b3190a00a Update Win.bat 2025-10-06 10:51:51 +11:00
Ground-Zerro
b5f8aeb65f Delete main.py 2025-10-03 12:53:59 +11:00
Ground-Zerro
bba8015ae5 Update README.md 2025-10-03 12:48:30 +11:00
Ground-Zerro
94b523c85f Create main.py 2025-10-03 12:46:58 +11:00
Ground-Zerro
78f2bf93e8 Create config.ini 2025-10-03 12:43:46 +11:00
Ground-Zerro
ff0e50f790 Delete .gitignore 2025-10-03 12:43:44 +11:00
Ground-Zerro
f937106d52 Update convert.bat 2025-10-03 12:42:06 +11:00
Ground-Zerro
a6caea23e3 Update .gitignore 2025-10-03 12:41:38 +11:00
Ground-Zerro
535f01a2c0 Update convert.bat 2025-10-03 12:37:38 +11:00
Ground-Zerro
1a8476a1e5 Update Win.bat 2025-10-03 12:20:12 +11:00
Ground-Zerro
92b70ea00e Create README.md 2025-10-03 12:20:09 +11:00
Ground-Zerro
9219ba8edb Update dns-windsurf.txt 2025-09-29 23:25:44 +11:00
Ground-Zerro
83eee42275 Create main.py 2025-09-25 21:29:40 +11:00
Ground-Zerro
e449c45fa9 Delete main-old.py 2025-09-25 21:29:38 +11:00
Ground-Zerro
723144ce41 Delete config-old.ini 2025-09-25 21:29:35 +11:00
Ground-Zerro
f6fccaf791 Create convert.bat 2025-09-25 20:13:14 +11:00
Ground-Zerro
b77daee426 Update README.md 2025-09-07 12:22:05 +11:00
Ground-Zerro
980ec67d2f Update README.md 2025-09-07 12:17:31 +11:00
Ground-Zerro
4a0acfa4ae Update README.md 2025-09-07 12:16:34 +11:00
Ground-Zerro
9b91d6f9df Create split.py 2025-09-07 12:16:32 +11:00
Ground-Zerro
55d9b424d2 Update platformdb 2025-09-04 03:02:29 +11:00
Ground-Zerro
1f07c468a2 Create dns-windsurf.txt 2025-09-04 03:01:26 +11:00
Ground-Zerro
dd21223b61 update 2025-09-04 01:59:41 +11:00
Ground-Zerro
1834ffee26 Update dns-onlinetheater.txt 2025-06-22 12:57:18 +11:00
Ground-Zerro
9085e59067 Update dns-onlinetheater.txt 2025-06-22 12:52:32 +11:00
Ground-Zerro
d8945f1ecf Merge branch 'main' of https://github.com/Ground-Zerro/DomainMapper 2025-05-12 23:37:17 +11:00
Ground-Zerro
bed4db1926 Update dns-facebook.txt 2025-05-12 23:37:15 +11:00
Ground-Zerro
21c77cc79d Merge pull request #88 from cjmaxik/patch-1
Add `pscp.tv` to Twitter
2025-04-09 11:16:32 +11:00
CJMAXiK
15599dffa0 Add pscp.tv to Twitter
`pscp.tv` (old Periscope) runs Spaces on Twitter.
2025-04-07 21:24:44 +03:00
Ground-Zerro
0654f45125 Merge branch 'main' of https://github.com/Ground-Zerro/DomainMapper 2025-03-29 19:57:46 +11:00
Ground-Zerro
d638d707de Update dns-onlinetheater.txt 2025-03-29 19:57:44 +11:00
Ground-Zerro
4d894d7fa4 Update dns record for GitHub Copilot (#84)
* Added .gitignore

* Update dns-github-pilot.txt
2025-03-11 22:19:38 +11:00
Erilov Nikita
30f596b74a Update dns-github-pilot.txt 2025-03-06 17:15:44 +04:00
Erilov Nikita
89c390a887 Added .gitignore 2025-03-06 17:12:27 +04:00
Ground-Zerro
8df4921e5c Update dns-instagram.txt 2025-02-05 09:51:42 +11:00
Ground-Zerro
09866c704b Update dns-instagram.txt 2025-02-05 09:43:17 +11:00
Ground-Zerro
94a09b4670 Update config.ini 2025-02-04 17:03:18 +11:00
Ground-Zerro
46565ce2ab Update README.md 2025-02-04 17:02:03 +11:00
Ground-Zerro
a15aba7963 Update platformdb 2025-02-04 16:59:20 +11:00
Ground-Zerro
fbe369f62d Add files via upload 2025-02-04 16:56:52 +11:00
Ground-Zerro
675ca12691 Update dns-xbox.txt 2025-02-04 09:43:35 +11:00
Ground-Zerro
80a4a40bfc Update dns-netflix.txt 2025-02-04 09:39:20 +11:00
29 changed files with 18198 additions and 2419 deletions

3
.gitattributes vendored Normal file
View File

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

View File

@@ -2,6 +2,9 @@
<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)
@@ -63,7 +66,8 @@
- Преобразование доменных имен популярных сервисов в IP-адреса.
- Агрегация маршрутов в /16 (255.255.0.0) и /24 (255.255.255.0) подсети. Комбинированный режим /24 + /32.
- Фильтрация IP-адресов Cloudflare (опционально).
- Восемь вариантов сохранения результатов.
- Множество форматов сохранения результата.
- Разделение больших файлов на части для некоторых форматов.
**Ключевые особенности**
@@ -163,13 +167,14 @@ 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
# ☕ Поддержка
## ВАЖНО:
Использование сделанных "кем-то", а не Вами лично IP-листов и готовых файлов марштутов - **плохая идея** [ЖМИ](https://github.com/Ground-Zerro/DomainMapper/discussions/50)
Если проект оказался Вам полезен — можно поблагодарить автора:
- [Поддержать на Boosty](https://boosty.to/ground_zerro)

View File

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

View File

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

View File

@@ -1,129 +1,42 @@
[DomainMapper]
# Локальный режим - загружать список сервисов и/или DNS серверов из локального файла
# yes - включить
# no или пусто - выключить
localplatform = yes
localdns = yes
# Локальный режим загрузки (yes/no)
localplatform = no
localdns = no
# Имена сервисов, разделенные запятыми, для разрешения доменных имен в 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" расположенный в одном каталоге со скриптом
# Сервисы для проверки (например: all, youtube, google, telegram, custom и т.д.)
service =
# 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 (основной)
# Список DNS серверов по номерам (0 - все, 1 - системный, 2 - google, 3 - quad9 и т.д.)
dnsserver =
# Включить фильтрацию IP-адресов cloudflare и не записывать их в файл результатов
# опции:
# пустое значение - пользователю будет выведено меню выбора
# yes - исключить IP адреса cloudflare из итогового списка
# no - оставить IP адреса cloudflare в итоговом списке
cloudflare =
# Исключить Cloudflare IP (yes/no)
cloudflare =
# Сгруппировать подсети
# опции:
# пустое значение - пользователю будет выведено меню выбора
# 16 - группировка подсетей до /16 (255.255.0.0)
# 24 - группировка подсетей до /24 (255.255.255.0)
# mix - /24 и /32 в одном файле
# no - оставить как есть
# Агрегация подсетей (16, 24, mix, no)
subnet =
# Имя конечного файла
# опции:
# пустое значение - "domain-ip-resolve.txt" в каталоге со скриптом
# имя_файла - файл с указанным именем будет сохранен в каталоге со скриптом
# полный_путь/имя_файла - файл будет сохранен с указанным именем в указанной каталоге
filename =
# Имя выходного файла
filename = domain-ip-resolve.txt
# Количество потоков сканирования, если не указано - будет использоваться 20 потоков
threads =
# Лимит запросов к каждому DNS серверу (запросов в секунду, по умолчанию 50)
# Контролирует максимальное количество DNS запросов к одному серверу в секунду
rate_limit = 50
# Формат сохранения файла результатов
# опции:
# пустое значение - пользователю будет выведено меню выбора
# 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%
# Формат результата (ip, unix, win, mikrotik, ovpn, wireguard, cidr, keenetic bat и т.д.)
filetype =
# адрес шлюза или имя интерфейса - используется при сохранении IP-адресов в 'win' и 'unix' формате
# опции:
# пустое значение - пользователю будет выведен запрос с подсказкой
# укажите IP-адрес шлюза или имя интерфейса
# Параметры для форматов:
## для win/unix — IP шлюза или имя интерфейса
gateway =
# адрес шлюза или имя интерфейса - используется при сохранении IP-адресов в 'keenetic' формате
# опции:
# пустое значение - пользователю будет выведен запрос с подсказкой
# укажите IP-адрес шлюза или имя интерфейса или IP-адрес шлюза и через пробел имя интерфейса
## для keenetic — IP шлюза или имя интерфейса, можно оба через пробел
keenetic =
# имя списка - используется при сохранении IP-адресов в 'mikrotik' формате
# опции:
# пустое значение - пользователю будет выведен запрос с подсказкой
# укажите имя
## для mikrotik — имя списка address-list
listname =
# комментарий - используется при сохранении IP-адресов в 'mikrotik' формате
# опции:
# on - если вам нужен comment=%SERVICE_NAME% в строке
# off - убрать comment=%SERVICE_NAME% из строки
## для mikrotik - добавить или убирать "comment=%SERVICE_NAME%" в правилах Mikrotik (on/off)
mk_comment = off
# Показывать сведения о загруженной конфигурации при запуске скрипта
# опции:
# yes или пустое значение - показывать
# no - скрыть
# Показывать конфигурацию при запуске (yes/no)
cfginfo = yes
# Команда для консоли после завершения скриптом всех операций, может быть полезно для автоматизации и комбинирования с другим скриптом, кодом или программой
# опции:
# исполняемая_команда_для_консоли
run =
# Выполнить команду или запустить приложение после завершения (команда/полный путь к приложению)
run =

325
domain-ip-resolve.txt Normal file
View File

@@ -0,0 +1,325 @@
103.136.41.171
104.192.140.24
104.192.140.25
104.192.140.26
104.244.43.131
104.247.81.99
107.22.247.231
108.181.60.131
116.202.120.165
116.202.120.166
12.5.163.52
128.150.221.244
13.107.21.200
13.107.213.46
13.107.246.46
13.107.253.51
13.216.68.41
13.227.180.4
13.248.188.196
13.249.91.105
13.249.91.27
13.249.91.55
13.249.91.77
13.33.252.118
13.33.252.123
13.33.252.125
13.33.252.128
13.33.252.129
13.33.252.35
13.33.252.55
13.33.252.61
13.33.252.62
13.33.252.7
13.33.252.87
13.33.252.90
13.35.93.102
13.35.93.103
13.35.93.12
13.35.93.125
13.83.13.216
13.91.95.74
138.68.89.1
140.82.112.21
141.95.92.64
142.229.226.127
142.229.246.30
142.250.196.104
142.250.196.110
142.250.207.46
143.166.136.12
143.166.30.172
145.239.35.18
146.75.112.157
146.75.112.159
150.171.22.11
150.171.27.11
150.171.28.11
151.101.0.81
151.101.1.194
151.101.1.224
151.101.128.81
151.101.129.194
151.101.129.224
151.101.131.42
151.101.192.81
151.101.193.194
151.101.193.224
151.101.195.1
151.101.195.42
151.101.3.1
151.101.3.42
151.101.64.81
151.101.65.194
151.101.65.224
151.101.67.42
157.240.31.35
16.15.178.207
16.15.181.233
160.79.104.10
161.35.220.135
162.55.241.153
165.22.91.219
172.105.192.79
172.105.69.103
172.233.219.123
172.233.219.49
172.233.219.78
172.237.146.25
172.237.146.38
172.237.146.8
178.248.237.68
179.43.150.83
179.43.151.32
179.43.166.40
18.154.132.120
18.154.132.30
18.154.132.61
18.154.132.68
18.154.132.83
18.154.132.86
18.154.132.87
18.154.132.9
18.154.144.104
18.154.144.18
18.154.144.70
18.154.144.88
18.158.198.204
18.164.124.48
18.164.124.69
18.164.124.80
18.164.124.92
18.173.219.124
18.173.219.5
18.173.219.85
18.173.219.98
18.192.161.188
18.192.252.77
18.192.94.166
18.193.221.227
18.197.250.227
18.197.5.201
18.207.85.246
18.238.80.11
18.238.80.111
18.238.80.17
18.238.80.20
18.238.80.43
18.238.80.53
18.238.80.73
18.238.80.84
18.64.122.111
18.64.122.116
18.64.122.55
18.64.122.75
185.110.92.40
185.110.92.41
185.155.96.196
185.70.42.25
185.70.42.42
185.81.128.108
190.115.31.47
192.0.66.233
192.104.24.52
192.124.249.107
194.55.26.46
194.55.30.46
195.12.177.96
195.123.208.131
195.16.73.95
195.245.213.251
195.245.213.252
198.148.79.54
198.202.211.1
199.83.44.71
20.27.177.116
204.79.197.200
204.8.99.144
204.8.99.146
212.53.146.29
212.58.244.129
212.58.244.210
212.58.249.206
212.58.249.207
213.166.70.101
213.183.31.3
217.140.110.36
23.192.45.250
23.192.45.251
23.192.46.10
23.192.46.16
23.192.46.17
23.192.46.18
23.192.46.19
23.192.46.8
23.192.46.9
23.192.47.66
23.192.47.88
23.208.232.54
23.219.68.213
23.35.101.86
23.36.17.19
23.36.17.218
23.39.216.112
23.53.3.132
23.53.3.137
23.53.3.138
3.120.236.241
3.122.12.167
3.163.158.102
3.163.158.51
3.163.158.77
3.163.158.83
3.163.165.106
3.163.165.108
3.163.165.117
3.163.165.21
3.163.165.58
3.163.165.65
3.163.165.67
3.163.165.77
3.165.160.119
3.165.160.125
3.165.160.82
3.165.160.93
3.168.122.102
3.168.122.30
3.168.122.70
3.168.122.96
3.168.2.124
3.168.2.34
3.168.2.45
3.168.2.73
3.168.73.124
3.168.73.14
3.168.73.40
3.168.73.5
3.219.7.240
3.70.4.80
3.72.128.20
3.93.103.92
3.93.83.52
31.13.82.174
31.13.82.36
31.13.82.52
34.120.127.130
34.172.121.65
34.193.227.236
34.210.63.15
34.217.249.79
34.240.120.87
34.78.67.165
34.8.0.82
34.96.84.62
35.156.83.59
35.157.126.60
35.157.160.164
35.167.41.134
35.186.224.24
35.212.37.82
37.1.201.40
37.220.83.128
44.227.138.182
44.234.232.238
44.237.234.25
44.241.61.155
44.242.60.85
45.137.66.127
5.61.53.100
5.9.141.28
50.112.202.115
51.15.27.55
52.13.171.212
52.13.57.203
52.175.140.176
52.209.241.99
52.216.60.56
52.217.132.208
52.217.174.112
52.217.223.32
52.217.234.232
52.26.244.222
52.29.75.203
52.32.28.26
52.33.95.61
52.49.216.222
52.50.101.102
52.57.208.252
52.72.30.131
52.84.20.107
52.84.20.112
52.84.20.55
52.84.20.75
52.88.5.90
54.144.73.197
54.163.108.212
54.167.157.63
54.167.246.209
54.221.253.164
54.231.200.248
54.235.8.174
54.247.109.89
54.68.22.26
54.86.126.30
63.34.30.85
64.227.45.125
66.254.114.41
67.22.51.32
67.22.51.33
67.22.51.34
67.22.51.35
67.22.51.36
67.22.51.37
67.22.51.38
67.22.51.39
69.55.53.168
69.55.53.169
69.55.53.170
69.55.53.171
69.55.53.172
72.163.4.185
75.2.124.44
76.223.63.197
77.37.83.161
77.86.162.1
77.86.162.2
78.46.102.85
82.221.104.145
84.15.66.97
84.246.85.45
87.245.208.97
91.108.98.62
91.200.40.44
91.216.218.44
94.130.182.82
95.216.145.1
99.80.51.179
99.83.136.94
99.84.234.112
99.84.234.128
99.84.234.31
99.84.234.42
99.84.234.5
99.84.234.61
99.84.234.89
99.84.234.96

928
main.py

File diff suppressed because it is too large Load Diff

View File

@@ -19,4 +19,6 @@ 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
Telegram: https://raw.githubusercontent.com/Ground-Zerro/DomainMapper/refs/heads/main/platforms/dns-telegram.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

File diff suppressed because it is too large Load Diff

View File

@@ -5,3 +5,9 @@ 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

View File

@@ -1,4 +1,4 @@
a.ns.cdninstagram.com
Www.instagram.com
a.ns.instagram.com
about.instagram.com
accountscenter.instagram.com
@@ -7,39 +7,64 @@ 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
d.ns.cdninstagram.com
connect.facebook.net
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
g.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
gateway.instagram.com
geo.instagram.com
geo-p42.instagram.com
geo.instagram.com
graph-fallback.instagram.com
graph.facebook.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
@@ -51,13 +76,86 @@ instagda.com
instagify.com
instagmania.com
instagor.com
instagram.c10r.instagram.com
instagram.com
instagram.fkiv7-1.fna.fbcdn.net
instagram-brand.com
instagram-engineering.com
instagramhashtags.net
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
instagramhashtags.net
instagramhilecim.com
instagramhilesi.org
instagramium.com
@@ -66,13 +164,10 @@ 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
@@ -81,24 +176,22 @@ instastyle.tv
instgram.com
l.instagram.com
live-dev.instagram.com
live-upload.instagram.com
live-upload-staging.instagram.com
live-upload.instagram.com
logger.instagram.com
lookaside.facebook.com
lookaside.instagram.com
m.instagram.com
mail.instagram.com
maps.instagram.com
my-od.instagram.com
my-od-3.instagram.com
my-od.instagram.com
oninstagram.com
onlineinstagram.com
online-instagram.com
onlineinstagram.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
@@ -107,42 +200,38 @@ 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-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-2.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-arn2-1.cdninstagram.com
scontent-arn2-1.xx.fbcdn.net
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
@@ -152,21 +241,20 @@ scontent-b-mct1-1.cdninstagram.com
scontent-b-mia.cdninstagram.com
scontent-b-mxp.cdninstagram.com
scontent-b-nrt.cdninstagram.com
scontent-bog1-1.cdninstagram.com
scontent-b-sin.cdninstagram.com
scontent-b-vie.cdninstagram.com
scontent-b.cdninstagram.com
scontent-ber1-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
@@ -174,7 +262,6 @@ 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
@@ -184,18 +271,10 @@ 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
@@ -206,11 +285,10 @@ 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
@@ -218,14 +296,9 @@ 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
@@ -241,7 +314,6 @@ 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
@@ -259,11 +331,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
@@ -276,32 +348,27 @@ 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.instagram.com
upload-ec2.instagram.com
upload.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
@@ -310,103 +377,45 @@ video-qro1-1.cdninstagram.com
video-ssn1-1.cdninstagram.com
video-tpe1-1.cdninstagram.com
web-instagram.net
web.facebook.com
wellbeing.instagram.com
white.instagram.com
Www.instagram.com
www.ig.me
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
@@ -417,4 +426,32 @@ 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-xsp1-2.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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,163 @@
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,4 +50,5 @@ syndication.twitter.com
ton.twitter.com
x.com
abs.twimg.com
abs-0.twimg.com
abs-0.twimg.com
pscp.tv

View File

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

View File

@@ -1,69 +1,65 @@
device.auth.xboxlive.com
reportingservices.test.xboxlive.com
msn.com
careerreader-cy2.xboxlive.com
user.auth.xboxlive.com
title.auth.xboxlive.com
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
df.gfx.ms
digicert.com
gfx.ms
avatarcloset-pvt.int2.xboxlive.com
xbox.com
xboxservices.com
teal.xboxservices.com
activeauth.argo.xboxlive.com
esearch.nonprod.xboxlive.com
developer.xboxlive.com
accounts.xboxlive.com
packages.xboxlive.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
esearch.nonprod.xboxlive.com
forum.xboxlive.com
forums4.xboxlive.com
forumsuat.xboxlive.com
gamepass.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
images-eds-ssl.xboxlive.com
lesthealthfetch.xboxlive.com
liveconnect2.int2.xboxlive.com
login.live.com
ms.nonprod.xboxlive.com
msn.com
o.gfx.ms
packages.xboxlive.com
pmservices.cp.microsoft.com
portalservices.xboxlive.com
cimagecallback-ssl.xboxlive.com
bay.gfx.ms
tools.test.xboxlive.com
avatarcloset-part.int2.xboxlive.com
rdgw2.test.xboxlive.com
redirect.int2.xboxlive.com
reportingservices.test.xboxlive.com
rms.nonprod.xboxlive.com
rta.xboxlive.com
search.xboxlive.com
redirect.int2.xboxlive.com
msftauth.net
amppublish-ssl.ppe.xboxlive.com
developer.test.xboxlive.com
xap.xboxlive.com
tgs.prod.xboxlive.com
xemacs.beta.cert.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
tgs.prod.xboxlive.com
title.auth.xboxlive.com
titlestorage.xboxlive.com
tools.test.xboxlive.com
user.auth.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
xemacs.beta.cert.xboxlive.com
xlptools.xboxlive.com
xsts.auth.xboxlive.com

View File

@@ -12,6 +12,7 @@ youtu.be
youtube.com
youtubei.googleapis.com
yt4.ggpht.com
yt3.ggpht.com
ytimg.com
ytimg.l.google.com
r1---sn-2gb7sn7r.googlevideo.com
@@ -7342,6 +7343,7 @@ 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
@@ -7838,6 +7840,7 @@ 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 @@
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
dnspython>=2.6.1
httpx>=0.27.0
colorama>=0.4.6
tqdm>=4.66.0
requests>=2.31.0
beautifulsoup4>=4.12.3

View File

@@ -2,6 +2,7 @@
- [subdomain - поиск субдоменов](#subdomain)
- [verified - проверка активности доменов](#verified)
- [convert - конвертер маршрутов](#convert)
- [split - разбить список на файлы по 1000 строк](#split)
## subdomain
@@ -70,17 +71,80 @@
### Функции
- Загрузка списка IP-адресов из файла.
- Агрегация IP-адресов в подсети с масками `/16`, `/24`, или объединение нескольких подсетей.
- Исключение IP-адресов Cloudflare из итогового списка (при необходимости).
- Извлечение IP-адресов из файла (файл может содержать любой текст - IP автоматически извлекаются).
- Исключение IP-адресов Cloudflare из итогового списка (опционально).
- Агрегация IP-адресов в подсети:
- `/16` (255.255.0.0)
- `/24` (255.255.255.0)
- Mix режим (`/24` + `/32`)
- Поддержка различных форматов маршрутизации:
- Windows (`route add`)
- Unix (`ip route`)
- Keenetic (`ip route` с интерфейсом)
- Mikrotik (`/ip firewall`)
- Только IP-адреса
- Windows route (`route add`)
- Linux route (`ip route`)
- Keenetic BAT (`route add` для bat-файлов)
- Keenetic CLI (`ip route` с интерфейсом)
- Mikrotik firewall (`/ip/firewall/address-list`)
- WireGuard
- OpenVPN
- CIDR (с указанием маски)
- OpenVPN (`push "route"`)
- CIDR нотация
- Автоматическое разделение больших файлов на части (для Keenetic BAT формата, max 999 строк).
- Удаление исходного файла после разделения на части.
- Проверка наличия входного файла с выводом инструкций при его отсутствии.
### Использование
#### 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
```
3. Запустите скрипт:
```bash
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 — разбиение не выполняется.
### Использование
@@ -90,12 +154,15 @@
pip install -r requirements.txt
```
2. Поместите файл c IP-адресами `ip.txt` в корневую директорию проекта. Файл может содержать любой текст и IP-адреса в любом виде - лишнее будет убрано автоматически.
2. Поместите файл c IP-адресами `domain-ip-resolve.txt` в корневую директорию проекта.
3. Запустите скрипт:
```bash
python convert.py
python split.py
```
### Можно указать свой файл и размер блока строк:
4. Следуйте подсказкам на экране.
```bash
split_file_exact("mydata.txt", max_lines=500)
```

View File

@@ -1,11 +1,12 @@
import asyncio
import ipaddress
import os
import re
from collections import defaultdict
import httpx
from colorama import Fore, Style, init
# Цвета
init(autoreset=True)
@@ -28,12 +29,9 @@ 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('имя интерфейса')}: ")
@@ -41,8 +39,6 @@ def gateway_input(gateway):
else:
return gateway
# IP шлюза и имя интерфейса для keenetic
def ken_gateway_input(ken_gateway):
if not ken_gateway:
input_ken_gateway = input(
@@ -51,8 +47,6 @@ def ken_gateway_input(ken_gateway):
else:
return ken_gateway
# Загрузка IP-адресов cloudflare
async def get_cloudflare_ips():
try:
async with httpx.AsyncClient() as client:
@@ -74,17 +68,22 @@ 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: ")
@@ -92,80 +91,117 @@ 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:
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()
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'
return subnet if subnet in {'16', '24', 'mix'} else '32'
# Агрегация маршрутов
def group_ips_in_subnets(filename, subnet):
def group_ips_in_subnets_optimized(filename: str, subnet: str):
try:
with open(filename, 'r', encoding='utf-8') as file:
ips = {line.strip() for line in file if line.strip()} # Собираем уникальные IP адреса
ips = {line.strip() for line in file if line.strip()}
subnets = set()
def process_ips(subnet):
if subnet == "16":
for ip in ips:
try:
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}")
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 in ["24", "16"]:
process_ips(subnet)
print(f"{Style.BRIGHT}IP-адреса агрегированы до /{subnet} подсети{Style.RESET_ALL}")
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}")
elif subnet == "mix":
octet_groups = {}
octet_groups = defaultdict(list)
for ip in ips:
key = '.'.join(ip.split('.')[:3]) # Группировка по первым трем октетам
if key not in octet_groups:
octet_groups[key] = []
key = '.'.join(ip.split('.')[:3])
octet_groups[key].append(ip)
# 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 подсетей
for key, group in octet_groups.items():
if len(group) > 1:
subnets.add(key + '.0')
else:
subnets.update(group)
print(f"{Style.BRIGHT}IP-адреса агрегированы до масок /24 и /32{Style.RESET_ALL}")
with open(filename, 'w', encoding='utf-8') as file:
for subnet in sorted(subnets):
file.write(subnet + '\n')
for subnet_ip in sorted(subnets, key=lambda x: ipaddress.IPv4Address(x.split('/')[0])):
file.write(subnet_ip + '\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()
# Выбор формата сохранения результатов
def process_file_format(filename, filetype, gateway, selected_service, mk_list_name, subnet, ken_gateway):
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 read_file(filename):
try:
with open(filename, 'r', encoding='utf-8') as file:
@@ -182,73 +218,83 @@ 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:
filetype = input(f"""
user_input = input(f"""
{yellow('В каком формате сохранить файл?')}
{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}, и т.д...
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('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']: # Запрашиваем IP шлюза для win и unix
if filetype in ['win', 'unix']:
gateway = gateway_input(gateway)
elif filetype == 'keenetic': # Запрашиваем IP шлюза и имя интерфейса для keenetic
elif filetype == 'keenetic cli':
ken_gateway = ken_gateway_input(ken_gateway)
elif filetype == 'mikrotik': # Запрашиваем ввод комментария для microtik firewall
elif filetype == 'mikrotik':
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': lambda ip: f"ip route {ip}/{subnet} {ken_gateway} auto !{comment(selected_service)}",
'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)}",
'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} comment="{comment(selected_service)}" address={ip}/{subnet}',
'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}',
'wireguard': lambda ip: f"{ip}/{subnet}"
}
# mix формат
if subnet == "mix":
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: # Обработка для остальных форматов
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:
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': lambda ip: f"ip route {mix_formatter(ip)} {ken_gateway} auto !{comment(selected_service)}",
'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)}",
'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} comment="{comment(selected_service)}" address={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)}',
'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
@@ -257,42 +303,45 @@ 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: # Загрузка IP-адресов Cloudflare
if include_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': # Если не '32', вызываем функцию для агрегации
group_ips_in_subnets(filename, subnet)
if subnet != '32':
group_ips_in_subnets_optimized(filename, subnet)
process_file_format(filename, filetype, gateway, selected_services, mk_list_name, subnet, ken_gateway)
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}")
if __name__ == "__main__":

48
utilities/split.py Normal file
View File

@@ -0,0 +1,48 @@
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)

13
utilities/win/README.md Normal file
View File

@@ -0,0 +1,13 @@
# Запуск вспомогательных утилит под 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`

113
utilities/win/convert.bat Normal file
View File

@@ -0,0 +1,113 @@
@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

View File

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

View File

@@ -1,44 +0,0 @@
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)

View File

@@ -1,233 +0,0 @@
<!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

@@ -1,144 +0,0 @@
#!/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"