zapret2-mcp 0.7.2 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.7.4](https://github.com/rcd27/zapret2-mcp/compare/v0.7.3...v0.7.4) (2026-03-30)
4
+
5
+
6
+ ### Features
7
+
8
+ * **knowledge:** fallback до первоисточников, чтобы агент не гуглил лишнее ([e25c950](https://github.com/rcd27/zapret2-mcp/commit/e25c950cd90b81762484acfbda620844f4f03f16))
9
+ * **knowledge:** обогащение статей стратегиями из community ([6e737f6](https://github.com/rcd27/zapret2-mcp/commit/6e737f65d831173b6476df3f231c5491295ed619))
10
+ * **knowledge:** проблемы с ютубом и особенности zapret2 на десктопе ([5cd3110](https://github.com/rcd27/zapret2-mcp/commit/5cd3110aab0975c6c60be5135f3a93487584ad28))
11
+ * **knowledge:** цикл выжимок из статей на obsidian ([ea072e2](https://github.com/rcd27/zapret2-mcp/commit/ea072e222b478d04f44d0f6b98fd552b06a25d41))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * **contract:** явное указание языка ([1b4ca5b](https://github.com/rcd27/zapret2-mcp/commit/1b4ca5b62f2f3b69390db080e440a854cb4aa840)), closes [#9](https://github.com/rcd27/zapret2-mcp/issues/9)
17
+
18
+ ## [0.7.3](https://github.com/rcd27/zapret2-mcp/compare/v0.7.2...v0.7.3) (2026-03-28)
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * **readme:** актуальное состояние базы знаний в readme ([c91441c](https://github.com/rcd27/zapret2-mcp/commit/c91441ce8ef223bbcfe15619a01ba5f2fa7066ad))
24
+
3
25
  ## [0.7.2](https://github.com/rcd27/zapret2-mcp/compare/v0.7.1...v0.7.2) (2026-03-28)
4
26
 
5
27
 
package/README.md CHANGED
@@ -3,24 +3,25 @@
3
3
  [![CI](https://github.com/rcd27/zapret2-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/rcd27/zapret2-mcp/actions/workflows/ci.yml)
4
4
  [![npm](https://img.shields.io/npm/v/zapret2-mcp)](https://www.npmjs.com/package/zapret2-mcp)
5
5
  [![downloads](https://img.shields.io/npm/dm/zapret2-mcp)](https://www.npmjs.com/package/zapret2-mcp)
6
- [![Knowledge Base](https://img.shields.io/badge/knowledge_base-32_articles-green)](./knowledge/)
6
+ [![Knowledge Base](https://img.shields.io/badge/knowledge_base-45_articles-green)](./knowledge/)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
8
8
 
9
9
  База знаний по [zapret2](https://github.com/bol-van/zapret2) (DPI bypass) и [blockcheckw](https://github.com/rcd27/blockcheckw) (сканер стратегий). Работает как [MCP-сервер](https://modelcontextprotocol.io/) для LLM-агентов и как обычная документация.
10
10
 
11
- > **Можно использовать без агентов.** [`knowledge/`](./knowledge/) — 32 статьи на русском языке. Открывайте и читайте как обычную документацию, без установки чего-либо.
11
+ > **Можно использовать без агентов.** [`knowledge/`](./knowledge/) — 45 статей на русском языке. Открывайте и читайте как обычную документацию, без установки чего-либо.
12
12
 
13
13
  ## Что внутри
14
14
 
15
15
  | Раздел | Статей | Темы |
16
16
  |--------|--------|------|
17
- | [strategies/](./knowledge/strategies/) | 9 | TCP segmentation, fake packets, Lua scripting, QUIC, circular, Discord, Telegram, orchestration |
17
+ | [strategies/](./knowledge/strategies/) | 10 | TCP segmentation, fake packets, Lua scripting, QUIC, circular, Discord, Telegram, orchestration, community production strategies |
18
18
  | [config/](./knowledge/config/) | 9 | nfqws2 CLI, zapret2 config, desync profiles, hostlists/ipsets, auto-hostlist, security hardening, UCI, blobs, миграция v1 → v2 |
19
- | [troubleshooting/](./knowledge/troubleshooting/) | 5 | Smart TV + YouTube, QUIC, IPv6, FLOWOFFLOAD, конфликты с Podkop |
20
- | [tspu/](./knowledge/tspu/) | 4 | Архитектура ТСПУ, DPI engine, методы блокировки, двухстадийная система |
19
+ | [troubleshooting/](./knowledge/troubleshooting/) | 6 | Smart TV + YouTube, YouTube видео не грузится (googlevideo CDN), QUIC, IPv6, FLOWOFFLOAD, конфликты с Podkop |
20
+ | [tspu/](./knowledge/tspu/) | 6 | Архитектура ТСПУ, DPI engine, методы блокировки, двухстадийная система, ночные реконфигурации, юридические риски |
21
21
  | [workflows/](./knowledge/workflows/) | 2 | Установка, поиск стратегии |
22
22
  | [blockcheckw/](./knowledge/blockcheckw/) | 2 | Overview, команды |
23
- | [platforms/](./knowledge/platforms/) | 1 | Linux, OpenWrt, Windows, FreeBSD, OpenBSD, Android |
23
+ | [platforms/](./knowledge/platforms/) | 2 | Linux, OpenWrt, Windows, FreeBSD, OpenBSD, Android, десктопный Linux + nftables |
24
+ | [obsidian-gui/](./knowledge/obsidian-gui/) | 8 | lua-desync справочник, payload типы, out-range/in-range, блобы, WinDivert фильтры, порядок аргументов, MTProto, основные флаги |
24
25
 
25
26
  ## Подключение к LLM-агенту
26
27
 
@@ -69,6 +70,12 @@ npm start
69
70
  |------|----------|
70
71
  | `query-zapret-knowledge(topic, tokens?)` | Keyword-поиск по базе знаний с ранжированием |
71
72
 
73
+ ### Resources
74
+
75
+ | URI | Описание |
76
+ |-----|----------|
77
+ | `zapret2://knowledge/{path}` | Прямой доступ к статьям базы знаний по пути (listResources для списка всех) |
78
+
72
79
  ### Prompts
73
80
 
74
81
  | Prompt | Описание |
@@ -95,6 +102,8 @@ npm start
95
102
  - [zapret2](https://github.com/bol-van/zapret2) — DPI bypass от bol-van
96
103
  - [blockcheckw](https://github.com/rcd27/blockcheckw) — быстрый сканер стратегий
97
104
  - [tspu-docs](https://github.com/DanielLavrushin/tspu-docs) — документация ТСПУ
105
+ - Academic: [IMC 2022](https://dl.acm.org/doi/10.1145/3517745.3561461), [IMC 2021](https://dl.acm.org/doi/10.1145/3487552.3487858), [NDSS 2020](https://www.ndss-symposium.org/ndss-paper/decentralized-control-a-case-study-of-russia/), [USENIX Security 2023](https://www.usenix.org/conference/usenixsecurity23/presentation/ramesh-network-responses) — рецензированные исследования архитектуры и поведения ТСПУ
106
+ - [Zapret GUI Docs](https://publish.obsidian.md/zapret) — документация сообщества (импорт через `npm run import:obsidian`)
98
107
  - Community — обезличенные знания из открытых обсуждений
99
108
 
100
109
  ## Лицензия
package/build/index.js CHANGED
@@ -6,6 +6,7 @@ import { resolve, dirname } from "path";
6
6
  import { fileURLToPath } from "url";
7
7
  import { KnowledgeIndex } from "./indexer.js";
8
8
  import { registerPrompts } from "./prompts.js";
9
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
9
10
  const __dirname = dirname(fileURLToPath(import.meta.url));
10
11
  const knowledgeDir = resolve(__dirname, "..", "knowledge");
11
12
  const index = new KnowledgeIndex(knowledgeDir);
@@ -23,14 +24,20 @@ It provides contextual documentation and expert knowledge about:
23
24
  - Troubleshooting common issues
24
25
 
25
26
  Use the query-zapret-knowledge tool to search the knowledge base.
27
+ IMPORTANT: The entire knowledge base is written in Russian. Always query in Russian for accurate results (e.g. 'стратегия split2' instead of 'split2 strategy').
26
28
  Use getPrompt for guided workflows: setup-zapret, find-bypass-strategy, troubleshoot, strategy-knowledge.
27
29
 
28
- This server does NOT execute commands — it provides knowledge and guidance. The consuming agent executes commands directly.`,
30
+ This server does NOT execute commands — it provides knowledge and guidance. The consuming agent executes commands directly.
31
+
32
+ FALLBACK: If query-zapret-knowledge returns no results or insufficient information, check these primary sources directly (via web fetch):
33
+ 1. DeepWiki (most complete, generated from source code): https://deepwiki.com/bol-van/zapret2
34
+ 2. Official docs: https://github.com/bol-van/zapret2/blob/master/docs/manual.md
35
+ 3. Community docs (Obsidian Publish): https://publish.obsidian.md/zapret — raw markdown available at https://publish-01.obsidian.md/access/18b1b883e5b94cb062854c94fb182bb4/{path}.md (e.g. Zapret/Zapret2%20-%20lua-desync.md)`,
29
36
  });
30
- server.tool("query-zapret-knowledge", "Search zapret2 and blockcheckw knowledge base by topic. Returns relevant documentation, strategy guides, configuration references, and troubleshooting information.", {
31
- topic: z.string().describe("What to search for (e.g. 'split2 strategy', 'blockcheckw scan', 'troubleshooting dns', 'config nfqws2_opt')"),
37
+ server.tool("query-zapret-knowledge", "Search zapret2 and blockcheckw knowledge base by topic. Returns relevant documentation, strategy guides, configuration references, and troubleshooting information. IMPORTANT: The entire knowledge base is in Russian. Always send queries in Russian for best results.", {
38
+ topic: z.string().describe("What to search for — MUST be in Russian (e.g. 'стратегия split2', 'сканирование blockcheckw', 'диагностика dns', 'конфигурация nfqws2_opt')"),
32
39
  tokens: z.number().optional().describe("Maximum approximate token count for the response (default: 4000). Use 0 for unlimited."),
33
- context: z.string().optional().describe("What you already know or checked (e.g. 'curl OK on router, QUIC disabled, flow_offloading_hw=1'). Helps narrow results by deprioritizing already-covered topics."),
40
+ context: z.string().optional().describe("What you already know or checked, in Russian (e.g. 'curl работает на роутере, QUIC отключен, flow_offloading_hw=1'). Helps narrow results by deprioritizing already-covered topics."),
34
41
  }, async (args) => {
35
42
  const tokenLimit = args.tokens === 0 ? undefined : (args.tokens ?? 4000);
36
43
  const results = index.query(args.topic, tokenLimit, args.context);
@@ -39,7 +46,7 @@ server.tool("query-zapret-knowledge", "Search zapret2 and blockcheckw knowledge
39
46
  content: [
40
47
  {
41
48
  type: "text",
42
- text: `No results found for "${args.topic}". Try broader keywords like: strategies, config, blockcheckw, troubleshooting, setup, platforms.`,
49
+ text: `No results found for "${args.topic}". The knowledge base is in Russian — try querying in Russian. Broader keywords to try: стратегии, конфигурация, blockcheckw, диагностика, установка, платформы.\n\nFallback: check primary sources directly via web fetch:\n1. https://deepwiki.com/bol-van/zapret2 (most complete)\n2. https://github.com/bol-van/zapret2/blob/master/docs/manual.md\n3. https://publish-01.obsidian.md/access/18b1b883e5b94cb062854c94fb182bb4/Zapret/home.md (community docs, raw markdown)`,
43
50
  },
44
51
  ],
45
52
  };
@@ -63,6 +70,32 @@ server.tool("query-zapret-knowledge", "Search zapret2 and blockcheckw knowledge
63
70
  };
64
71
  });
65
72
  registerPrompts(server);
73
+ // MCP Resources: expose knowledge articles for browsing
74
+ server.resource("knowledge-article", new ResourceTemplate("zapret2://knowledge/{+path}", {
75
+ list: async () => ({
76
+ resources: index.all().map((entry) => ({
77
+ uri: `zapret2://knowledge/${entry.path}`,
78
+ name: entry.title,
79
+ description: `Tags: ${entry.tags.join(", ")}`,
80
+ mimeType: "text/markdown",
81
+ })),
82
+ }),
83
+ }), { description: "Knowledge base article", mimeType: "text/markdown" }, async (uri, variables) => {
84
+ const path = variables.path;
85
+ const entry = index.all().find((e) => e.path === path);
86
+ if (!entry) {
87
+ throw new Error(`Article not found: ${path}`);
88
+ }
89
+ return {
90
+ contents: [
91
+ {
92
+ uri: uri.href,
93
+ mimeType: "text/markdown",
94
+ text: `# ${entry.title}\n\n${entry.content}`,
95
+ },
96
+ ],
97
+ };
98
+ });
66
99
  async function main() {
67
100
  const transport = new StdioServerTransport();
68
101
  await server.connect(transport);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAE3D,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;AAE/C,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;IACE,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;;;;;;;;;;;;4HAY0G;CACzH,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,qKAAqK,EACrK;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6GAA6G,CAAC;IACzI,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wFAAwF,CAAC;IAChI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kKAAkK,CAAC;CAC5M,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAElE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,yBAAyB,IAAI,CAAC,KAAK,mGAAmG;iBAC7I;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACrC,MAAM,WAAW,GAAG;YAClB,KAAK,CAAC,cAAc,IAAI,YAAY,KAAK,CAAC,cAAc,EAAE;YAC1D,KAAK,CAAC,kBAAkB,IAAI,gBAAgB,KAAK,CAAC,kBAAkB,EAAE;SACvE;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,MAAM,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,eAAe,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;aACnC;SACF;KACF,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,yCAAyC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,6BAA6B,CAAC,CAAC;AAC1G,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ ---
2
+ title: Последовательность аргументов в zapret2
3
+ zapret2-version: v0.9.4.5
4
+ tags: аргументы, порядок, payload, lua-desync, hostlist, профиль, filter
5
+ created: 2026-03-29
6
+ updated: 2026-03-29
7
+ source: community
8
+ ---
9
+
10
+ ## 📋 **Короткий ответ: Порядок между `--hostlist` и `--payload` не важен**
11
+
12
+ Но **порядок `--payload` относительно `--lua-desync` — важен!**
13
+
14
+ ---
15
+
16
+ ## 🔍 **Как это работает**
17
+
18
+ ### **`--hostlist`** — фильтр **профиля**
19
+ - Применяется ко всему профилю в целом
20
+ - Проверяется при входе соединения в профиль
21
+ - Позиция внутри профиля не важна
22
+
23
+ ### **`--payload`** — фильтр для **`--lua-desync`**
24
+ - Применяется к **последующим** `--lua-desync` функциям
25
+ - Действует до следующего `--payload` или до конца профиля
26
+ - **Порядок относительно `--lua-desync` важен!**
27
+
28
+ ---
29
+
30
+ ## ✅ **Эквивалентные варианты (все работают одинаково):**
31
+
32
+ ```bash
33
+ # Вариант 1: hostlist первый
34
+ --hostlist=list.txt --payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls
35
+
36
+ # Вариант 2: payload первый
37
+ --payload=tls_client_hello --hostlist=list.txt --lua-desync=fake:blob=fake_default_tls
38
+
39
+ # Вариант 3: hostlist в конце
40
+ --payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls --hostlist=list.txt
41
+ ```
42
+
43
+ **Все три варианта работают одинаково!**
44
+
45
+ ---
46
+
47
+ ## ⚠️ **Что ВАЖНО: порядок `--payload` и `--lua-desync`**
48
+
49
+ ```bash
50
+ # ✅ ПРАВИЛЬНО: payload ПЕРЕД lua-desync
51
+ --payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls
52
+
53
+ # ❌ НЕПРАВИЛЬНО: payload ПОСЛЕ lua-desync (не влияет на эту функцию!)
54
+ --lua-desync=fake:blob=fake_default_tls --payload=tls_client_hello
55
+ ```
56
+
57
+ ---
58
+
59
+ ## 📊 **Область действия фильтров**
60
+
61
+ ```bash
62
+ --filter-tcp=80,443 # Фильтр профиля (весь профиль)
63
+ --filter-l7=http,tls # Фильтр профиля (весь профиль)
64
+ --hostlist=youtube.txt # Фильтр профиля (весь профиль)
65
+ --payload=http_req # Фильтр lua-desync (до следующего --payload)
66
+ --lua-desync=fake:blob=fake_default_http # Применяется фильтр http_req
67
+ --lua-desync=multisplit:pos=method+2 # Применяется фильтр http_req
68
+ --payload=tls_client_hello # Новый фильтр (отменяет предыдущий)
69
+ --lua-desync=fake:blob=fake_default_tls # Применяется фильтр tls_client_hello
70
+ --new # Конец профиля
71
+ ```
72
+
73
+ ---
74
+
75
+ ## 💡 **Рекомендуемый стиль (для читабельности)**
76
+
77
+ ```bash
78
+ # Сначала фильтры профиля
79
+ --filter-tcp=443
80
+ --filter-l7=tls
81
+ --hostlist=mylist.txt
82
+
83
+ # Потом payload + lua-desync группами
84
+ --payload=tls_client_hello
85
+ --lua-desync=fake:blob=fake_default_tls:tcp_md5
86
+ --lua-desync=multisplit:pos=1,midsld
87
+
88
+ --new
89
+ ```
90
+
91
+ Это не обязательно, но **легче читать и поддерживать**.
92
+
93
+ ---
94
+
95
+ ## 📝 **Итог**
96
+
97
+ | Параметр | Область действия | Порядок важен? |
98
+ | ------------------ | --------------------------- | ------------------------------- |
99
+ | `--filter-tcp/udp` | Весь профиль | Нет |
100
+ | `--filter-l7` | Весь профиль | Нет |
101
+ | `--hostlist` | Весь профиль | Нет |
102
+ | `--ipset` | Весь профиль | Нет |
103
+ | `--payload` | До следующего `--payload` | **Да, перед `--lua-desync`** |
104
+ | `--out-range` | До следующего `--out-range` | **Да, перед `--lua-desync`** |
105
+ | `--in-range` | До следующего `--in-range` | **Да, перед `--lua-desync`** |
106
+ | `--lua-desync` | Конкретный вызов | Да (последовательность вызовов) |
@@ -0,0 +1,218 @@
1
+ ---
2
+ title: Блобы (blobs) — бинарные данные для fake-пакетов
3
+ zapret2-version: v0.9.4.5
4
+ tags: blob, fake, tls_mod, fake_default_tls, fake_default_http, fake_default_quic, бинарные данные
5
+ created: 2026-03-29
6
+ updated: 2026-03-29
7
+ source: community
8
+ ---
9
+
10
+ # Блобы (Blobs) в Zapret2
11
+
12
+ **Блоб (blob)** — это переменная Lua типа `string`, содержащая блок **двоичных данных** произвольной длины (от 1 байта до гигабайтов). Блобы используются для хранения fake-пакетов и других бинарных данных.
13
+
14
+ ---
15
+
16
+ ## 📦 **Стандартные блобы**
17
+
18
+ nfqws2 автоматически инициализирует **3 стандартных блоба** при запуске:
19
+
20
+ ### 1. **`fake_default_tls`** (680 байт)
21
+
22
+ **Что это:** TLS Client Hello пакет с SNI `www.microsoft.com`
23
+
24
+ **Содержимое:**
25
+ - TLS версия: 1.2/1.3
26
+ - Cipher suites: современные шифры
27
+ - SNI: `www.microsoft.com` (по умолчанию)
28
+ - Поддержка HTTP/2
29
+ - Расширения: supported_groups, signature_algorithms, key_share и др.
30
+
31
+ **Использование:**
32
+ ```bash
33
+ --payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls
34
+ ```
35
+
36
+ ### 2. **`fake_default_http`** (227 байт)
37
+
38
+ **Что это:** HTTP GET запрос
39
+
40
+ **Содержимое:**
41
+ ```http
42
+ GET / HTTP/1.1
43
+ Host: www.iana.org
44
+ User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0
45
+ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
46
+ Accept-Encoding: gzip, deflate, br
47
+ ```
48
+
49
+ **Использование:**
50
+ ```bash
51
+ --payload=http_req --lua-desync=fake:blob=fake_default_http
52
+ ```
53
+
54
+ ### 3. **`fake_default_quic`** (620 байт)
55
+
56
+ **Что это:** QUIC Initial пакет (минимальный валидный пакет)
57
+
58
+ **Содержимое:**
59
+ - Первый байт: `0x40` (QUIC long header)
60
+ - Остальное: нули (620 байт всего)
61
+
62
+ **Использование:**
63
+ ```bash
64
+ --payload=quic_initial --lua-desync=fake:blob=fake_default_quic
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 🔧 **Модификации TLS блоба (`tls_mod`)**
70
+
71
+ Функция **`tls_mod(blob, modlist, payload)`** модифицирует TLS Client Hello.
72
+
73
+ ### Доступные модификации:
74
+
75
+ #### 1. **`rnd`** - Рандомизация поля "random"
76
+ - Заменяет 32-байтовое поле "random" в TLS handshake на случайные данные
77
+ - Делает каждый fake-пакет уникальным
78
+
79
+ #### 2. **`rndsni`** - Случайный SNI
80
+ - Генерирует случайное доменное имя
81
+ - Заменяет SNI в TLS расширении
82
+ - Пример: `www.microsoft.com` → `a7b3c.com`
83
+
84
+ #### 3. **`sni=<домен>`** - Установить конкретный SNI
85
+ - Заменяет SNI на указанный домен
86
+ - Пример: `sni=www.google.com`
87
+
88
+ #### 4. **`dupsid`** - Дублировать Session ID
89
+ - Копирует Session ID из **реального** TLS handshake (из `payload`)
90
+ - Требует третий параметр — реальный payload пакета
91
+ - Делает fake более похожим на настоящий
92
+
93
+ #### 5. **`padencap`** - Padding encapsulation
94
+ - Добавляет padding в TLS расширения
95
+ - Увеличивает размер пакета
96
+
97
+ #### 6. **`none`** - Без модификаций
98
+ - Явно указывает, что модификации не нужны
99
+
100
+ ---
101
+
102
+ ## 💡 **Примеры использования**
103
+
104
+ ### Базовое использование стандартных блобов:
105
+
106
+ ```bash
107
+ # TLS fake без модификаций
108
+ --lua-desync=fake:blob=fake_default_tls
109
+
110
+ # HTTP fake
111
+ --lua-desync=fake:blob=fake_default_http
112
+
113
+ # QUIC fake
114
+ --lua-desync=fake:blob=fake_default_quic
115
+ ```
116
+
117
+ ### Модификация TLS при старте:
118
+
119
+ ```bash
120
+ # Однократно при старте изменить SNI на случайный и рандомизировать поле random
121
+ --lua-init="fake_default_tls = tls_mod(fake_default_tls,'rnd,rndsni')"
122
+ ```
123
+
124
+ ### Модификация TLS на лету:
125
+
126
+ ```bash
127
+ # При каждой отправке менять SNI на google.com и копировать session ID
128
+ --lua-desync=fake:blob=fake_default_tls:tls_mod=rnd,dupsid,sni=www.google.com
129
+ ```
130
+
131
+ ### Комбинированные примеры:
132
+
133
+ ```bash
134
+ # Для YouTube: fake с google.com SNI, MD5 signature, 11 повторов
135
+ --payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls:tcp_md5:repeats=11:tls_mod=rnd,dupsid,sni=www.google.com
136
+ ```
137
+
138
+ ### Создание собственных блобов:
139
+
140
+ ```bash
141
+ # Загрузить blob из hex-строки
142
+ --blob=myblob:0x1603010000
143
+
144
+ # Загрузить blob из файла
145
+ --blob=custom_tls:@/path/to/tls_clienthello.bin
146
+
147
+ # Загрузить с offset
148
+ --blob=custom_tls:+100@/path/to/file.bin
149
+
150
+ # Использовать свой blob
151
+ --lua-desync=fake:blob=myblob
152
+ ```
153
+
154
+ ---
155
+
156
+ ## 🔍 **Как работает `tls_mod`**
157
+
158
+ ### Синтаксис:
159
+ ```lua
160
+ tls_mod(blob, modlist, [payload])
161
+ ```
162
+
163
+ **Параметры:**
164
+ 1. `blob` - исходный TLS Client Hello (строка с бинарными данными)
165
+ 2. `modlist` - список модификаций через запятую
166
+ 3. `payload` (опционально) - реальный TLS handshake для копирования Session ID
167
+
168
+ **Возвращает:** модифицированный TLS Client Hello
169
+
170
+ ### Примеры в Lua:
171
+
172
+ ```lua
173
+ -- При старте программы
174
+ fake_default_tls = tls_mod(fake_default_tls, 'rnd,rndsni')
175
+
176
+ -- В desync функции с реальным payload
177
+ fake_payload = tls_mod(fake_default_tls, 'dupsid,sni=www.google.com', desync.reasm_data)
178
+ ```
179
+
180
+ ---
181
+
182
+ ## 📋 **Полный пример конфигурации**
183
+
184
+ ```bash
185
+ nfqws2 \
186
+ --lua-init=@zapret-lib.lua --lua-init=@zapret-antidpi.lua \
187
+ --lua-init="fake_default_tls = tls_mod(fake_default_tls,'rnd,rndsni')" \
188
+ --blob=quic_google:@quic_initial_www_google_com.bin \
189
+ \
190
+ --filter-tcp=80 --filter-l7=http \
191
+ --payload=http_req --lua-desync=fake:blob=fake_default_http:tcp_md5 \
192
+ --lua-desync=multisplit:pos=method+2 \
193
+ --new \
194
+ \
195
+ --filter-tcp=443 --filter-l7=tls \
196
+ --payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls:tcp_md5:repeats=6 \
197
+ --lua-desync=multidisorder:pos=1,midsld \
198
+ --new \
199
+ \
200
+ --filter-udp=443 --filter-l7=quic \
201
+ --payload=quic_initial --lua-desync=fake:blob=quic_google:repeats=11
202
+ ```
203
+
204
+ ---
205
+
206
+ ## 🎯 **Ключевые моменты**
207
+
208
+ 1. **Стандартные блобы** инициализируются автоматически — не нужно их загружать
209
+ 2. **`fake_default_tls`** содержит SNI `www.microsoft.com` по умолчанию
210
+ 3. **`tls_mod`** может применяться:
211
+ - **Один раз при старте** через `--lua-init`
212
+ - **На лету** при каждой отправке через параметр `tls_mod=` в desync функции
213
+ 4. **`dupsid`** требует реальный payload — работает только в функциях `fake`, `syndata` и подобных
214
+ 5. **Модификации комбинируются** через запятую: `rnd,rndsni,dupsid,sni=domain.com`
215
+
216
+ Блобы — это мощный механизм для создания fake-пакетов любой сложности без жестко зашитых параметров в коде программы!
217
+
218
+ ---