Сети

Как исправить 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. Подробные шаги и примеры кода ниже.


Содержание


Краткое описание проблемы и суть решения

В 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:

Почему это важно? Потому что интерфейс опирается на файл состояния (ipset_status.txt) и на функции в service.bat. Если файл не читается/не перезаписывается — визуально всегда будет loaded, а реального переключения не произойдёт.


Быстрый патч — редактирование service.bat (switch ipset)

Если вы хотите исправить быстро и локально (без обновления пакета), сделайте следующее:

  1. Создайте резервную копию:
  • Скопируйте service.bat в service.bat.bak.
  1. Запустите редактор (Блокнот или Notepad++) от имени администратора.
  2. Найдите в service.bat секцию с меткой :SwitchIpSet (или похожим названием).
  3. Замените/вставьте логику чтения/циклирования статуса и записи в ipset_status.txt. Пример кода (batch):
bat
:: --- 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 ---
  1. Сохраните service.bat.

Примечание: точные имена меток (:reload_ipset, :ReloadIpSetReal) могут отличаться — используйте ту функцию перезагрузки, которая уже есть в вашем service.bat. В репозитории есть примеры реализации — см. релизы и обсуждения: https://github.com/Flowseal/zapret-discord-youtube/issues/6859


Пошаговая инструкция (с командами)

  1. Остановите сервис/процесс Zapret:
  • Закройте GUI, затем выполните в cmd от администратора:
  • taskkill /IM winws.exe /F
  • или остановите службу Windows (если установлено как сервис) через services.msc.
  1. Сделайте резервную копию:
  • copy service.bat service.bat.bak
  1. Убедитесь, что файл ipset_status.txt существует:
  • Если нет — создайте файл с содержимым empty
  1. Отредактируйте service.bat как в разделе выше и сохраните.
  2. Запустите service.bat от имени администратора:
  • Правая кнопка — Запуск от имени администратора.
  1. В меню service.bat нажмите 8 (Switch ipset).
  2. Проверьте, изменился ли ipset_status.txt — его содержимое должно стать any, none или empty в соответствии с циклом.
  3. Выполните пункты меню:
  • Update ipset list — загрузка/обновление списка ipset-all.txt
  • Run Diagnostics — проверка ошибок
  1. Перезапустите 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; скачайте актуальную сборку отсюда:

Советы:

  • Скачивайте релиз, соответствующий вашей конфигурации (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 и попросите подсказку; часто в сообществе быстро подскажут, где вставить правку.


Источники


Заключение

Коротко: проблема 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 переключается и список загружается корректно.

Авторы
Проверено модерацией
Модерация