mirror of
https://github.com/Ground-Zerro/DomainMapper.git
synced 2025-12-10 01:47:18 +07:00
Compare commits
1 Commits
main
...
revert-79-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d5989b44b |
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -1,3 +0,0 @@
|
||||
* text=auto
|
||||
*.bat -text
|
||||
*.cmd -text
|
||||
15
README.md
15
README.md
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
```
|
||||
|
||||
@@ -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... Как это починить я ХЗ.
|
||||
|
||||
131
config.ini
131
config.ini
@@ -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 =
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -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
|
||||
@@ -1,7 +0,0 @@
|
||||
windsurf.com
|
||||
codeium.com
|
||||
server.codeium.com
|
||||
web-backend.codeium.com
|
||||
unleash.codeium.com
|
||||
inference.codeium.com
|
||||
codeiumdata.com
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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. Следуйте подсказкам на экране.
|
||||
|
||||
@@ -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__":
|
||||
|
||||
@@ -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)
|
||||
@@ -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`
|
||||
@@ -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
11
web/README.md
Normal 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
44
web/app.py
Normal 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
233
web/index.html
Normal 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>
|
||||
0
web/static/для статики JS
Normal file
0
web/static/для статики JS
Normal file
0
web/templates/для шаблонов
Normal file
0
web/templates/для шаблонов
Normal file
144
web/web_install.sh
Normal file
144
web/web_install.sh
Normal 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"
|
||||
Reference in New Issue
Block a user