github RixyPow/netzapret v0.5.8
NetZapret 0.5.8

latest releases: v1.2.4, v1.2.3, v1.2.2...
one month ago

Маршруты: список вместо каталога

Двадцать шесть папок превратились в пятьдесят пять сервисов, и каждый
на виду.

В каталоге лежали два разных вида записей под одним типом. У Discord части —
стороны одного сервиса: голос, переписка, запасной путь; они ломаются врозь,
и папка вокруг них осмысленна. А «Мессенджеры» — это Signal и Viber, два
чужих друг другу сервиса, и общего у них ровно то, что мы положили их
на одну полку. Человек ищет Signal, а не «мессенджеры», и лишний щелчок
стоял между ним и его сервисом.

Двенадцать таких полок раскладываются сразу. Папками остались пять, где
части действительно ломаются врозь: Discord, YouTube, Telegram, Roblox,
Steam. Ещё девять сервисов показываются одной строкой — разворачивать
у них нечего, а стрелка обещала содержимое, которого нет.

Заодно выправлен вид: значки в одну линию, одинаковая высота у всех строк,
один шаг между ними, стрелка крупнее и заметнее. Появилась сортировка
по алфавиту: порядок каталога хорош, пока помнишь его наизусть, и плох,
когда ищешь Zoom среди пятидесяти пяти строк.

Видно, чем именно пойдёт часть

Подпись «десинк» не говорила ничего. Она означает «мимо туннеля, решает
пресет», а решить пресет может и «пропустить», и «не знаю такого имени» —
и всё это выглядело одинаково с работающим правилом.

Теперь в строке стоит приём той секции, до которой дойдёт очередь: winws2
отдаёт пакет первому совпавшему профилю и дальше не смотрит.

десинк: hostfakesplit        нашлась секция, чинит этим приёмом
десинк: пресет не чинит      имя не попало ни в одну секцию
десинк: пресет пропускает    секция нашлась, но в ней «не трогать»
десинк: имя — нет в пресете  выбранный рецепт в этом пресете отсутствует

Что открылось сразу: четыре нейросети и полдюжины рабочих сервисов стояли
на десинке, и с ними не делалось ничего.

Название приёма вместо имени секции. Секции пресета названы по тому, что
чинят, и у Speedtest выходило «десинк: rutracker.org» — читалось как ошибка,
хотя это было имя секции, откуда взят рецепт.

Проверка блокировок стала честнее

Восьмидесятый порт спрашивается только когда нужен. Разбор вердикта
смотрит на него ровно в одной ветке — той, где TCP на 443 не поднялся.
Во всех прочих строках колонка показывалась и не значила ничего, а
спрашивался порт всегда: четыре секунды на цель, с повтором восемь, и так
на сотне с лишним имён. В строке при этом стояло «HTTP: RST» рядом
с вердиктом «доступен», и это читалось как противоречие самому себе.

Отказ согласования больше не выдаётся за блокировку. Сторона, не дающая
TLS 1.2, отвечает словами и быстро — это её настройка. Фильтр так
не отвечает: он рвёт соединение либо молчит. Проверено: battle.net,
playstation.com, zoom.com и npmjs.org на 1.3 не отвечают вовсе,
а на 1.2 отдают 301. Такая ячейка теперь «н/д», и имя не идёт в перечень
закрытого.

Причина берётся у той стадии, что решила вердикт. Прежде бралась первая
непустая из пяти, и у имени с убитым рукопожатием в строке оказывался
рассказ про удавшийся TCP — про то, что как раз сработало. Теперь у обрыва
это цифры передачи («поток замер на 26011 Б»), у гео-отказа ответ сайта,
у закрытого маршрута слова TCP.

Маркеры зон вне таблицы. Записи A у scdn.co, playstation.net,
nintendo.net, slack-edge.com и dropboxusercontent.com нет ни у кого:
работают только поддомены. Строка «нет адреса у имени» среди закрытого
сбивала — её начинали чинить. Пропущенные считаются и называются
под таблицей.

Отказ по стране стал жёлтым вместо красного. Это работающая связь:
ответ пришёл, и пришёл от самого сайта.

Окно выбора рецепта отвечает видимо

Пользователь сказал: «проверка не начинается на твич». Она и не должна
была — twitch.tv открывается без десинка, и окно об этом писало подписью
под заголовком, которую не замечают. Снаружи это выглядело как нажатая
кнопка, после которой ничего не произошло.

