tglock/tg_unblock.bat

853 lines
31 KiB
Batchfile
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@echo off
chcp 65001 >nul 2>&1
setlocal enabledelayedexpansion
:: ============================================================
:: TG Unblock — обход блокировки/замедления Telegram
:: Требуется запуск от имени администратора
:: ============================================================
:: --- Проверка прав администратора ---
net session >nul 2>&1
if %errorlevel% neq 0 (
echo [!] Скрипт требует прав администратора.
echo Перезапускаю с повышенными правами...
powershell -Command "Start-Process -Verb RunAs -FilePath '%~f0'"
exit /b
)
set "SCRIPT_DIR=%~dp0"
set "TOOLS_DIR=%SCRIPT_DIR%tools"
set "GDPI_DIR=%TOOLS_DIR%\goodbyedpi-0.2.3rc3-2"
set "GDPI_EXE=%GDPI_DIR%\x86_64\goodbyedpi.exe"
set "BLACKLIST=%SCRIPT_DIR%tg_blacklist.txt"
set "GDPI_URL=https://github.com/ValdikSS/GoodbyeDPI/releases/download/0.2.3rc3/goodbyedpi-0.2.3rc3-2.zip"
set "GDPI_ZIP=%TOOLS_DIR%\goodbyedpi.zip"
title TG Unblock — Обход блокировки Telegram
:MENU
cls
echo ============================================================
echo TG Unblock — Обход блокировки Telegram
echo ============================================================
echo.
echo [*] ЗАПУСТИТЬ ОБХОД (авто) — нажмите 7
echo.
echo [1] Сменить DNS (Cloudflare / Google)
echo [2] Запустить GoodbyeDPI (обход DPI)
echo [3] Комбинированный режим (DNS + GoodbyeDPI)
echo [4] Тест соединения с Telegram
echo [5] Сбросить настройки (вернуть DNS, остановить GoodbyeDPI)
echo [6] Показать текущие настройки сети
echo [7] === АВТО-ОБХОД (одна кнопка) ===
echo [0] Выход
echo.
echo ============================================================
set /p "choice=Выберите действие [0-7]: "
if "%choice%"=="1" goto DNS_MENU
if "%choice%"=="2" goto DPI_START
if "%choice%"=="3" goto COMBINED
if "%choice%"=="4" goto TEST
if "%choice%"=="5" goto RESET
if "%choice%"=="6" goto SHOW_NET
if "%choice%"=="7" goto AUTO_BYPASS
if "%choice%"=="0" goto EXIT
echo [!] Неверный выбор.
timeout /t 2 >nul
goto MENU
:: ============================================================
:: 1. СМЕНА DNS
:: ============================================================
:DNS_MENU
cls
echo ============================================================
echo Смена DNS
echo ============================================================
echo.
echo [1] Cloudflare DNS (1.1.1.1 / 1.0.0.1)
echo [2] Google DNS (8.8.8.8 / 8.8.4.4)
echo [3] Quad9 DNS (9.9.9.9 / 149.112.112.112)
echo [4] Cloudflare DoH (1.1.1.1 + DNS-over-HTTPS)
echo [0] Назад
echo.
set /p "dns_choice=Выберите DNS провайдера [0-4]: "
if "%dns_choice%"=="1" (
set "DNS1=1.1.1.1"
set "DNS2=1.0.0.1"
set "DNS_NAME=Cloudflare"
)
if "%dns_choice%"=="2" (
set "DNS1=8.8.8.8"
set "DNS2=8.8.4.4"
set "DNS_NAME=Google"
)
if "%dns_choice%"=="3" (
set "DNS1=9.9.9.9"
set "DNS2=149.112.112.112"
set "DNS_NAME=Quad9"
)
if "%dns_choice%"=="4" (
set "DNS1=1.1.1.1"
set "DNS2=1.0.0.1"
set "DNS_NAME=Cloudflare DoH"
goto SET_DNS_DOH
)
if "%dns_choice%"=="0" goto MENU
if not defined DNS1 (
echo [!] Неверный выбор.
timeout /t 2 >nul
goto DNS_MENU
)
:SET_DNS
echo.
echo [*] Определяю активный сетевой адаптер...
for /f "tokens=1,2,3,4,*" %%a in ('netsh interface ipv4 show interfaces ^| findstr /i "connected"') do (
set "ADAPTER_NAME=%%e"
)
if not defined ADAPTER_NAME (
for /f "tokens=*" %%a in ('powershell -Command "(Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Select-Object -First 1).Name"') do (
set "ADAPTER_NAME=%%a"
)
)
if not defined ADAPTER_NAME (
echo [!] Не удалось определить сетевой адаптер.
echo Введите имя адаптера вручную (например: Ethernet, Wi-Fi):
set /p "ADAPTER_NAME="
)
echo [*] Адаптер: !ADAPTER_NAME!
echo [*] Устанавливаю DNS: %DNS_NAME% (%DNS1%, %DNS2%)...
netsh interface ipv4 set dnsservers "!ADAPTER_NAME!" static %DNS1% primary validate=no >nul 2>&1
netsh interface ipv4 add dnsservers "!ADAPTER_NAME!" %DNS2% index=2 validate=no >nul 2>&1
echo [*] Очищаю DNS-кеш...
ipconfig /flushdns >nul 2>&1
echo.
echo [OK] DNS успешно изменён на %DNS_NAME% (%DNS1%, %DNS2%)
echo.
pause
goto MENU
:SET_DNS_DOH
echo.
echo [*] Определяю активный сетевой адаптер...
for /f "tokens=*" %%a in ('powershell -Command "(Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Select-Object -First 1).Name"') do (
set "ADAPTER_NAME=%%a"
)
if not defined ADAPTER_NAME (
echo [!] Не удалось определить адаптер. Введите имя вручную:
set /p "ADAPTER_NAME="
)
echo [*] Адаптер: !ADAPTER_NAME!
echo [*] Устанавливаю DNS: Cloudflare (1.1.1.1, 1.0.0.1)...
netsh interface ipv4 set dnsservers "!ADAPTER_NAME!" static 1.1.1.1 primary validate=no >nul 2>&1
netsh interface ipv4 add dnsservers "!ADAPTER_NAME!" 1.0.0.1 index=2 validate=no >nul 2>&1
ipconfig /flushdns >nul 2>&1
echo [*] Включаю DNS-over-HTTPS в системе (Windows 11+)...
powershell -Command "try { Set-DnsClientDohServerAddress -ServerAddress '1.1.1.1' -DohTemplate 'https://cloudflare-dns.com/dns-query' -AllowFallbackToUdp $true -AutoUpgrade $true -ErrorAction Stop; Set-DnsClientDohServerAddress -ServerAddress '1.0.0.1' -DohTemplate 'https://cloudflare-dns.com/dns-query' -AllowFallbackToUdp $true -AutoUpgrade $true -ErrorAction Stop; Write-Host '[OK] DoH активирован' } catch { Write-Host '[!] DoH недоступен на этой версии Windows, DNS установлен без DoH' }"
echo.
echo [OK] DNS установлен на Cloudflare с DoH.
echo.
pause
goto MENU
:: ============================================================
:: 2. ЗАПУСК GoodbyeDPI
:: ============================================================
:DPI_START
cls
echo ============================================================
echo GoodbyeDPI — обход DPI
echo ============================================================
echo.
:: Проверяем наличие GoodbyeDPI
if not exist "%GDPI_EXE%" (
echo [!] GoodbyeDPI не найден.
goto DOWNLOAD_GDPI
)
:DPI_MODE_MENU
echo.
echo Выберите режим GoodbyeDPI:
echo.
echo [1] Режим -9 (максимальная защита, рекомендуется)
echo [2] Режим -5 (средний)
echo [3] Режим -1 (базовый, совместимый)
echo [4] Кастомный (-e 2 -f 2 -q -r -m)
echo [5] Авто-перебор (попробует все режимы)
echo [0] Назад
echo.
set /p "dpi_mode=Выберите режим [0-5]: "
if "%dpi_mode%"=="0" goto MENU
:: Убиваем старый процесс если запущен
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
if "%dpi_mode%"=="1" (
echo [*] Запускаю GoodbyeDPI в режиме -9 (максимальная защита)...
start "" /B "%GDPI_EXE%" -9 --blacklist "%BLACKLIST%"
goto DPI_STARTED
)
if "%dpi_mode%"=="2" (
echo [*] Запускаю GoodbyeDPI в режиме -5 (средний)...
start "" /B "%GDPI_EXE%" -5 --blacklist "%BLACKLIST%"
goto DPI_STARTED
)
if "%dpi_mode%"=="3" (
echo [*] Запускаю GoodbyeDPI в режиме -1 (базовый)...
start "" /B "%GDPI_EXE%" -1 --blacklist "%BLACKLIST%"
goto DPI_STARTED
)
if "%dpi_mode%"=="4" (
echo [*] Запускаю GoodbyeDPI в кастомном режиме...
start "" /B "%GDPI_EXE%" -e 2 -f 2 -q -r -m --blacklist "%BLACKLIST%"
goto DPI_STARTED
)
if "%dpi_mode%"=="5" goto DPI_AUTO
echo [!] Неверный выбор.
timeout /t 2 >nul
goto DPI_MODE_MENU
:DPI_STARTED
timeout /t 2 >nul
tasklist /fi "imagename eq goodbyedpi.exe" 2>nul | findstr /i "goodbyedpi" >nul
if %errorlevel%==0 (
echo.
echo [OK] GoodbyeDPI запущен успешно!
echo Работает в фоне. Для остановки используйте пункт 5 (Сброс).
) else (
echo.
echo [!] GoodbyeDPI не удалось запустить.
echo Проверьте что антивирус не блокирует WinDivert.
)
echo.
pause
goto MENU
:: ============================================================
:: АВТО-ПЕРЕБОР РЕЖИМОВ
:: ============================================================
:DPI_AUTO
echo.
echo [*] Авто-перебор режимов GoodbyeDPI...
echo [*] Буду пробовать каждый режим и тестировать соединение.
echo.
set "MODES=-9;-5;-1;-e 2 -f 2 -q -r -m;-e 1 -f 1 -q -r -m -s;-p -f 2 -e 2 -q"
set "MODE_NAMES=Режим -9 (макс);Режим -5 (средний);Режим -1 (базовый);Кастом1 (-e2 -f2 -q -r -m);Кастом2 (-e1 -f1 -q -r -m -s);Кастом3 (-p -f2 -e2 -q)"
set "mode_idx=0"
set "best_mode="
for %%m in ("-9" "-5" "-1") do (
set /a mode_idx+=1
echo --- Тест !mode_idx!: GoodbyeDPI %%~m ---
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" %%~m --blacklist "%BLACKLIST%"
timeout /t 3 >nul
tasklist /fi "imagename eq goodbyedpi.exe" 2>nul | findstr /i "goodbyedpi" >nul
if !errorlevel! neq 0 (
echo [FAIL] Не запустился
) else (
powershell -Command "$r = try { (Invoke-WebRequest -Uri 'https://web.telegram.org' -TimeoutSec 10 -UseBasicParsing).StatusCode } catch { 0 }; if ($r -eq 200) { Write-Host ' [OK] web.telegram.org доступен!'; exit 0 } else { Write-Host ' [FAIL] web.telegram.org недоступен'; exit 1 }"
if !errorlevel!==0 (
set "best_mode=%%~m"
echo [***] Рабочий режим найден: %%~m
)
)
)
:: Пробуем кастомные режимы
for %%p in (
"-e 2 -f 2 -q -r -m"
"-e 1 -f 1 -q -r -m -s"
"-p -f 2 -e 2 -q"
) do (
set /a mode_idx+=1
echo --- Тест !mode_idx!: GoodbyeDPI %%~p ---
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" %%~p --blacklist "%BLACKLIST%"
timeout /t 3 >nul
tasklist /fi "imagename eq goodbyedpi.exe" 2>nul | findstr /i "goodbyedpi" >nul
if !errorlevel! neq 0 (
echo [FAIL] Не запустился
) else (
powershell -Command "$r = try { (Invoke-WebRequest -Uri 'https://web.telegram.org' -TimeoutSec 10 -UseBasicParsing).StatusCode } catch { 0 }; if ($r -eq 200) { Write-Host ' [OK] web.telegram.org доступен!'; exit 0 } else { Write-Host ' [FAIL] web.telegram.org недоступен'; exit 1 }"
if !errorlevel!==0 (
if not defined best_mode (
set "best_mode=%%~p"
echo [***] Рабочий режим найден: %%~p
)
)
)
)
echo.
if defined best_mode (
echo ============================================================
echo [OK] Лучший рабочий режим: !best_mode!
echo Перезапускаю GoodbyeDPI с этим режимом...
echo ============================================================
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" !best_mode! --blacklist "%BLACKLIST%"
) else (
echo ============================================================
echo [!] Ни один режим GoodbyeDPI не помог.
echo Возможно, нужен VPN или MTProxy.
echo ============================================================
taskkill /f /im goodbyedpi.exe >nul 2>&1
)
echo.
pause
goto MENU
:: ============================================================
:: 3. КОМБИНИРОВАННЫЙ РЕЖИМ
:: ============================================================
:COMBINED
cls
echo ============================================================
echo Комбинированный режим (DNS + GoodbyeDPI)
echo ============================================================
echo.
:: --- DNS ---
echo [*] Устанавливаю DNS Cloudflare (1.1.1.1)...
for /f "tokens=*" %%a in ('powershell -Command "(Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Select-Object -First 1).Name"') do (
set "ADAPTER_NAME=%%a"
)
if defined ADAPTER_NAME (
netsh interface ipv4 set dnsservers "!ADAPTER_NAME!" static 1.1.1.1 primary validate=no >nul 2>&1
netsh interface ipv4 add dnsservers "!ADAPTER_NAME!" 1.0.0.1 index=2 validate=no >nul 2>&1
ipconfig /flushdns >nul 2>&1
echo [OK] DNS установлен: Cloudflare (1.1.1.1, 1.0.0.1)
) else (
echo [!] Не удалось определить сетевой адаптер для DNS.
)
:: --- GoodbyeDPI ---
if not exist "%GDPI_EXE%" (
echo.
echo [!] GoodbyeDPI не найден. Скачиваю...
call :DO_DOWNLOAD_GDPI
if not exist "%GDPI_EXE%" (
echo [!] Не удалось скачать GoodbyeDPI. Работаю только с DNS.
pause
goto MENU
)
)
echo.
echo [*] Запускаю GoodbyeDPI в режиме -9...
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" -9 --blacklist "%BLACKLIST%"
timeout /t 2 >nul
tasklist /fi "imagename eq goodbyedpi.exe" 2>nul | findstr /i "goodbyedpi" >nul
if %errorlevel%==0 (
echo [OK] GoodbyeDPI запущен.
) else (
echo [!] GoodbyeDPI не запустился. Пробую режим -5...
start "" /B "%GDPI_EXE%" -5 --blacklist "%BLACKLIST%"
timeout /t 2 >nul
)
echo.
echo ============================================================
echo [OK] Комбинированный режим активирован:
echo DNS: Cloudflare 1.1.1.1
echo DPI: GoodbyeDPI
echo ============================================================
echo.
:: Быстрый тест
echo [*] Проверяю доступность Telegram...
powershell -Command "$r = try { $sw = [System.Diagnostics.Stopwatch]::StartNew(); $resp = Invoke-WebRequest -Uri 'https://web.telegram.org' -TimeoutSec 15 -UseBasicParsing; $sw.Stop(); Write-Host \"[OK] web.telegram.org доступен (${($sw.ElapsedMilliseconds)}ms)\"; } catch { Write-Host '[!] web.telegram.org пока недоступен, подождите немного...' }"
echo.
pause
goto MENU
:: ============================================================
:: 4. ТЕСТ СОЕДИНЕНИЯ
:: ============================================================
:TEST
cls
echo ============================================================
echo Тест соединения с Telegram
echo ============================================================
echo.
echo [*] Проверяю GoodbyeDPI...
tasklist /fi "imagename eq goodbyedpi.exe" 2>nul | findstr /i "goodbyedpi" >nul
if %errorlevel%==0 (
echo GoodbyeDPI: ЗАПУЩЕН
) else (
echo GoodbyeDPI: не запущен
)
echo.
echo [*] Текущий DNS:
powershell -Command "Get-DnsClientServerAddress -AddressFamily IPv4 | Where-Object {$_.ServerAddresses.Count -gt 0} | Format-Table InterfaceAlias, ServerAddresses -AutoSize"
echo.
echo [*] Пинг серверов Telegram (DC1-DC5)...
echo.
set "TG_IPS=149.154.175.50 149.154.167.51 149.154.175.100 149.154.167.91 91.108.56.100 91.108.4.100"
for %%i in (%TG_IPS%) do (
echo Пинг %%i...
ping -n 1 -w 3000 %%i >nul 2>&1
if !errorlevel!==0 (
for /f "tokens=*" %%t in ('ping -n 1 -w 3000 %%i ^| findstr /i "time="') do (
echo [OK] %%i — %%t
)
) else (
echo [FAIL] %%i — недоступен
)
)
echo.
echo [*] Проверяю TCP-соединение (порт 443)...
echo.
for %%i in (149.154.175.50 149.154.167.51 91.108.56.100) do (
powershell -Command "$tcp = New-Object System.Net.Sockets.TcpClient; try { $tcp.ConnectAsync('%%i', 443).Wait(5000) | Out-Null; if ($tcp.Connected) { Write-Host ' [OK] %%i:443 — TCP доступен' } else { Write-Host ' [FAIL] %%i:443 — таймаут' } } catch { Write-Host ' [FAIL] %%i:443 — отказано' } finally { $tcp.Dispose() }"
)
echo.
echo [*] Проверяю HTTPS доступность...
echo.
for %%u in (
"https://web.telegram.org"
"https://core.telegram.org"
"https://t.me"
) do (
powershell -Command "$url = '%%~u'; try { $sw = [System.Diagnostics.Stopwatch]::StartNew(); $r = Invoke-WebRequest -Uri $url -TimeoutSec 10 -UseBasicParsing; $sw.Stop(); $ms = $sw.ElapsedMilliseconds; Write-Host \" [OK] $url — HTTP $($r.StatusCode) (${ms}ms)\" } catch { Write-Host \" [FAIL] $url — недоступен\" }"
)
echo.
echo [*] Проверяю DNS резолвинг...
echo.
for %%d in (web.telegram.org core.telegram.org t.me telegram.org) do (
powershell -Command "try { $ip = [System.Net.Dns]::GetHostAddresses('%%d') | Select-Object -First 1; Write-Host \" [OK] %%d -> $($ip.IPAddressToString)\" } catch { Write-Host ' [FAIL] %%d — DNS не резолвится' }"
)
echo.
echo ============================================================
echo Тест завершён
echo ============================================================
echo.
pause
goto MENU
:: ============================================================
:: 5. СБРОС НАСТРОЕК
:: ============================================================
:RESET
cls
echo ============================================================
echo Сброс настроек
echo ============================================================
echo.
echo [*] Останавливаю GoodbyeDPI...
taskkill /f /im goodbyedpi.exe >nul 2>&1
echo [OK] GoodbyeDPI остановлен.
echo.
echo [*] Возвращаю DNS к автоматическому (DHCP)...
for /f "tokens=*" %%a in ('powershell -Command "(Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Select-Object -First 1).Name"') do (
set "ADAPTER_NAME=%%a"
)
if defined ADAPTER_NAME (
netsh interface ipv4 set dnsservers "!ADAPTER_NAME!" dhcp >nul 2>&1
ipconfig /flushdns >nul 2>&1
echo [OK] DNS сброшен на DHCP (автоматический).
) else (
echo [!] Не удалось определить адаптер. Сбросьте DNS вручную.
)
echo.
echo [OK] Все настройки сброшены.
echo.
pause
goto MENU
:: ============================================================
:: 6. ПОКАЗАТЬ ТЕКУЩИЕ НАСТРОЙКИ
:: ============================================================
:SHOW_NET
cls
echo ============================================================
echo Текущие сетевые настройки
echo ============================================================
echo.
echo [*] Сетевые адаптеры:
powershell -Command "Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Format-Table Name, InterfaceDescription, Status, LinkSpeed -AutoSize"
echo [*] DNS серверы:
powershell -Command "Get-DnsClientServerAddress -AddressFamily IPv4 | Where-Object {$_.ServerAddresses.Count -gt 0} | Format-Table InterfaceAlias, ServerAddresses -AutoSize"
echo [*] IP-конфигурация:
ipconfig | findstr /i "IPv4 Subnet Gateway DNS"
echo.
echo [*] GoodbyeDPI:
tasklist /fi "imagename eq goodbyedpi.exe" 2>nul | findstr /i "goodbyedpi" >nul
if %errorlevel%==0 (
echo Статус: ЗАПУЩЕН
for /f "tokens=2" %%p in ('tasklist /fi "imagename eq goodbyedpi.exe" /fo list ^| findstr "PID"') do (
echo PID: %%p
)
) else (
echo Статус: не запущен
)
echo.
pause
goto MENU
:: ============================================================
:: СКАЧИВАНИЕ GoodbyeDPI
:: ============================================================
:DOWNLOAD_GDPI
echo.
echo [*] GoodbyeDPI необходим для обхода DPI.
echo Скачать автоматически с GitHub?
echo.
echo [1] Да, скачать
echo [0] Нет, назад
echo.
set /p "dl_choice=Выбор [0-1]: "
if "%dl_choice%"=="0" goto MENU
if "%dl_choice%"=="1" (
call :DO_DOWNLOAD_GDPI
if exist "%GDPI_EXE%" goto DPI_MODE_MENU
pause
goto MENU
)
goto MENU
:DO_DOWNLOAD_GDPI
echo.
echo [*] Создаю папку tools...
if not exist "%TOOLS_DIR%" mkdir "%TOOLS_DIR%"
echo [*] Скачиваю GoodbyeDPI с GitHub...
echo URL: %GDPI_URL%
echo.
powershell -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; try { Invoke-WebRequest -Uri '%GDPI_URL%' -OutFile '%GDPI_ZIP%' -UseBasicParsing; Write-Host '[OK] Скачано успешно' } catch { Write-Host \"[!] Ошибка скачивания: $($_.Exception.Message)\"; exit 1 }"
if not exist "%GDPI_ZIP%" (
echo [!] Не удалось скачать файл.
echo Попробуйте скачать вручную:
echo %GDPI_URL%
echo и распаковать в %GDPI_DIR%
exit /b 1
)
echo [*] Распаковываю...
powershell -Command "try { Expand-Archive -Path '%GDPI_ZIP%' -DestinationPath '%TOOLS_DIR%' -Force; Write-Host '[OK] Распаковано' } catch { Write-Host \"[!] Ошибка распаковки: $($_.Exception.Message)\"; exit 1 }"
:: Ищем goodbyedpi.exe рекурсивно
if not exist "%GDPI_EXE%" (
echo [*] Ищу goodbyedpi.exe...
for /f "tokens=*" %%f in ('powershell -Command "Get-ChildItem -Path '%TOOLS_DIR%' -Recurse -Filter 'goodbyedpi.exe' | Select-Object -First 1 | ForEach-Object { $_.DirectoryName }"') do (
set "FOUND_DIR=%%f"
)
if defined FOUND_DIR (
echo [*] Найден в: !FOUND_DIR!
set "GDPI_DIR=!FOUND_DIR!"
set "GDPI_EXE=!FOUND_DIR!\goodbyedpi.exe"
:: Обновим путь для x86_64
if not exist "!FOUND_DIR!\goodbyedpi.exe" (
for /f "tokens=*" %%f in ('powershell -Command "Get-ChildItem -Path '%TOOLS_DIR%' -Recurse -Filter 'goodbyedpi.exe' | Select-Object -First 1 | ForEach-Object { $_.FullName }"') do (
set "GDPI_EXE=%%f"
echo [*] Путь к exe: %%f
)
)
)
)
if exist "%GDPI_EXE%" (
echo.
echo [OK] GoodbyeDPI установлен: %GDPI_EXE%
del "%GDPI_ZIP%" >nul 2>&1
) else (
echo.
echo [!] goodbyedpi.exe не найден после распаковки.
echo Проверьте папку: %TOOLS_DIR%
)
exit /b 0
:: ============================================================
:: 7. АВТО-ОБХОД (одна кнопка) — замеряет ВСЕ режимы,
:: выбирает самый быстрый
:: ============================================================
:AUTO_BYPASS
cls
echo ============================================================
echo АВТО-ОБХОД — тестирую ВСЕ режимы, выбираю лучший...
echo Это займёт 2-3 минуты.
echo ============================================================
echo.
:: --- Шаг 1: Определяю адаптер ---
echo [1] Определяю сетевой адаптер...
set "ADAPTER_NAME="
for /f "tokens=*" %%a in ('powershell -Command "(Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Select-Object -First 1).Name"') do (
set "ADAPTER_NAME=%%a"
)
if not defined ADAPTER_NAME (
echo [!] Не удалось определить адаптер.
pause
goto MENU
)
echo Адаптер: !ADAPTER_NAME!
:: --- Шаг 2: DNS ---
echo.
echo [2] Устанавливаю DNS Cloudflare (1.1.1.1)...
netsh interface ipv4 set dnsservers "!ADAPTER_NAME!" static 1.1.1.1 primary validate=no >nul 2>&1
netsh interface ipv4 add dnsservers "!ADAPTER_NAME!" 1.0.0.1 index=2 validate=no >nul 2>&1
ipconfig /flushdns >nul 2>&1
echo OK
:: --- Шаг 3: GoodbyeDPI ---
echo.
echo [3] Ищу GoodbyeDPI...
if not exist "%GDPI_EXE%" (
echo Не найден, скачиваю...
call :DO_DOWNLOAD_GDPI
if not exist "%GDPI_EXE%" (
echo [!] Не удалось скачать GoodbyeDPI.
pause
goto MENU
)
)
echo OK: %GDPI_EXE%
:: --- Шаг 4: Бенчмарк каждого режима ---
echo.
echo ============================================================
echo Замеряю скорость каждого режима...
echo ============================================================
echo.
set "BEST_MODE="
set "BEST_SCORE=99999"
set "BEST_LABEL="
set "MODE_NUM=0"
:: Benchmark function is a powershell one-liner that does
:: 2x TCP + 1x HTTPS, returns average ms (lower=better), 99999 if fail
set "BENCH_CMD=powershell -Command "$total=0; $ok=0; foreach($ip in @('149.154.167.51','149.154.175.50','91.108.56.100')) { foreach($i in 1..2) { $tcp=New-Object Net.Sockets.TcpClient; $sw=[Diagnostics.Stopwatch]::StartNew(); try { [void]$tcp.ConnectAsync($ip,443).Wait(4000); if($tcp.Connected){$sw.Stop();$total+=$sw.ElapsedMilliseconds;$ok++} } catch {} finally {$tcp.Dispose()} } }; try { $sw2=[Diagnostics.Stopwatch]::StartNew(); $r=Invoke-WebRequest 'https://web.telegram.org' -TimeoutSec 8 -UseBasicParsing; $sw2.Stop(); $total+=$sw2.ElapsedMilliseconds*3; $ok+=3 } catch {}; if($ok -eq 0){Write-Host 99999}else{Write-Host([math]::Floor($total/$ok))}""
:: Mode 1: без GoodbyeDPI (только DNS)
set /a MODE_NUM+=1
echo [%MODE_NUM%/8] Только DNS (без GoodbyeDPI)...
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
for /f "tokens=*" %%s in ('%BENCH_CMD%') do set "SCORE=%%s"
echo Скорость: !SCORE!ms
if !SCORE! LSS !BEST_SCORE! (
set "BEST_SCORE=!SCORE!"
set "BEST_MODE=dns_only"
set "BEST_LABEL=Только DNS"
)
:: Mode 2: -9
set /a MODE_NUM+=1
echo [%MODE_NUM%/8] GoodbyeDPI -9 (максимальная защита)...
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" -9 --blacklist "%BLACKLIST%"
timeout /t 2 >nul
for /f "tokens=*" %%s in ('%BENCH_CMD%') do set "SCORE=%%s"
echo Скорость: !SCORE!ms
if !SCORE! LSS !BEST_SCORE! (
set "BEST_SCORE=!SCORE!"
set "BEST_MODE=-9"
set "BEST_LABEL=GoodbyeDPI -9"
)
:: Mode 3: -5
set /a MODE_NUM+=1
echo [%MODE_NUM%/8] GoodbyeDPI -5 (средний)...
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" -5 --blacklist "%BLACKLIST%"
timeout /t 2 >nul
for /f "tokens=*" %%s in ('%BENCH_CMD%') do set "SCORE=%%s"
echo Скорость: !SCORE!ms
if !SCORE! LSS !BEST_SCORE! (
set "BEST_SCORE=!SCORE!"
set "BEST_MODE=-5"
set "BEST_LABEL=GoodbyeDPI -5"
)
:: Mode 4: -1
set /a MODE_NUM+=1
echo [%MODE_NUM%/8] GoodbyeDPI -1 (базовый)...
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" -1 --blacklist "%BLACKLIST%"
timeout /t 2 >nul
for /f "tokens=*" %%s in ('%BENCH_CMD%') do set "SCORE=%%s"
echo Скорость: !SCORE!ms
if !SCORE! LSS !BEST_SCORE! (
set "BEST_SCORE=!SCORE!"
set "BEST_MODE=-1"
set "BEST_LABEL=GoodbyeDPI -1"
)
:: Mode 5: custom -e2 -f2 -q -r -m
set /a MODE_NUM+=1
echo [%MODE_NUM%/8] GoodbyeDPI -e2 -f2 -q -r -m...
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" -e 2 -f 2 -q -r -m --blacklist "%BLACKLIST%"
timeout /t 2 >nul
for /f "tokens=*" %%s in ('%BENCH_CMD%') do set "SCORE=%%s"
echo Скорость: !SCORE!ms
if !SCORE! LSS !BEST_SCORE! (
set "BEST_SCORE=!SCORE!"
set "BEST_MODE=-e 2 -f 2 -q -r -m"
set "BEST_LABEL=GoodbyeDPI -e2 -f2 -q -r -m"
)
:: Mode 6: custom -p -f2 -e2 -q
set /a MODE_NUM+=1
echo [%MODE_NUM%/8] GoodbyeDPI -p -f2 -e2 -q...
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" -p -f 2 -e 2 -q --blacklist "%BLACKLIST%"
timeout /t 2 >nul
for /f "tokens=*" %%s in ('%BENCH_CMD%') do set "SCORE=%%s"
echo Скорость: !SCORE!ms
if !SCORE! LSS !BEST_SCORE! (
set "BEST_SCORE=!SCORE!"
set "BEST_MODE=-p -f 2 -e 2 -q"
set "BEST_LABEL=GoodbyeDPI -p -f2 -e2 -q"
)
:: Mode 7: custom -e40 -f2 -q -r -m
set /a MODE_NUM+=1
echo [%MODE_NUM%/8] GoodbyeDPI -e40 -f2 -q -r -m...
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" -e 40 -f 2 -q -r -m --blacklist "%BLACKLIST%"
timeout /t 2 >nul
for /f "tokens=*" %%s in ('%BENCH_CMD%') do set "SCORE=%%s"
echo Скорость: !SCORE!ms
if !SCORE! LSS !BEST_SCORE! (
set "BEST_SCORE=!SCORE!"
set "BEST_MODE=-e 40 -f 2 -q -r -m"
set "BEST_LABEL=GoodbyeDPI -e40 -f2 -q -r -m"
)
:: Mode 8: -9 --set-ttl 5
set /a MODE_NUM+=1
echo [%MODE_NUM%/8] GoodbyeDPI -9 --set-ttl 5...
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
start "" /B "%GDPI_EXE%" -9 --set-ttl 5 --blacklist "%BLACKLIST%"
timeout /t 2 >nul
for /f "tokens=*" %%s in ('%BENCH_CMD%') do set "SCORE=%%s"
echo Скорость: !SCORE!ms
if !SCORE! LSS !BEST_SCORE! (
set "BEST_SCORE=!SCORE!"
set "BEST_MODE=-9 --set-ttl 5"
set "BEST_LABEL=GoodbyeDPI -9 --set-ttl 5"
)
:: --- Применяем лучший ---
echo.
echo ============================================================
if "!BEST_SCORE!"=="99999" (
echo [!] Ни один режим не сработал. Попробуйте VPN или MTProxy.
taskkill /f /im goodbyedpi.exe >nul 2>&1
pause
goto MENU
)
echo ЛУЧШИЙ РЕЖИМ: !BEST_LABEL!
echo СКОРОСТЬ: !BEST_SCORE!ms
echo ============================================================
echo.
taskkill /f /im goodbyedpi.exe >nul 2>&1
timeout /t 1 >nul
if "!BEST_MODE!"=="dns_only" (
echo [OK] DNS Cloudflare достаточно, GoodbyeDPI не нужен.
) else (
echo [*] Запускаю GoodbyeDPI с лучшими параметрами...
start "" /B "%GDPI_EXE%" !BEST_MODE! --blacklist "%BLACKLIST%"
timeout /t 2 >nul
echo [OK] GoodbyeDPI запущен: !BEST_MODE!
)
echo.
echo ============================================================
echo [OK] ОБХОД АКТИВИРОВАН!
echo DNS: Cloudflare 1.1.1.1
echo Режим: !BEST_LABEL! (!BEST_SCORE!ms)
echo Для остановки — пункт 5 в меню.
echo ============================================================
pause
goto MENU
:: ============================================================
:: ВЫХОД
:: ============================================================
:EXIT
echo.
echo [*] GoodbyeDPI будет остановлен при выходе? (y/n)
set /p "exit_choice="
if /i "%exit_choice%"=="y" (
taskkill /f /im goodbyedpi.exe >nul 2>&1
echo [OK] GoodbyeDPI остановлен.
)
echo.
echo Bye!
endlocal
exit /b 0