mirror of https://github.com/by-sonic/tglock.git
853 lines
31 KiB
Batchfile
853 lines
31 KiB
Batchfile
@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
|