Как исправить Switch ipset (loaded) в Zapret v1.9.1
В Zapret v1.9.1 пункт 8 меню service показывает Switch ipset (loaded) и не меняется. Исправляем баг в service.bat: патч ipset_status.txt, цикл empty/any/none, перезапуск winws.exe. Пошаговая инструкция с кодом и диагностикой.
В ZAPRET v1.9.1 в меню service пункт 8 показывает ‘Switch ipset (loaded)’, но должно быть empty, any или none. При нажатии на 8 ничего не меняется. Как исправить эту проблему и переключить статус ipset?
В Zapret v1.9.1 пункт 8 меню service показывает “Switch ipset (loaded)” из‑за известного бага в service.bat, когда переменная состояния ipset принудительно выставлена в loaded. Исправляется обновлением до патча или правкой service.bat: создайте/проверьте ipset_status.txt, добавьте цикл переключения (empty → any → none), сохраните и запустите service.bat от имени администратора, затем перезапустите winws.exe/сервис и выполните Update ipset list + Run Diagnostics. Подробные шаги и примеры кода ниже.
Содержание
- Краткое описание проблемы и суть решения
- Почему появляется “Switch ipset (loaded)” — причина (zapret ipset)
- Быстрый патч — редактирование service.bat (switch ipset)
- Пошаговая инструкция (с командами)
- Проверка и диагностика ipset в Zapret
- Если не помогает — обновление или откат Zapret
- Частые ошибки и советы по правам и файлам
- Источники
- Заключение
Краткое описание проблемы и суть решения
В v1.9.1 в Zapret пункт меню 8 - Switch ipset может не менять статус и висеть как loaded. Причина — логика в service.bat, которая либо всегда записывает loaded в файл состояния, либо не читает/не записывает ipset_status.txt. Решение — одно из двух: 1) обновить Zapret до версии с исправлением; 2) вручную поправить service.bat, чтобы оно корректно читал/писал ipset_status.txt и вызывало перезагрузку ipset. Ниже — практическая реализация.
Почему в Zapret v1.9.1 показывается ‘Switch ipset (loaded)’ (zapret ipset)
Коротко — это баг в скрипте управления: service.bat не переключает переменную состояния или всегда присваивает loaded. Такое поведение описано в репозитории и обсуждениях проекта; в релиз-заметках указаны исправления для релизов, см. релизную страницу проекта и обсуждения разработчиков. Для справки и понимания контекста можно посмотреть исходный репозиторий Zapret и связанные issue:
- основной репозиторий проекта: https://github.com/Flowseal/zapret-discord-youtube
- аналогичные замечания и обсуждения в issue: https://github.com/Flowseal/zapret-discord-youtube/issues/7146
Почему это важно? Потому что интерфейс опирается на файл состояния (ipset_status.txt) и на функции в service.bat. Если файл не читается/не перезаписывается — визуально всегда будет loaded, а реального переключения не произойдёт.
Быстрый патч — редактирование service.bat (switch ipset)
Если вы хотите исправить быстро и локально (без обновления пакета), сделайте следующее:
- Создайте резервную копию:
- Скопируйте
service.batвservice.bat.bak.
- Запустите редактор (Блокнот или Notepad++) от имени администратора.
- Найдите в
service.batсекцию с меткой:SwitchIpSet(или похожим названием). - Замените/вставьте логику чтения/циклирования статуса и записи в
ipset_status.txt. Пример кода (batch):
:: --- begin patch: переключение ipset ---
:: создать файл статуса, если отсутствует
if not exist ipset_status.txt echo empty>ipset_status.txt
:: прочитать текущее состояние
set /p IPSET_STATUS=<ipset_status.txt
:: цикл состояний: empty -> any -> none -> empty
if /I "%IPSET_STATUS%"=="empty" (
set "IPSET_STATUS=any"
) else if /I "%IPSET_STATUS%"=="any" (
set "IPSET_STATUS=none"
) else (
set "IPSET_STATUS=empty"
)
:: сохранить новое состояние
echo %IPSET_STATUS%>ipset_status.txt
:: вызвать существующую процедуру перезагрузки ipset (если в скрипте есть)
if defined reload_ipset_call (
call :reload_ipset
) else (
rem если в скрипте есть другой способ перезагрузки - вызовите его
call :ReloadIpSetReal
)
:: --- end patch ---
- Сохраните
service.bat.
Примечание: точные имена меток (:reload_ipset, :ReloadIpSetReal) могут отличаться — используйте ту функцию перезагрузки, которая уже есть в вашем service.bat. В репозитории есть примеры реализации — см. релизы и обсуждения: https://github.com/Flowseal/zapret-discord-youtube/issues/6859
Пошаговая инструкция (с командами)
- Остановите сервис/процесс Zapret:
- Закройте GUI, затем выполните в cmd от администратора:
taskkill /IM winws.exe /F- или остановите службу Windows (если установлено как сервис) через
services.msc.
- Сделайте резервную копию:
copy service.bat service.bat.bak
- Убедитесь, что файл
ipset_status.txtсуществует:
- Если нет — создайте файл с содержимым
empty
- Отредактируйте
service.batкак в разделе выше и сохраните. - Запустите
service.batот имени администратора:
- Правая кнопка — Запуск от имени администратора.
- В меню
service.batнажмите8(Switch ipset). - Проверьте, изменился ли
ipset_status.txt— его содержимое должно статьany,noneилиemptyв соответствии с циклом. - Выполните пункты меню:
Update ipset list— загрузка/обновление спискаipset-all.txtRun Diagnostics— проверка ошибок
- Перезапустите
winws.exeили службу и проверьте работу (попробуйте сервисы/игры, которые зависели от режима).
Если вы сомневаетесь в названии функции перезагрузки в вашем service.bat, сначала откройте файл и найдите метки вида :reload или :SwitchIpSet — скорее всего там уже есть логика, которую нужно лишь корректно вызывать.
Проверка и диагностика ipset в Zapret
Как понять, что всё работает:
- Файл
ipset_status.txtменяет содержимое после нажатия 8. Проверяйте его до и после. - В меню
service.batнадпись изменяется наany,noneилиempty. - В логах/диагностике нет ошибок при применении списка ipset.
- Для практической проверки — проверьте подключение к сервисам, которые раньше ломались (игры, Discord, YouTube, Roblox). В отдельных инструкциях для Roblox указано, что режим
anyобязателен для обхода некоторых блокировок — см. https://github.com/Flowseal/zapret-discord-youtube/issues/6859 - Если при обновлении списка остаётся только одна строка, проверьте содержимое
ipset-all.txt— возможно, список пуст или повреждён.
Для дополнительной справки и примеров запуска диагностики смотрите репозиторий: https://github.com/Flowseal/zapret-discord-youtube и обсуждение похожих симптомов: https://github.com/Flowseal/zapret-discord-youtube/issues/3839
Если не помогает — обновление или откат Zapret
Если вы не уверены править скрипты вручную или патч не даёт результата, лучший вариант — обновить пакет до сборки с исправлением. В релиз-нотах указаны исправления для проблем со Switch ipset; скачайте актуальную сборку отсюда:
- Релизы проекта: https://github.com/Flowseal/zapret-discord-youtube/releases
Советы:
- Скачивайте релиз, соответствующий вашей конфигурации (GUI/general/other).
- Перед обновлением сохраните
ipset-all.txt,ipset_status.txtи резервные копииservice.bat. - После обновления повторите шаги проверки (Update ipset list → Run Diagnostics).
Если обновление не помогает — опишите проблему в issue на GitHub (приведите логи и версию), разработчики/сообщество помогут диагностировать: https://github.com/Flowseal/zapret-discord-youtube/issues
Частые ошибки и советы по правам и файлам
- Права доступа: запуск
service.batдолжен быть от администратора — иначе файлipset_status.txtне перезапишется. - Файл занят процессом: если
winws.exeдержит файл — завершите процесс (taskkill /IM winws.exe /F) перед правкой. - Неправильный путь: убедитесь, что
ipset_status.txtлежит в той же папке, где запускаетсяservice.bat. - Формат файла: простой текст, без BOM, одной строки —
empty/any/none. - Резервные копии: всегда сохраняйте
service.bat.bakиipset-all.txt.bakперед правкой или обновлением. - Версии: если у вас специфичная сборка (
general.bat, GUI и т. п.), изменения нужно вносить в тот скрипт, который действительно управляет ipset в вашей сборке.
И ещё один совет: если не уверены в правках — опубликуйте кусок вашего service.bat в issue и попросите подсказку; часто в сообществе быстро подскажут, где вставить правку.
Источники
- Репозиторий проекта Zapret: https://github.com/Flowseal/zapret-discord-youtube
- Релизы и заметки по фиксам: https://github.com/Flowseal/zapret-discord-youtube/releases
- Обсуждение проблемы “Switch ipset remains (loaded)”: https://github.com/Flowseal/zapret-discord-youtube/issues/7146
- Пример исправления и рекомендации для игр (EA, LoL): https://github.com/Flowseal/zapret-discord-youtube/issues/3839
- Настройки и требование
Anyдля Roblox: https://github.com/Flowseal/zapret-discord-youtube/issues/6859
Заключение
Коротко: проблема Switch ipset (loaded) в Zapret v1.9.1 — это баг в service.bat, который мешает корректному переключению статуса ipset. Самый быстрый путь — обновить Zapret до исправленной сборки; альтернативно — вручную поправить service.bat, гарантировать наличие и корректную запись в ipset_status.txt, запустить service.bat от администратора и перезапустить сервис/winws.exe. После изменений обязательно выполните Update ipset list и Run Diagnostics, чтобы убедиться, что zapret ipset переключается и список загружается корректно.