Ответ переехал в полосу со значком и цветом: зелёная галочка — имя открыто
и рецепт не нужен, жёлтая пауза — движки работают, красный крест —
проверять нечем.

Появилась кнопка остановки. Перебор идёт до сорока секунд, и прервать его
можно было только закрыв окно, то есть потеряв уже полученные ответы.
Теперь они остаются: «Остановлено. Проверено 3 из 8, ответы сохранены».

Три поломки

Автозапуск. Задача в планировщике возвращала код 2, и это был не сбой
запуска, а ответ самой программы: проверка на незнакомый ключ отвергала
всё, что начинается с двух дефисов и не разобрано выше неё, а --tray
разбирается ниже. Программа не знала собственного ключа. Увидеть это можно
было только в планировщике — окно с жалобой в сеансе автозапуска показывать
некому.

Чтение подписок висело. Таймаут был тридцать секунд на подписку,
читаются они по очереди, а прервать чтение было нечем вовсе. Теперь
двенадцать секунд, отмена работает, и в строке виден номер: «Читаю подписку
2 из 3».

«Замерить все» работало через раз. Источник отмены был один на два
действия, и раздел, перечитывая подписки при каждом заходе, отменял этим
замер, начатый секундой раньше.

Пресет: пять новых секций

У Proton, Signal, Viber, archive.org и Bluesky не было своей секции.
Первых четверых забирала себе секция «Мои сайты» вместе со всем содержимым
lists/other.txt и давала им общий рецепт; Bluesky не покрыт был ничем
вообще — к нему рецепт не применялся ни разу.

Мессенджеры и почту с VPN душат по форме потока, а не по списку имён:
TCP встаёт, а полноценное рукопожатие к тому же адресу глохнет насмерть.
Одно поддельное приветствие такое профилирование не обманывает. Поэтому
hostfakesplit — у него есть подтверждённый прецедент на том же классе.

Замер после правки: Signal, Viber и archive.org открылись. Proton
и Bluesky — нет, им нужен другой рецепт.

Раздел маршрутов перестал тормозить

Подпись «чем именно пойдёт часть» спрашивала пресет на каждую из восьмидесяти
частей, и каждый раз перечитывала все его списки. В russia-blacklist.txt
сто семнадцать тысяч имён — он оказывался прочитан восемьдесят раз подряд.
Теперь списки читаются однажды, а поиск идёт по множеству зон: три проверки
вместо ста семнадцати тысяч сравнений.

Значки не пропадают после перезапуска

Сохранялись они и раньше — восемьдесят пять файлов в runtime\icons. Но
чтение при сборке строки смотрело только в память, а она после запуска
пуста: список открывался буквами и наливался значками секунду спустя.
Теперь при промахе памяти читается диск.

Заодно перестали спрашивать значки у подсетей: у 95.101.173.0/24 его нет
и быть не может, а сетевой запрос уходил.

Чего в этом выпуске нет

Сказано прямо, чтобы не искали.

Раздел маршрутов подтормаживает при прокрутке. Список не виртуализируется:
все пятьдесят пять сервисов живут в памяти и перерисовываются целиком.
Лечится перестройкой раздела.

Проверка местами описывает себя, а не сеть. Приветствие TLS у нашей
пробы не такое, как у браузера, и часть вердиктов от этого расходится
с тем, что человек видит: twitch.tv числился закрытым и открывался,
itch.io числился оборванным и работал. Это самое крупное из оставшегося.

Proton, Bluesky, SoundCloud и Amazon не берёт ни один из восьми
рецептов.
У первых двух теперь хотя бы есть своя секция, и видно,
что именно не сработало.

Чем это собрано и как сверить

NetZapret.zip   51687F3868DDFC9D731B89AD7DCDE05FFBFA26F9FF337DC6E92E008AB46B03FF
NetZapret.exe   2C92EFAFC6A74C8A56C245B343C0F5A90E89FDDD1F67762932293F115BC594AC

Пакет SDK .NET 8.0.424, сборка Release, win-x64, self-contained, один файл.

Проверить скачанное:

Get-FileHash NetZapret.zip -Algorithm SHA256

Собрать самому и сравнить:

git checkout v0.5.8
pack.cmd

Совпасть должен NetZapret.exe. Архив — нет: в нём лежат winws2 и sing-box,
собранные не нами, и их версии у вас могут отличаться.

Don't miss a new netzapret release

NewReleases is sending notifications on new releases.