8 Commits
1.9.1 ... 1.9.2

Author SHA1 Message Date
Flowseal
4180d36b68 Version bump 2025-12-28 06:00:34 +03:00
Flowseal
5033f20594 Update hosts and readme instructions 2025-12-28 05:59:29 +03:00
Flowseal
789254328a hosts for finnish discord voice channels 2025-12-28 05:47:44 +03:00
pandatick
f754baa650 Include all .bat instead general-*.bat (#7879) 2025-12-28 05:08:10 +03:00
Matvey Beloded
04df4830e7 Fixed script termination if no option was selected in 'Install Service' (#7897) 2025-12-28 05:07:52 +03:00
FlowersOfMind
e20eecd37c fix freezing on tests and best strategy choosing (#7853) 2025-12-28 05:07:44 +03:00
Flowseal
8a1885d7d0 fix typo 2025-12-25 21:00:31 +03:00
Flowseal
d2cf5c005c Readme update 2025-12-25 18:32:59 +03:00
5 changed files with 362 additions and 20 deletions

200
.service/hosts Normal file
View File

@@ -0,0 +1,200 @@
104.25.158.178 finland10000.discord.media
104.25.158.178 finland10001.discord.media
104.25.158.178 finland10002.discord.media
104.25.158.178 finland10003.discord.media
104.25.158.178 finland10004.discord.media
104.25.158.178 finland10005.discord.media
104.25.158.178 finland10006.discord.media
104.25.158.178 finland10007.discord.media
104.25.158.178 finland10008.discord.media
104.25.158.178 finland10009.discord.media
104.25.158.178 finland10010.discord.media
104.25.158.178 finland10011.discord.media
104.25.158.178 finland10012.discord.media
104.25.158.178 finland10013.discord.media
104.25.158.178 finland10014.discord.media
104.25.158.178 finland10015.discord.media
104.25.158.178 finland10016.discord.media
104.25.158.178 finland10017.discord.media
104.25.158.178 finland10018.discord.media
104.25.158.178 finland10019.discord.media
104.25.158.178 finland10020.discord.media
104.25.158.178 finland10021.discord.media
104.25.158.178 finland10022.discord.media
104.25.158.178 finland10023.discord.media
104.25.158.178 finland10024.discord.media
104.25.158.178 finland10025.discord.media
104.25.158.178 finland10026.discord.media
104.25.158.178 finland10027.discord.media
104.25.158.178 finland10028.discord.media
104.25.158.178 finland10029.discord.media
104.25.158.178 finland10030.discord.media
104.25.158.178 finland10031.discord.media
104.25.158.178 finland10032.discord.media
104.25.158.178 finland10033.discord.media
104.25.158.178 finland10034.discord.media
104.25.158.178 finland10035.discord.media
104.25.158.178 finland10036.discord.media
104.25.158.178 finland10037.discord.media
104.25.158.178 finland10038.discord.media
104.25.158.178 finland10039.discord.media
104.25.158.178 finland10040.discord.media
104.25.158.178 finland10041.discord.media
104.25.158.178 finland10042.discord.media
104.25.158.178 finland10043.discord.media
104.25.158.178 finland10044.discord.media
104.25.158.178 finland10045.discord.media
104.25.158.178 finland10046.discord.media
104.25.158.178 finland10047.discord.media
104.25.158.178 finland10048.discord.media
104.25.158.178 finland10049.discord.media
104.25.158.178 finland10050.discord.media
104.25.158.178 finland10051.discord.media
104.25.158.178 finland10052.discord.media
104.25.158.178 finland10053.discord.media
104.25.158.178 finland10054.discord.media
104.25.158.178 finland10055.discord.media
104.25.158.178 finland10056.discord.media
104.25.158.178 finland10057.discord.media
104.25.158.178 finland10058.discord.media
104.25.158.178 finland10059.discord.media
104.25.158.178 finland10060.discord.media
104.25.158.178 finland10061.discord.media
104.25.158.178 finland10062.discord.media
104.25.158.178 finland10063.discord.media
104.25.158.178 finland10064.discord.media
104.25.158.178 finland10065.discord.media
104.25.158.178 finland10066.discord.media
104.25.158.178 finland10067.discord.media
104.25.158.178 finland10068.discord.media
104.25.158.178 finland10069.discord.media
104.25.158.178 finland10070.discord.media
104.25.158.178 finland10071.discord.media
104.25.158.178 finland10072.discord.media
104.25.158.178 finland10073.discord.media
104.25.158.178 finland10074.discord.media
104.25.158.178 finland10075.discord.media
104.25.158.178 finland10076.discord.media
104.25.158.178 finland10077.discord.media
104.25.158.178 finland10078.discord.media
104.25.158.178 finland10079.discord.media
104.25.158.178 finland10080.discord.media
104.25.158.178 finland10081.discord.media
104.25.158.178 finland10082.discord.media
104.25.158.178 finland10083.discord.media
104.25.158.178 finland10084.discord.media
104.25.158.178 finland10085.discord.media
104.25.158.178 finland10086.discord.media
104.25.158.178 finland10087.discord.media
104.25.158.178 finland10088.discord.media
104.25.158.178 finland10089.discord.media
104.25.158.178 finland10090.discord.media
104.25.158.178 finland10091.discord.media
104.25.158.178 finland10092.discord.media
104.25.158.178 finland10093.discord.media
104.25.158.178 finland10094.discord.media
104.25.158.178 finland10095.discord.media
104.25.158.178 finland10096.discord.media
104.25.158.178 finland10097.discord.media
104.25.158.178 finland10098.discord.media
104.25.158.178 finland10099.discord.media
104.25.158.178 finland10100.discord.media
104.25.158.178 finland10101.discord.media
104.25.158.178 finland10102.discord.media
104.25.158.178 finland10103.discord.media
104.25.158.178 finland10104.discord.media
104.25.158.178 finland10105.discord.media
104.25.158.178 finland10106.discord.media
104.25.158.178 finland10107.discord.media
104.25.158.178 finland10108.discord.media
104.25.158.178 finland10109.discord.media
104.25.158.178 finland10110.discord.media
104.25.158.178 finland10111.discord.media
104.25.158.178 finland10112.discord.media
104.25.158.178 finland10113.discord.media
104.25.158.178 finland10114.discord.media
104.25.158.178 finland10115.discord.media
104.25.158.178 finland10116.discord.media
104.25.158.178 finland10117.discord.media
104.25.158.178 finland10118.discord.media
104.25.158.178 finland10119.discord.media
104.25.158.178 finland10120.discord.media
104.25.158.178 finland10121.discord.media
104.25.158.178 finland10122.discord.media
104.25.158.178 finland10123.discord.media
104.25.158.178 finland10124.discord.media
104.25.158.178 finland10125.discord.media
104.25.158.178 finland10126.discord.media
104.25.158.178 finland10127.discord.media
104.25.158.178 finland10128.discord.media
104.25.158.178 finland10129.discord.media
104.25.158.178 finland10130.discord.media
104.25.158.178 finland10131.discord.media
104.25.158.178 finland10132.discord.media
104.25.158.178 finland10133.discord.media
104.25.158.178 finland10134.discord.media
104.25.158.178 finland10135.discord.media
104.25.158.178 finland10136.discord.media
104.25.158.178 finland10137.discord.media
104.25.158.178 finland10138.discord.media
104.25.158.178 finland10139.discord.media
104.25.158.178 finland10140.discord.media
104.25.158.178 finland10141.discord.media
104.25.158.178 finland10142.discord.media
104.25.158.178 finland10143.discord.media
104.25.158.178 finland10144.discord.media
104.25.158.178 finland10145.discord.media
104.25.158.178 finland10146.discord.media
104.25.158.178 finland10147.discord.media
104.25.158.178 finland10148.discord.media
104.25.158.178 finland10149.discord.media
104.25.158.178 finland10150.discord.media
104.25.158.178 finland10151.discord.media
104.25.158.178 finland10152.discord.media
104.25.158.178 finland10153.discord.media
104.25.158.178 finland10154.discord.media
104.25.158.178 finland10155.discord.media
104.25.158.178 finland10156.discord.media
104.25.158.178 finland10157.discord.media
104.25.158.178 finland10158.discord.media
104.25.158.178 finland10159.discord.media
104.25.158.178 finland10160.discord.media
104.25.158.178 finland10161.discord.media
104.25.158.178 finland10162.discord.media
104.25.158.178 finland10163.discord.media
104.25.158.178 finland10164.discord.media
104.25.158.178 finland10165.discord.media
104.25.158.178 finland10166.discord.media
104.25.158.178 finland10167.discord.media
104.25.158.178 finland10168.discord.media
104.25.158.178 finland10169.discord.media
104.25.158.178 finland10170.discord.media
104.25.158.178 finland10171.discord.media
104.25.158.178 finland10172.discord.media
104.25.158.178 finland10173.discord.media
104.25.158.178 finland10174.discord.media
104.25.158.178 finland10175.discord.media
104.25.158.178 finland10176.discord.media
104.25.158.178 finland10177.discord.media
104.25.158.178 finland10178.discord.media
104.25.158.178 finland10179.discord.media
104.25.158.178 finland10180.discord.media
104.25.158.178 finland10181.discord.media
104.25.158.178 finland10182.discord.media
104.25.158.178 finland10183.discord.media
104.25.158.178 finland10184.discord.media
104.25.158.178 finland10185.discord.media
104.25.158.178 finland10186.discord.media
104.25.158.178 finland10187.discord.media
104.25.158.178 finland10188.discord.media
104.25.158.178 finland10189.discord.media
104.25.158.178 finland10190.discord.media
104.25.158.178 finland10191.discord.media
104.25.158.178 finland10192.discord.media
104.25.158.178 finland10193.discord.media
104.25.158.178 finland10194.discord.media
104.25.158.178 finland10195.discord.media
104.25.158.178 finland10196.discord.media
104.25.158.178 finland10197.discord.media
104.25.158.178 finland10198.discord.media
104.25.158.178 finland10199.discord.media

View File

@@ -1 +1 @@
1.9.1
1.9.2

View File

@@ -56,6 +56,7 @@
- **`Run Diagnostics`** - диагностика на распространённые причины, по которым zapret может не работать.
В конце можно очистить кэш <img src="https://cdn-icons-png.flaticon.com/128/5968/5968756.png" height=11 /> `Discord`, что может помочь, если он неожиданно перестал работать
- **`Check Updates`** - проверка на обновления
- **`Switch Check Updates`** - Вкл/Выкл автоматическую проверку на обновления
- **`Switch Game Filter`** - переключение режима обхода для игр (и других сервисов, использующих UDP и TCP на портах выше 1023).
**После переключения требуется перезапуск стратегии.**
В скобках указан текущий статус (включено/выключено).
@@ -66,6 +67,10 @@
- `loaded` - айпи проверяется на вхождение в список
- `any` - любой айпи попадает под фильтр
- **`Update ipset list`** - обновление списка `ipset-all.txt` актуальным из репозитория
- **`Update hosts file`** - обновление файла hosts <ins>**для починки подключения к голосовому чату Discord**</ins>
- **`Run Tests`** - запуск утилиты для проверки стратегий на работоспособность:
- `Standard tests` - проверка сайтов из `utils/targets.txt`
- `DPI checkers` - проверка DPI на различных провайдерах (Cloudflare, Amazon и др.)
## ☑️Распространенные вопросы и проблемы
@@ -75,6 +80,13 @@
- После запуска стратегии (отдельным bat файлом, не через service), должен открыться winws.exe (обход), который можно увидеть в панели задач.
Если этого не произошло, то см. [#522](https://github.com/Flowseal/zapret-discord-youtube/issues/522)
### Бесконечное "подключение" к голосовому чату Discord
Запустите **`service.bat`**, выберите пункт **`Update hosts file (for discord voice)`**. После чего, если ваш hosts будет неактуальным, то Вам будет предложено обновить его самостоятельно:
-опируйте весь текст из открывшегося блокнота
- Откройте файл `hosts` в появившейся папке с помощью текстового редактора
- Добавьте в конец файла `hosts` то, что скопировали (или замените, если до этого Вы уже добавляли подобное)
- Сохраните и перепроверьте подключение. Если не работает - убедитесь, что файл `hosts` действительно сохранился.
### Обход не работает / перестал работать
> [!IMPORTANT]

View File

@@ -1,5 +1,5 @@
@echo off
set "LOCAL_VERSION=1.9.1"
set "LOCAL_VERSION=1.9.2"
:: External commands
if "%~1"=="status_zapret" (
@@ -61,9 +61,10 @@ echo 6. Switch Check Updates (%CheckUpdatesStatus%)
echo 7. Switch Game Filter (%GameFilterStatus%)
echo 8. Switch ipset (%IPsetStatus%)
echo 9. Update ipset list
echo 10. Run Tests
echo 10. Update hosts file (for discord voice)
echo 11. Run Tests
echo 0. Exit
set /p menu_choice=Enter choice (0-9):
set /p menu_choice=Enter choice (0-11):
if "%menu_choice%"=="1" goto service_install
if "%menu_choice%"=="2" goto service_remove
@@ -74,7 +75,8 @@ if "%menu_choice%"=="6" goto check_updates_switch
if "%menu_choice%"=="7" goto game_switch
if "%menu_choice%"=="8" goto ipset_switch
if "%menu_choice%"=="9" goto ipset_update
if "%menu_choice%"=="10" goto run_tests
if "%menu_choice%"=="10" goto hosts_update
if "%menu_choice%"=="11" goto run_tests
if "%menu_choice%"=="0" exit /b
goto menu
@@ -198,7 +200,11 @@ for %%f in (*.bat) do (
:: Choosing file
set "choice="
set /p "choice=Input file index (number): "
if "!choice!"=="" goto :eof
if "!choice!"=="" (
echo The choice is empty, exiting...
pause
goto menu
)
set "selectedFile=!file%choice%!"
if not defined selectedFile (
@@ -817,15 +823,81 @@ pause
goto menu
:: HOSTS UPDATE =======================
:hosts_update
chcp 437 > nul
cls
set "hostsFile=%SystemRoot%\System32\drivers\etc\hosts"
set "hostsUrl=https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/refs/heads/main/.service/hosts"
set "tempFile=%TEMP%\zapret_hosts.txt"
set "needsUpdate=0"
echo Checking hosts file...
if exist "%SystemRoot%\System32\curl.exe" (
curl -L -s -o "%tempFile%" "%hostsUrl%"
) else (
powershell -Command ^
"$url = '%hostsUrl%';" ^
"$out = '%tempFile%';" ^
"$res = Invoke-WebRequest -Uri $url -TimeoutSec 10 -UseBasicParsing;" ^
"if ($res.StatusCode -eq 200) { $res.Content | Out-File -FilePath $out -Encoding UTF8 } else { exit 1 }"
)
if not exist "%tempFile%" (
call :PrintRed "Failed to download hosts file from repository"
pause
goto menu
)
set "firstLine="
set "lastLine="
for /f "usebackq delims=" %%a in ("%tempFile%") do (
if not defined firstLine (
set "firstLine=%%a"
)
set "lastLine=%%a"
)
findstr /C:"!firstLine!" "%hostsFile%" >nul 2>&1
if !errorlevel! neq 0 (
echo First line from repository not found in hosts file
set "needsUpdate=1"
)
findstr /C:"!lastLine!" "%hostsFile%" >nul 2>&1
if !errorlevel! neq 0 (
echo Last line from repository not found in hosts file
set "needsUpdate=1"
)
if "%needsUpdate%"=="1" (
echo:
call :PrintYellow "Hosts file needs to be updated"
call :PrintYellow "Please manually copy the content from the downloaded file to your hosts file"
start notepad "%tempFile%"
explorer /select,"%hostsFile%"
) else (
call :PrintGreen "Hosts file is up to date"
if exist "%tempFile%" del /f /q "%tempFile%"
)
echo:
pause
goto menu
:: RUN TESTS =============================
:run_tests
chcp 65001 >nul
cls
:: Require PowerShell 2.0+
powershell -NoProfile -Command "if ($PSVersionTable -and $PSVersionTable.PSVersion -and $PSVersionTable.PSVersion.Major -ge 2) { exit 0 } else { exit 1 }" >nul 2>&1
:: Require PowerShell 3.0+
powershell -NoProfile -Command "if ($PSVersionTable -and $PSVersionTable.PSVersion -and $PSVersionTable.PSVersion.Major -ge 3) { exit 0 } else { exit 1 }" >nul 2>&1
if %errorLevel% neq 0 (
echo PowerShell 2.0 or newer is required.
echo PowerShell 3.0 or newer is required.
echo Please upgrade PowerShell and rerun this script.
echo.
pause

View File

@@ -182,7 +182,7 @@ function Invoke-DpiSuite {
if ($text -match '^(?<code>\d{3})\s+(?<size>\d+)$') {
$code = $matches['code']
$sizeBytes = [int64]$matches['size']
} elseif ($text -match 'not supported|does not support') {
} elseif (($exit -eq 35) -or ($text -match "not supported|does not support|protocol\s+'.+'\s+not\s+supported|protocol\s+.+\s+not\s+supported|unsupported protocol|TLS.not supported|Unrecognized option|Unknown option|unsupported option|unsupported feature|schannel|SSL")) {
$code = "UNSUP"
} elseif ($text) {
$code = "ERR"
@@ -246,7 +246,36 @@ function Invoke-DpiSuite {
$results = @()
foreach ($rs in $runspaces) {
$results += $rs.Powershell.EndInvoke($rs.Handle)
# Wait for the runspace to complete with a small grace period beyond curl's timeout
try {
$waitMs = ([int]$TimeoutSeconds + 5) * 1000
$handle = $rs.Handle
if ($handle -and $handle.AsyncWaitHandle) {
$completed = $handle.AsyncWaitHandle.WaitOne($waitMs)
if (-not $completed) {
Write-Host "[WARN] Runspace for target timed out after $waitMs ms; stopping runspace..." -ForegroundColor Yellow
try { $rs.Powershell.Stop() } catch {}
}
}
} catch {
# ignore wait errors and attempt to EndInvoke
}
try {
$results += $rs.Powershell.EndInvoke($rs.Handle)
} catch {
Write-Host "[WARN] EndInvoke failed for a runspace; treating as failure." -ForegroundColor Yellow
$failedLine = [PSCustomObject]@{
TestLabel = 'RUNSPACE'
Code = 'ERR'
SizeBytes = 0
SizeKB = 0
Status = 'FAIL'
Color = 'Red'
Warned = $false
}
$results += [PSCustomObject]@{ TargetId = 'UNKNOWN'; Provider = 'UNKNOWN'; Lines = @($failedLine); Warned = $false }
}
$rs.Powershell.Dispose()
}
$runspacePool.Close()
@@ -355,7 +384,7 @@ $dpiTargets = Build-DpiTargets -CustomUrl $dpiCustomUrl
# Config
$targetDir = $rootDir
if (-not $targetDir) { $targetDir = Split-Path -Parent $MyInvocation.MyCommand.Path }
$batFiles = Get-ChildItem -Path $targetDir -Filter "general*.bat" | Sort-Object Name
$batFiles = Get-ChildItem -Path $targetDir -Filter "*.bat" | Where-Object { $_.Name -notlike "service*" } | Sort-Object Name
$globalResults = @()
@@ -477,8 +506,6 @@ if ($testType -eq 'standard') {
if (-not $maxNameLen -or $maxNameLen -lt 10) { $maxNameLen = 10 }
}
Write-Host "[WARNING] Tests may take several minutes to complete. Please wait..." -ForegroundColor Yellow
# Ensure we have configs to run
if (-not $batFiles -or $batFiles.Count -eq 0) {
Write-Host "[ERROR] No general*.bat files found" -ForegroundColor Red
@@ -549,6 +576,7 @@ try {
# Create flag file to indicate ipset was switched
"" | Out-File -FilePath $ipsetFlagFile -Encoding UTF8
}
Write-Host "[WARNING] Tests may take several minutes to complete. Please wait..." -ForegroundColor Yellow
$configNum = 0
foreach ($file in $batFiles) {
@@ -594,7 +622,7 @@ try {
$curlArgs = $baseArgs + $test.Args
$output = & curl.exe @curlArgs $t.Url 2>&1
$text = ($output | Out-String).Trim()
$unsupported = $text -match "does not support|not supported"
$unsupported = (($LASTEXITCODE -eq 35) -or ($text -match "does not support|not supported|protocol\s+'?.+'?\s+not\s+supported|unsupported protocol|TLS.*not supported|Unrecognized option|Unknown option|unsupported option|unsupported feature|schannel|SSL"))
if ($unsupported) {
$httpPieces += "$($test.Label):UNSUP"
continue
@@ -649,7 +677,26 @@ try {
$targetResults = @()
foreach ($rs in $runspaces) {
$targetResults += $rs.Powershell.EndInvoke($rs.Handle)
try {
$waitMs = ([int]$curlTimeoutSeconds + 5) * 1000
$handle = $rs.Handle
if ($handle -and $handle.AsyncWaitHandle) {
$completed = $handle.AsyncWaitHandle.WaitOne($waitMs)
if (-not $completed) {
Write-Host "[WARN] Runspace for target timed out after $waitMs ms; stopping runspace..." -ForegroundColor Yellow
try { $rs.Powershell.Stop() } catch {}
}
}
} catch {
# ignore
}
try {
$targetResults += $rs.Powershell.EndInvoke($rs.Handle)
} catch {
Write-Host "[WARN] EndInvoke failed for a runspace; treating as failure." -ForegroundColor Yellow
$targetResults += [PSCustomObject]@{ Name = 'UNKNOWN'; HttpTokens = @('HTTP:ERROR'); PingResult = 'Timeout'; IsUrl = $true }
}
$rs.Powershell.Dispose()
}
@@ -752,12 +799,24 @@ try {
# Determine best strategy
$bestConfig = $null
$maxScore = 0
$maxPing = -1
foreach ($config in $analytics.Keys) {
$a = $analytics[$config]
$score = $a.OK
$score -gt $maxScore
$maxScore = $score
$bestConfig = $config
$pingScore = 0
if ($a.ContainsKey('PingOK')) {
$pingScore = $a.PingOK
}
if ($score -gt $maxScore) {
$maxScore = $score
$maxPing = $pingScore
$bestConfig = $config
} elseif ($score -eq $maxScore) {
if ($pingScore -gt $maxPing) {
$maxPing = $pingScore
$bestConfig = $config
}
}
}
Write-Host ""
Write-Host "Best config: $bestConfig" -ForegroundColor Green
@@ -818,7 +877,6 @@ try {
Set-IpsetMode -mode "restore"
}
Remove-Item -Path $ipsetFlagFile -ErrorAction SilentlyContinue
throw # Re-throw the error
} finally {
Stop-Zapret
Restore-WinwsSnapshot -snapshot $originalWinws