/opt/zapret2 # iptables -t raw -L
iptables v1.4.21: can’t initialize iptables table `raw’: Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
/opt/zapret2 #
blockcheck есть смысл запускать? Или ломается только
Summary
for strategies with incoming packets involved (autottl)
Имеет, но могут не работать тесты ipfrag и ломающие nat.
blockcheck распознает отсутствие таблицы raw и отключает тесты ipfrag
К incoming отношения не имеет
Потому что нефиг запускать на всяком неподдерживаемом старье
это не смертельно, но спамить будет
Напоминаю, я не поддерживаю ничего, кроме традиционного linux и openwrt
Уж больно вы меня заинтересовали – спросил у прошки код. Он нашёл ещё больше “багов”, но всё же высказался что код нормальный. Остальное у него там было (в основном) только предложения. Так что у Pro версии процент галлюцинаций поменьше будет.
ну сколько он нагулицинировал только болван скажет либо тот кто хорошо шарит в коде) 30 минут жоско, у меня 12 минут думает, кинул бы болвану баги, то что мой находил 50 на 50 было, так что какую то пользу он всё равно принёс.
xhigh крутой режим, 200 баксов в месяц не хухры мухры)
Использовать для такого умного ИИ GPU кластеры размером со здание и потреблением множества мегаватт - все равно что, изобрести самолет с паровым двигателем =) Тут что-то иное надо принципиально. На иных физических принципах, может быть в какой-то степени аналоговых. Квантовых в идеале. Мы находимся на этапе ЭВМ 60х годов. Сколько еще пройдет времени, прежде чем любой калькулятор сделает их 10кратно ?
Посмотрю глюконацию, конечно
Однажды я спросил чатгпт как перевести код из под libnl на libmnl. Это нетлинк, кто не в курсе.
Он даже прогу сделал пример.
Но она не собиралась. Потому что был написан бред.
Просил создать картинку с помещением, где на столе и полках кувшины и фигурки.
При детальном рассмотрении что там за фигурки прям скажем можно было немного выпасть в осадок
Он не улавливает суть, он смотрит условно говоря на веб страницу, где написано, что здесь на картинке фигурки, и просекает себе в мозгах, что фигурки выглядят так. Закорючки какие-то.
Или математика на доске - куча формул. Вроде внешне похоже, но если посмотреть что это за математика, понимаешь, что медведь бы стал профессором с таким пониманием математики
Ни один проггер не напишет прогу в блокноте, чтобы она тут же собралась и работала.
Он ее компилирует и смотрит где какие баги.
Надо чтобы ИИ хотя бы пытался запустить свой код, чтобы увидеть свой бред и поправиться
это конечно в идеале, но с чего то надо начинать, сейчас тоже есть прогресс и даже в этом году будут новые технлогии внедряться, если интересно почитай про tpu гугла и вера рубин от нвидия, это уже будет в этом году использоваться. Конечно это не квантовые но сам понимаешь рано или поздно будет.
сейчас так и происходит во всяки кодексах, антигравити и тд ну и наверно в xhigh за 200 баксов, просто в целом они всё равно тупят и ошибаются, но условно через год, три этих ошибок будет меньше а может и не будет, а может и не через 3 а быстрее) Ты видимо давно общался и не в платном режиме, сейчас конечно не идеально но прям лучше чем год назад это точно.
в мультимодальность чатгпт хуже чем gemini3 например, но и опять же они это подтянули тоже в декабре.
В общем прогресс пока идёт и не только в наращивании мощности количественно и качественно, но и в самих технологиях обработки данным самих ИИ моделей. В этом месяце обещали новые chatgpt, должен так же выйти гемини3 с новым методом внимания чтоль который в гемини3 флеш использовался, обновиться грок а в ферале дипсик4 и тд, короче много всего)
PS
Спойлер
VR
Spectrum-X Photonics — это революционная сетевая технология компании NVIDIA, которая станет «нервной системой» для новой архитектуры Vera Rubin.
Простыми словами, это переход от использования медных проводов и внешних оптических модулей к использованию света (фотоники) прямо внутри чипа коммутатора.
Вот подробный разбор того, что это такое и как достигаются указанные вами цифры:
Что такое Spectrum-X Photonics?
Традиционно в дата-центрах данные выходят из чипа в виде электричества, проходят по плате до порта, а затем преобразуются в свет специальным модулем (трансивером), в который втыкается кабель.
Spectrum-X Photonics использует технологию Co-Packaged Optics (CPO). Это означает, что оптические соединения встроены прямо в корпус чипа (коммутатора).
Суть: Лазеры и фотонные детекторы находятся в микрометрах от кремниевого чипа.
Результат: Не нужно тратить энергию на передачу электрического сигнала до края платы. Свет уходит сразу от чипа.
Ну да. В целом на ndm с blockcheck’ом туго: по событиям (connect/disconnect/dhcp lease…) чистится netfilter. Для работы самого nfqws2 некритично - можно сделать скрипт на restart-fw на хук netfilter, а вот как пересоздать цепочки работы blockcheck’а…..
Решил тоже приколоться и получить фикбек – правда я решил попробовать “самую умную модели в мире” по крайней мере так OpenII говорит – и в AGI ARC 2 набрала больше всего баллов с различными сложными логическими задачками из разных сфер + пазлы
Скормил только первые 10 файлов основного ядра С кода, lua кину позже. Попросил быть ИИ максимально строгим. Заодно попросил проверить безопасность кода с WinDivert – можно ли как-то обойти через него и получить повышение прав в среде Windows или нет.
Не всё могу разобрать из сие текста, но первое замечание мне кажется вполне корректным.
Осторожно полотна огромного ии-сплопного текста!
Посмотрел эти первые файлы (checksum.c, conntrack.c, darkmagic.c, desync.c, gzip.c, helpers.c, hostlist.c, lua.c, nfqws.c, pools.c). Код не меняю — ниже именно разбор логики/обработки и места, где реально может “стрельнуть” на Linux / Windows (WinDivert / winws2).
1) Что выглядит реально критичным (может сломать сборку/запуск)
1.1 darkmagic.c: win_dark_deinit() объявлен как bool, но не возвращает значение
Функция:
bool win_dark_deinit(void)
{
...
}
заканчивается без return. Это undefined behavior (и почти гарантированный warning control reaches end of non-void function).
Если у тебя сборка с -Werror, это станет фатальной ошибкой компиляции. Даже если warning не фатален — возвращаемое значение мусорное (правда, сейчас вызовы, похоже, его не используют).
Симптом: “на одних компиляторах собралось, на других нет” / “с -Werror не собирается”.
1.2 darkmagic.c: LowMandatoryLevel() ставит TokenIntegrityLevel, но Label.Attributes = 0
По типовым примерам для TokenIntegrityLevel атрибуты у integrity SID обычно выставляют как минимум SE_GROUP_INTEGRITY и часто SE_GROUP_INTEGRITY_ENABLED. (Stack Overflow)
Если SetTokenInformation() на какой-то системе/сборке начнёт требовать корректные атрибуты (или integrity SID без атрибутов будет интерпретироваться не так) — песочница может не примениться или функция может вернуть ошибку → win_sandbox() вернёт false → winws2 завершится.
Симптом:winws2 падает/выходит на этапе sandbox (после открытия WinDivert), либо тихо работает не в том integrity level.
Отдельно: ты параллельно используешь Mandatory Integrity Control (MIC) и метки SACL на объекте WinDivert (SetMandatoryLabelFile). В MIC логика “low не может писать в medium” и маски вида SYSTEM_MANDATORY_LABEL_NO_WRITE_UP — это как раз то, на чём держится идея “дать low доступ к нужному объекту”. (Microsoft Learn)
Поэтому любые нюансы вокруг установки integrity level — реально важны.
1.3 darkmagic.c: nlm_list() всегда вызывает CoUninitialize(), даже если CoInitialize() неуспешен
В nlm_list():
если CoInitialize(NULL) не прошёл → bRet=false, но CoUninitialize() вызывается всё равно.
Это риск “разбалансировки” COM init/uninit на потоке. Иногда это может пройти “мимо”, иногда — дать странные побочки (особенно если поток уже был COM-initialized кем-то ещё, или если ошибка CoInitialize была реальной).
Симптом: нестабильность/глюки только в режиме --nlm-list, или в окружениях где COM init может фейлиться.
1.4 darkmagic.c: возможный краш в логировании ошибки WinDivert при FormatMessageA == fail
В windivert_init_filter():
LPSTR errormessage = NULL;
потом FormatMessageA(..., (LPSTR)&errormessage, ...)
если FormatMessageA не смог (бывает на некоторых кодах), errormessage останется NULL,
а дальше в DLOG_ERR("... %s", errormessage);
В некоторых CRT %s с NULL печатает (null), а в некоторых/настройках — может упасть. Это редкое, но неприятное.
Симптом: падение именно в момент неудачного WinDivertOpen/компиляции фильтра, вместо нормального сообщения.
2) Потенциальные проблемы/краевые случаи (скорее “странности”, чем краш)
2.1 helpers.c: rtrim() — UB на пустой строке
for (char *p = s + strlen(s) - 1; p >= s && (...); p--)
Если s=="", то strlen(s)-1 даёт уход “до начала” → undefined behavior (указатель s-1).
В этих присланных файлах rtrim() не вызывается, но если он используется дальше (в конфиге/парсинге) — может внезапно стрельнуть на пустых строках.
Симптом: редкий краш при обработке пустых строк/параметров, зависящий от компилятора/опций.
Но теоретически максимально длинный FQDN + ^ + \r\n может выйти за 255, и строка разобьётся на 2 fgets(). Тогда в пул попадёт “обрубок”/мусор.
Симптом: “почему-то не матчится один редкий хост” или “в списке появился обрезанный кусок”.
2.3 hostlist.c: tolower(*s) без (unsigned char)
В addpool():
*s = tolower(*s);
Если в строке окажутся байты >127 и char знаковый — это UB. Для доменов обычно ASCII, но если кто-то положит мусор/UTF-8 — может быть не очень.
2.4 gzip.c: z_readfile() не проверяет, что поток завершился Z_STREAM_END
Сейчас функция возвращает Z_OK, даже если gzip оборван (EOF) и inflate так и не увидел Z_STREAM_END.
Это не “краш”, но тихий приём битого gzip как валидного → hostlist/lua-init может прочитаться частично без явной ошибки.
Симптом: “иногда список/скрипт как будто неполный”, особенно если файл качается/обновляется и читается в момент записи.
2.5 lua.c: если найден только file.gz, но он “не gzip” — будет попытка luaL_dofile() по имени без .gz
lua_file_open_test() умеет подставить .gz, но luaL_doZfile() в ветке !b_gzip вызывает luaL_dofile(L, filename) (оригинальное имя), а не fname.
Срабатывает только в странном сценарии “есть <name>.gz, но это не gzip”.
2.6 nfqws.c: exithelp() — риск переполнения all_payloads/all_protos при росте списков
Ты делаешь:
if (pl) strncat(all_payloads, " ", sizeof(all_payloads)-1-1);
Третий аргумент тут константный, не “остаток буфера”. Сейчас строки короткие и список небольшой — вероятно безопасно. Но если список payload’ов/имён вырастет, --help может теоретически выйти за буфер.
3) По логике “файлов” и обработке конкретики (что хорошо и где тонко)
3.1 Hostlist (hostlist.c + pools.c + gzip.c)
Что обработано нормально:
Поддержка gzip:
is_gzip(FILE*) по сигнатуре 1F 8B
плюс fallback на “если файла нет — пробуем .gz”
Загрузка в память z_readfile() и разбор AppendHostListFromBuffer() корректно режет по \n, тримит \r\n, игнорирует комментарии #, режет по пробелам/табам.
Логика strict match ^ сделана осмысленно (строгий матч только на “полном хосте”, без доменного подъёма).
Reload по подписи файла (size + mtime) — разумно.
Тонкие места я выше отметил (256-буфер, битый gzip как “ОК”).
3.2 Lua init scripts (lua.c + gzip.c)
Есть проверка доступности файлов lua_file_open_test() и тест после droproot на Linux.
@file и plain-string скрипты поддержаны.
gzip поддержан так же, как hostlist (по сигнатуре и по .gz).
Тонкость: битый gzip и кейс с “.gz но не gzip”.
3.3 WinDivert / winws2 (nfqws.c + darkmagic.c)
Хорошие моменты:
windivert_init_filter() защищён mutex’ом от race при старте драйвера (это реально полезно).
I/O сделан через overlapped + WaitForMultipleObjects + отдельный quit event.
logical_net_filter_match_rate_limited() ограничивает дорогое WLAN/NLM до 1 раза/сек.
win_sandbox() идемпотентен (флаг b_sandbox_set), то есть при пропадании/появлении сети ты не пытаешься “перепесочить” процесс снова — это правильно.
Что важно проверить/держать в голове:
Вся “устойчивость” WinDivert после sandbox держится на MIC/Integrity и метках на объекте WinDivert. (Microsoft Learn)
Поэтому пункт про LowMandatoryLevel() (атрибуты) я считаю самым рискованным именно “по WinDivert”.
4) Самый короткий список “возможных стопперов” для WinDivert/Windows
Если нужно прям чеклистом:
win_dark_deinit() без return → может стопорить сборку с -Werror.
LowMandatoryLevel() с Label.Attributes=0 → потенциально может ломать sandbox/доступы (особенно в сочетании с MIC). (Stack Overflow)
nlm_list() unconditional CoUninitialize() → риск COM-глюков в --nlm-list.
FormatMessageA → %s с NULL → редкий, но возможный краш на обработке ошибки WinDivert.
Скидывай следующие файлы — особенно интересно будет посмотреть связки: где именно вызывается rtrim(), как устроены DLOG_*, как живёт params.L относительно ConntrackPoolDestroy, и где формируется/применяется params.windivert_filter (чтобы понять, могут ли быть случаи переполнения/усечения фильтра и что тогда будет).
Второй ИИ слоп
Я просмотрел все загруженные сейчас файлы (C: checksum.c, conntrack.c, darkmagic.c, desync.c, gzip.c, helpers.c, hostlist.c, lua.c, nfqws.c, pools.c, protocol.c, sec.c, win.c + Lua: zapret-*.lua). Ниже — как у вас реально проходит обработка пакетов и что выглядит как баги/рискованные места (без попыток “исправлять код”, только фиксация проблем).
Как пакет проходит по проекту (чтобы понимать “всё ли обрабатывается”)
Захват
Linux (NFQUEUE):nfqws.c:nfq_cb() получает payload, вызывает processPacketData(...), затем выставляет вердикт nfq_set_verdict2().
Windows (WinDivert):nfqws.c:win_main() делает windivert_recv_filter() → processPacketData(...) → если VERDICT_PASS — обязательно реинжект через windivert_send().
TCP/UDP: достаёт payload/len и указатели на заголовки.
Всё остальное (не TCP/UDP) остаётся “неинтересным” — далее обычно PASS.
Conntrack / reassembly
conntrack.c: хранит состояние потока, в т.ч. накапливает куски TCP payload для распознавания L7 (ClientHello, HTTP и т.п.) — но только если сегменты приходят без дырок (есть строгая логика про gap/out-of-order).
L7 распознавание
protocol.c: детекторы и парсеры (HTTP/1, TLS ClientHello/ServerHello, QUIC Initial + попытка расшифровать Initial, WireGuard, STUN, DNS, XMPP, MTProto и т.п.).
“Desync” логика / отправка фейков
desync.c: выбирает стратегию, формирует фейки/фрагменты/сплиты, вызывает rawsend()/windivert_send() и т.д.
checksum.c: пересчёт TCP/UDP чеков после модификаций.
Критичные/высокорисковые проблемы
1) Windows: LowMandatoryLevel() очень похоже сломает sandbox (и тогда winws2.exe просто не стартанёт)
Файл:darkmagic.c Место:LowMandatoryLevel() строки ~615–636 (у вас это SetTokenInformation(...TokenIntegrityLevel...)).
Проблема в двух моментах:
label_low.Label.Attributes = 0; — для TokenIntegrityLevel обычно ожидаются флаги integrity-группы (иначе SetTokenInformation может вернуть ERROR_INVALID_PARAMETER).
В SetTokenInformation передаётся TokenInformationLength = sizeof(label_low), т.е. без учёта размера SID. На практике многие примеры/доки для TokenIntegrityLevel требуют длину “структура + SID”, иначе часто возвращается ошибка.
Так как win_sandbox() жёстко проверяет LowMandatoryLevel() и при ошибке выходит, это реально может дать “не работает на Windows” на части систем.
2) Windows: win_dark_deinit() объявлен как bool, но не возвращает значение (UB)
Функция заканчивается без return. Это undefined behavior по C-стандарту (даже если вызывающий код игнорирует значение). Обычно это вылезает как warning, но UB остаётся UB.
3) Windows: возможный крэш при логировании ошибки WinDivert (NULL в %s)
ifin && ifin выглядит как опечатка (обычно смысл — проверить не пустая ли строка, т.е. ifin && *ifin). Сейчас это фактически сводится к bReverse = !*ifout (потому что ifin почти всегда не-NULL).
Почему это важно:
В режиме --ctrack-disable вы частично угадываете направление по интерфейсам.
Если оба интерфейса пустые/не заполнены (или оба заполнены), направление может определяться неверно, а значит:
неверно выбирается “клиент/сервер” сторона,
могут не примениться нужные desync-правила/позиции.
6) Windows: snprintf() для mutex-name — несовпадение количества %u и аргументов
Файл:nfqws.c Место:win_main() строка ~2643.
Формат содержит 10%u, а вы передаёте 12 аргументов (wf_ipv4, wf_ipv6 лишние и не попадают в строку). Это не краш, но последствия:
mutex-name не различает некоторые варианты конфигурации,
можно получить ложное “уже запущено” при реально разных настройках.
Средний риск / спорные места (могут проявиться в специфичных условиях)
A) Windows/WinDivert: фиксированный буфер 16384 байт
Если WinDivert отдаст пакет больше вашего буфера, WinDivert вернёт ERROR_INSUFFICIENT_BUFFER — “captured packet is larger than the buffer”; документация также указывает, что при этом пакет будет усечён и операция завершится ошибкой. (GitHub)
У вас это мапится в errno=ENOBUFS и вы просто continue.
Почему это риск:
В divert-режиме (не sniff) “не обработанный/не реинжекченный” пакет может фактически превратиться в drop/столл (точное поведение зависит от WinDivert, но факт ошибки и усечения описан в доке). (GitHub)
Реально такие пакеты чаще бывают на loopback/виртуалках/туннелях/джамбо, но если пользователь включает loopback или ловит нестандартный MTU — может проявиться.
B) tolower()/isspace() на char без приведения к unsigned char (UB на не-ASCII байтах)
Файлы/места:
hostlist.c:21
protocol.c:335, protocol.c:642
helpers.c:30, и т.п.
Если в hostlist попадут байты с установленным старшим битом (не ASCII), либо если кто-то шлёт “грязный” Host/SNI, то tolower()/isspace() на отрицательных char — undefined behavior. В реальности чаще всего “просто неверная обработка”, но формально может быть и краш на некоторых libc.
C) Возможный будущий overflow в exithelp() (если списки станут длиннее)
Файл:nfqws.c Место:exithelp() строки ~1328–1355.
Вы используете strncat(all_payloads, " ", sizeof(all_payloads)-1-1) с константным n, не остатком места. Сейчас список маленький, буфер 1024, и это не проявляется. Но как “бомба на будущее” — да, если список протоколов/пейлоадов расширится, можно уехать за границы.
По обработке пакетов: что точно “не покрыто” или может не сработать
Это не обязательно баги, но важные ограничения, если вопрос “всё ли конкретно обрабатывается”:
IP-фрагментация (IPv4/IPv6):
Вы корректно распознаёте IPv4/IPv6 заголовки и (для IPv6) умеете пропускать extension headers, но не делаете полноценную реассембли IP-фрагментов. Если полезная нагрузка (TLS/HTTP) попала не в первый фрагмент или разбита так, что L7-сигнатуры не видны — desync/распознавание не отработает (будет PASS).
TCP reassembly строгий (conntrack.c:ReasmFeed)
При gap/out-of-order вы часто “фейлите” reasm (return false), чтобы не собирать мусор. Это разумно, но означает:
при нестандартной доставке, потере/перестановке, не попадёте в нужную сигнатуру → часть стратегий не применится.
Windows фильтр по умолчанию не ловит ACK-only
Ваш WinDivert filter (см. wf_make_filter) ориентирован на tcp.PayloadLength > 0 + отдельные “важные” флаги (SYN/FIN/RST и т.п.). Это ускоряет, но:
если какая-то стратегия/логика полагается на голые ACK/WindowUpdate и т.д., то в Windows-режиме эти пакеты могут вообще не попадать в обработку.
Lua-часть (кратко)
Lua-скрипты (zapret-*.lua) в основном описывают профили/планы и не выглядят как “место падения” сами по себе (без контекста C-API). Критичных синтаксических косяков “на глаз” не увидел.
Итог: самое важное
Если цель — “чтобы winws2.exe точно не падал/не выходил на Windows”, то самые опасные места сейчас:
darkmagic.c:LowMandatoryLevel() (очень вероятная причина, почему sandbox может не примениться и всё завершится).
darkmagic.c:win_dark_deinit() без return (UB).
darkmagic.c:windivert_init_filter() — %s с потенциальным NULL.
protocol.c:l7_payload_str_list() — потенциальный overflow по буферу.
desync.c — ifin && ifin (на --ctrack-disable может давать неправильное направление).
Если скинешь оставшиеся файлы проекта (особенно заголовки *.h, где константы типа RECONSTRUCT_MAX_SIZE, структуры и прототипы), я так же пройду их и проверю связность “как это реально работает вместе” и нет ли ещё скрытых мест, которые сейчас не видны из .c/.lua.
ipcache это просто источник информации о домене
откуда инфа пришла не суть важно
дальше она идет на стандартный чекер хостлиста, который матчит поддомены
Чушь это IMHO. Он начитался источник, который сам не прав.
Структура SID_AND_ATTRIBUTES применяется во многих контекстах, и смысл attributes зависит от применения. То, что написано на стаковерфлов, относится к TOKEN_GROUPS, а у меня TOKEN_MANDATORY_LABEL. Вещи как бы совсем разные
Впрочем, хромиум делает все же. Может и правда надо
label.Label.Attributes = SE_GROUP_INTEGRITY;
Анализ почему я ставлю лов мандатори на девайс windivert у меня в whatsnew. Это компромисс, и секурити импликейшинс я разобрал. Максимум кто получит возможность рулить виндиверт - это такие же сандбокснутые до low процессы, имеющие в токене активную группу администраторов. Что само по себе немного странно. В сандбоксах обычно ее удаляют. Но я не могу, потому что документированное API не позволяет это сделать без запуска дочернего процесса, и тогда мне придется править DACL еще и на windivert девайсе, что еще больше влияет на секурити. Конечно, я мог бы использовать service specific ssid, но это только для службы работает. Для обычного консольного окна из-под администратора есть только LOGON_SSID, который общий для всех процессов сеанса.
Так делаю только если применяется фильтр по SSID или NLM, потому что мне надо в этом случае стопать и стартать каптуру, я не могу это делать без прав. Нет в виндиверте команды паузы каптуры без закрытия хандла. А если я его закрываю, мне надо его открывать заново, что напарывается на отсутствие прав
Такой вариант рассматривался, но он не без недостатков: переводить wan, через который сидишь, на статику чревато - можно потом ехать до железки. К тому же есть ещё Wi-Fi пользователи, которые за часы работы стандартных проверок blockcheck могут не сидеть на месте.