Затрагивает не только видимые строки, но и системные идентификаторы: appId (com.senboost.app), служба Windows (senboost-zapret) и её каталог в %ProgramData%, LaunchDaemon и pf-якорь на macOS (com.senboost.zapret, com.apple/senboost), каталог /run/senboost и таблица nftables на Linux, маркер стратегии в strategy.cfg (--comment=senboost:<id>:<hash>), а также каталог userData, который Electron выводит из имени приложения.
23 lines
1.2 KiB
Bash
Executable File
23 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# Подчищает pf, если daemon.sh (супервизор) умер, не успев выполнить свой cleanup() —
|
|
# например, получил SIGKILL. Без этого правило route-to пережило бы демона, и трафик на
|
|
# заблокированные порты уходил бы в мёртвый utun вместо прохождения как обычно (pf-правило
|
|
# не имеет bypass-семантики, в отличие от очереди NFQUEUE на Linux). Портировано из
|
|
# watchdog.sh форка Flowseal/zapret-mac-discord-youtube (MIT) без изменений логики.
|
|
SUPERVISOR_PID=$1
|
|
ENGINE_PID=$2
|
|
ANCHOR=com.apple/senboost
|
|
TOKEN_FILE=/var/run/senboost-zapret.pf-token
|
|
|
|
while kill -0 "$SUPERVISOR_PID" 2>/dev/null && kill -0 "$ENGINE_PID" 2>/dev/null; do
|
|
sleep 0.2
|
|
done
|
|
|
|
/sbin/pfctl -a "$ANCHOR" -F all >/dev/null 2>&1 || true
|
|
kill "$ENGINE_PID" >/dev/null 2>&1 || true
|
|
if [ -s "$TOKEN_FILE" ]; then
|
|
TOKEN=$(/bin/cat "$TOKEN_FILE" 2>/dev/null || true)
|
|
if [ -n "$TOKEN" ]; then /sbin/pfctl -X "$TOKEN" >/dev/null 2>&1 || true; fi
|
|
/bin/rm -f "$TOKEN_FILE"
|
|
fi
|