blockchecks 1.3.2__tar.gz
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.
- blockchecks-1.3.2/LICENSE +21 -0
- blockchecks-1.3.2/MANIFEST.in +20 -0
- blockchecks-1.3.2/PKG-INFO +118 -0
- blockchecks-1.3.2/README.md +282 -0
- blockchecks-1.3.2/README.pypi.md +69 -0
- blockchecks-1.3.2/blobs/README.md +68 -0
- blockchecks-1.3.2/blobs/discord_ipdisc.bin +0 -0
- blockchecks-1.3.2/blobs/discord_udp.bin +0 -0
- blockchecks-1.3.2/blobs/game_udp.bin +0 -0
- blockchecks-1.3.2/blobs/http_iana.bin +9 -0
- blockchecks-1.3.2/blobs/quic_4pda.bin +0 -0
- blockchecks-1.3.2/blobs/quic_5ka.bin +0 -0
- blockchecks-1.3.2/blobs/quic_alfabank.bin +0 -0
- blockchecks-1.3.2/blobs/quic_cloudflare.bin +0 -0
- blockchecks-1.3.2/blobs/quic_funpay.bin +0 -0
- blockchecks-1.3.2/blobs/quic_gv_kyber_1.bin +0 -0
- blockchecks-1.3.2/blobs/quic_gv_kyber_2.bin +0 -0
- blockchecks-1.3.2/blobs/quic_gv_rr2.bin +0 -0
- blockchecks-1.3.2/blobs/quic_initial.bin +0 -0
- blockchecks-1.3.2/blobs/quic_initial_dbankcloud_ru.bin +0 -0
- blockchecks-1.3.2/blobs/quic_initial_vk_com.bin +0 -0
- blockchecks-1.3.2/blobs/quic_initial_www_google_com.bin +0 -0
- blockchecks-1.3.2/blobs/quic_rutube.bin +0 -0
- blockchecks-1.3.2/blobs/quic_steam.bin +0 -0
- blockchecks-1.3.2/blobs/quic_tencent.bin +0 -0
- blockchecks-1.3.2/blobs/quic_vk.bin +0 -0
- blockchecks-1.3.2/blobs/stun.bin +0 -0
- blockchecks-1.3.2/blobs/stun2.bin +0 -0
- blockchecks-1.3.2/blobs/tls_5ka.bin +0 -0
- blockchecks-1.3.2/blobs/tls_clienthello_4pda_to.bin +0 -0
- blockchecks-1.3.2/blobs/tls_clienthello_max_ru.bin +0 -0
- blockchecks-1.3.2/blobs/tls_clienthello_vk_com.bin +0 -0
- blockchecks-1.3.2/blobs/tls_clienthello_www_google_com.bin +0 -0
- blockchecks-1.3.2/blobs/tls_funpay.bin +0 -0
- blockchecks-1.3.2/blobs/tls_rzd.bin +0 -0
- blockchecks-1.3.2/blobs/tls_vk.bin +0 -0
- blockchecks-1.3.2/blobs/wireguard_init.bin +0 -0
- blockchecks-1.3.2/changelog.md +946 -0
- blockchecks-1.3.2/configs/alt10__fake_4pda_ts.conf +12 -0
- blockchecks-1.3.2/configs/alt11__fake_multisplit_ts_r8.conf +12 -0
- blockchecks-1.3.2/configs/alt12__fake_hostfakesplit_mixed.conf +13 -0
- blockchecks-1.3.2/configs/alt2__multisplit_pos2.conf +10 -0
- blockchecks-1.3.2/configs/alt3__fake_hostfakesplit_ya.conf +11 -0
- blockchecks-1.3.2/configs/alt4__fake_multisplit_badseq.conf +11 -0
- blockchecks-1.3.2/configs/alt5__syndata_multidisorder.conf +9 -0
- blockchecks-1.3.2/configs/alt6__multisplit_pos1_seqovl681.conf +10 -0
- blockchecks-1.3.2/configs/alt7__multisplit_sniext.conf +10 -0
- blockchecks-1.3.2/configs/alt8__fake_nomod_badseq.conf +12 -0
- blockchecks-1.3.2/configs/alt9__hostfakesplit_ozon.conf +10 -0
- blockchecks-1.3.2/configs/alt__fake_fakedsplit_ts.conf +11 -0
- blockchecks-1.3.2/configs/composite_discord.conf +22 -0
- blockchecks-1.3.2/configs/fake_badsum_r6.conf +10 -0
- blockchecks-1.3.2/configs/fake_null_r6_ts.conf +9 -0
- blockchecks-1.3.2/configs/fake_tls_auto__fake_multidisorder.conf +10 -0
- blockchecks-1.3.2/configs/fake_tls_auto_alt2__multisplit_badseq_r8.conf +11 -0
- blockchecks-1.3.2/configs/fake_tls_auto_alt3__multisplit_ts_r8.conf +11 -0
- blockchecks-1.3.2/configs/fake_tls_auto_alt__fakedsplit_badseq.conf +11 -0
- blockchecks-1.3.2/configs/general__default_multisplit.conf +10 -0
- blockchecks-1.3.2/configs/simple_fake__fake_ts.conf +12 -0
- blockchecks-1.3.2/configs/simple_fake_alt2__fake_max_ru_ts.conf +12 -0
- blockchecks-1.3.2/configs/simple_fake_alt__fake_badseq.conf +12 -0
- blockchecks-1.3.2/configs/udp_voice__fake_r12.conf +10 -0
- blockchecks-1.3.2/configs/udp_voice__fake_r6.conf +10 -0
- blockchecks-1.3.2/configs/udp_voice__fake_r6_autottl.conf +10 -0
- blockchecks-1.3.2/configs/udp_voice__fake_r6_ttl5.conf +10 -0
- blockchecks-1.3.2/configs/udp_voice__wide_ports_r6.conf +10 -0
- blockchecks-1.3.2/docs/guide.md +266 -0
- blockchecks-1.3.2/docs/package.md +176 -0
- blockchecks-1.3.2/docs/todo.md +705 -0
- blockchecks-1.3.2/lua/README.md +84 -0
- blockchecks-1.3.2/lua/blockchecks/geneva.lua +65 -0
- blockchecks-1.3.2/lua/blockchecks/init.lua +3 -0
- blockchecks-1.3.2/lua/blockchecks/scan_bridge.lua +90 -0
- blockchecks-1.3.2/lua/blockchecks/write_ipc.lua +44 -0
- blockchecks-1.3.2/lua/custom/README.md +78 -0
- blockchecks-1.3.2/lua/custom/dupfake.lua +49 -0
- blockchecks-1.3.2/lua/custom/manifest.toml +47 -0
- blockchecks-1.3.2/presets/README.md +207 -0
- blockchecks-1.3.2/presets/blobs/README.md +37 -0
- blockchecks-1.3.2/presets/domains/amazon-aws.txt +12 -0
- blockchecks-1.3.2/presets/domains/benchmark.txt +7 -0
- blockchecks-1.3.2/presets/domains/cloudflare.txt +10 -0
- blockchecks-1.3.2/presets/domains/coverage-tcp.txt +23 -0
- blockchecks-1.3.2/presets/domains/coverage.txt +41 -0
- blockchecks-1.3.2/presets/domains/critical.txt +6 -0
- blockchecks-1.3.2/presets/domains/denylist.txt +43 -0
- blockchecks-1.3.2/presets/domains/diagnostic.txt +2 -0
- blockchecks-1.3.2/presets/domains/discord.txt +23 -0
- blockchecks-1.3.2/presets/domains/google-youtube.txt +24 -0
- blockchecks-1.3.2/presets/domains/pi2.txt +5 -0
- blockchecks-1.3.2/presets/strategies/bc2-parity-ackdrop.tls +5 -0
- blockchecks-1.3.2/presets/strategies/bc2-parity-foolings.tls +8 -0
- blockchecks-1.3.2/presets/strategies/bc2-parity-http.http +9 -0
- blockchecks-1.3.2/presets/strategies/bc2-parity-ipv6.tls +9 -0
- blockchecks-1.3.2/presets/strategies/bc2-parity-quic.quic +8 -0
- blockchecks-1.3.2/presets/strategies/bc2-parity-seqovl.tls +8 -0
- blockchecks-1.3.2/presets/strategies/bc2-parity-voice.udp +6 -0
- blockchecks-1.3.2/presets/strategies/blockcheckS-best.tls +12 -0
- blockchecks-1.3.2/presets/strategies/fiord-http.http +7 -0
- blockchecks-1.3.2/presets/strategies/fiord-quic.quic +8 -0
- blockchecks-1.3.2/presets/strategies/fiord-tls12.tls +15 -0
- blockchecks-1.3.2/presets/strategies/fiord-tls13.tls +8 -0
- blockchecks-1.3.2/presets/strategies/fiord-udp_voice.udp +8 -0
- blockchecks-1.3.2/presets/strategies/flowseal-fast.tls +18 -0
- blockchecks-1.3.2/presets/strategies/gp-custom-dupfake.tls +14 -0
- blockchecks-1.3.2/presets/strategies/gp-custom-http.txt +6 -0
- blockchecks-1.3.2/presets/strategies/gp-custom-quic.txt +6 -0
- blockchecks-1.3.2/presets/strategies/gp-custom-tls12.txt +10 -0
- blockchecks-1.3.2/presets/strategies/gp-custom-tls13.txt +7 -0
- blockchecks-1.3.2/presets/strategies/gp-verified.tls +12 -0
- blockchecks-1.3.2/presets/strategies/gp-voice.txt +9 -0
- blockchecks-1.3.2/presets/strategies/gv-e2e-smoke.tls +6 -0
- blockchecks-1.3.2/presets/strategies/gv5-quic-smoke.quic +7 -0
- blockchecks-1.3.2/presets/strategies/http-tls-dual.http +4 -0
- blockchecks-1.3.2/presets/strategies/http-tls-dual.tls +4 -0
- blockchecks-1.3.2/presets/strategies/shortlist-tls12.tls +4 -0
- blockchecks-1.3.2/presets/strategies/timeout-benchmark.tls +4 -0
- blockchecks-1.3.2/pyproject.toml +294 -0
- blockchecks-1.3.2/setup.cfg +4 -0
- blockchecks-1.3.2/src/blockchecks/__init__.py +3 -0
- blockchecks-1.3.2/src/blockchecks/bs.py +17 -0
- blockchecks-1.3.2/src/blockchecks/checkers/__init__.py +5 -0
- blockchecks-1.3.2/src/blockchecks/checkers/composite_runner.py +189 -0
- blockchecks-1.3.2/src/blockchecks/checkers/curl_probe.py +997 -0
- blockchecks-1.3.2/src/blockchecks/checkers/dns_secure.py +497 -0
- blockchecks-1.3.2/src/blockchecks/checkers/http3.py +92 -0
- blockchecks-1.3.2/src/blockchecks/checkers/ip_block.py +173 -0
- blockchecks-1.3.2/src/blockchecks/checkers/ip_pin.py +106 -0
- blockchecks-1.3.2/src/blockchecks/checkers/l3_probe.py +167 -0
- blockchecks-1.3.2/src/blockchecks/checkers/port_block.py +76 -0
- blockchecks-1.3.2/src/blockchecks/checkers/quic_raw.py +178 -0
- blockchecks-1.3.2/src/blockchecks/checkers/tcp_tls.py +211 -0
- blockchecks-1.3.2/src/blockchecks/checkers/udp_voice.py +219 -0
- blockchecks-1.3.2/src/blockchecks/checkers/voice_discovery.py +342 -0
- blockchecks-1.3.2/src/blockchecks/checkers/voice_dns.py +562 -0
- blockchecks-1.3.2/src/blockchecks/checkers/youtube_url.py +195 -0
- blockchecks-1.3.2/src/blockchecks/cli/__init__.py +1 -0
- blockchecks-1.3.2/src/blockchecks/cli/cliapp.py +616 -0
- blockchecks-1.3.2/src/blockchecks/cli/commands/__init__.py +1 -0
- blockchecks-1.3.2/src/blockchecks/cli/commands/bench_settle.py +161 -0
- blockchecks-1.3.2/src/blockchecks/cli/commands/mcp.py +30 -0
- blockchecks-1.3.2/src/blockchecks/cli/commands/pair.py +208 -0
- blockchecks-1.3.2/src/blockchecks/cli/commands/pair_phases.py +802 -0
- blockchecks-1.3.2/src/blockchecks/cli/commands/serve.py +63 -0
- blockchecks-1.3.2/src/blockchecks/cli/commands/stop.py +14 -0
- blockchecks-1.3.2/src/blockchecks/cli/commands/tcp.py +117 -0
- blockchecks-1.3.2/src/blockchecks/cli/commands/udp.py +123 -0
- blockchecks-1.3.2/src/blockchecks/cli/parser.py +840 -0
- blockchecks-1.3.2/src/blockchecks/cli/presets.py +67 -0
- blockchecks-1.3.2/src/blockchecks/cli/user_config.py +104 -0
- blockchecks-1.3.2/src/blockchecks/data_block/__init__.py +31 -0
- blockchecks-1.3.2/src/blockchecks/data_block/provider.py +191 -0
- blockchecks-1.3.2/src/blockchecks/data_block/store.py +362 -0
- blockchecks-1.3.2/src/blockchecks/engine/__init__.py +13 -0
- blockchecks-1.3.2/src/blockchecks/engine/_curl_probe_worker.py +30 -0
- blockchecks-1.3.2/src/blockchecks/engine/_probe_worker.py +34 -0
- blockchecks-1.3.2/src/blockchecks/engine/adaptive_queue.py +470 -0
- blockchecks-1.3.2/src/blockchecks/engine/adaptive_runner.py +353 -0
- blockchecks-1.3.2/src/blockchecks/engine/async_runner.py +1007 -0
- blockchecks-1.3.2/src/blockchecks/engine/base_worker.py +84 -0
- blockchecks-1.3.2/src/blockchecks/engine/blob_aliases.py +169 -0
- blockchecks-1.3.2/src/blockchecks/engine/byedpi_matrix_generator.py +144 -0
- blockchecks-1.3.2/src/blockchecks/engine/byedpi_translator.py +323 -0
- blockchecks-1.3.2/src/blockchecks/engine/conf_builder.py +491 -0
- blockchecks-1.3.2/src/blockchecks/engine/config.py +434 -0
- blockchecks-1.3.2/src/blockchecks/engine/db_logger.py +22 -0
- blockchecks-1.3.2/src/blockchecks/engine/domain_loader.py +175 -0
- blockchecks-1.3.2/src/blockchecks/engine/fail_phase.py +128 -0
- blockchecks-1.3.2/src/blockchecks/engine/family_needs.py +222 -0
- blockchecks-1.3.2/src/blockchecks/engine/generators/__init__.py +43 -0
- blockchecks-1.3.2/src/blockchecks/engine/generators/base.py +41 -0
- blockchecks-1.3.2/src/blockchecks/engine/generators/custom.py +155 -0
- blockchecks-1.3.2/src/blockchecks/engine/generators/families/__init__.py +11 -0
- blockchecks-1.3.2/src/blockchecks/engine/generators/families/_helpers.py +112 -0
- blockchecks-1.3.2/src/blockchecks/engine/generators/families/fake.py +213 -0
- blockchecks-1.3.2/src/blockchecks/engine/generators/families/split.py +253 -0
- blockchecks-1.3.2/src/blockchecks/engine/generators/families/tamper.py +244 -0
- blockchecks-1.3.2/src/blockchecks/engine/generators/flowseal.py +335 -0
- blockchecks-1.3.2/src/blockchecks/engine/generators/standard.py +882 -0
- blockchecks-1.3.2/src/blockchecks/engine/in_ns_workers.py +784 -0
- blockchecks-1.3.2/src/blockchecks/engine/matrix_generator.py +287 -0
- blockchecks-1.3.2/src/blockchecks/engine/nfqws_config.py +94 -0
- blockchecks-1.3.2/src/blockchecks/engine/paths.py +322 -0
- blockchecks-1.3.2/src/blockchecks/engine/preflight.py +489 -0
- blockchecks-1.3.2/src/blockchecks/engine/preset_paths.py +109 -0
- blockchecks-1.3.2/src/blockchecks/engine/results.py +82 -0
- blockchecks-1.3.2/src/blockchecks/engine/run_deadline.py +144 -0
- blockchecks-1.3.2/src/blockchecks/engine/run_finalize.py +154 -0
- blockchecks-1.3.2/src/blockchecks/engine/secure_io.py +24 -0
- blockchecks-1.3.2/src/blockchecks/engine/settings.py +107 -0
- blockchecks-1.3.2/src/blockchecks/engine/settle_profile.py +178 -0
- blockchecks-1.3.2/src/blockchecks/engine/static_validator.py +286 -0
- blockchecks-1.3.2/src/blockchecks/engine/store/__init__.py +116 -0
- blockchecks-1.3.2/src/blockchecks/engine/store/models.py +16 -0
- blockchecks-1.3.2/src/blockchecks/engine/store/schema.py +201 -0
- blockchecks-1.3.2/src/blockchecks/engine/store/sqlite_store.py +743 -0
- blockchecks-1.3.2/src/blockchecks/engine/strategy_loader.py +64 -0
- blockchecks-1.3.2/src/blockchecks/engine/system_deps.py +489 -0
- blockchecks-1.3.2/src/blockchecks/engine/tcp_fanout.py +100 -0
- blockchecks-1.3.2/src/blockchecks/engine/test_runner.py +363 -0
- blockchecks-1.3.2/src/blockchecks/engine/triage.py +130 -0
- blockchecks-1.3.2/src/blockchecks/main.py +234 -0
- blockchecks-1.3.2/src/blockchecks/main_phases.py +1102 -0
- blockchecks-1.3.2/src/blockchecks/mcp/__init__.py +29 -0
- blockchecks-1.3.2/src/blockchecks/mcp/server.py +730 -0
- blockchecks-1.3.2/src/blockchecks/nfconf.py +366 -0
- blockchecks-1.3.2/src/blockchecks/provider_import.py +230 -0
- blockchecks-1.3.2/src/blockchecks/service/__init__.py +105 -0
- blockchecks-1.3.2/src/blockchecks/service/batch_bridge_probe.py +186 -0
- blockchecks-1.3.2/src/blockchecks/service/batch_models.py +67 -0
- blockchecks-1.3.2/src/blockchecks/service/batch_scheduler.py +110 -0
- blockchecks-1.3.2/src/blockchecks/service/batch_service.py +385 -0
- blockchecks-1.3.2/src/blockchecks/service/firewall.py +120 -0
- blockchecks-1.3.2/src/blockchecks/service/lua_bridge_ipc.py +133 -0
- blockchecks-1.3.2/src/blockchecks/service/lua_conf.py +112 -0
- blockchecks-1.3.2/src/blockchecks/service/lua_netns.py +82 -0
- blockchecks-1.3.2/src/blockchecks/service/lua_session.py +141 -0
- blockchecks-1.3.2/src/blockchecks/service/metrics.py +238 -0
- blockchecks-1.3.2/src/blockchecks/service/netns_pool.py +228 -0
- blockchecks-1.3.2/src/blockchecks/service/nfqws2.py +316 -0
- blockchecks-1.3.2/src/blockchecks/service/nfqws2_settle.py +71 -0
- blockchecks-1.3.2/src/blockchecks/service/probe.py +107 -0
- blockchecks-1.3.2/src/blockchecks/service/probe_service.py +221 -0
- blockchecks-1.3.2/src/blockchecks/service/run_control.py +178 -0
- blockchecks-1.3.2/src/blockchecks/service/server.py +430 -0
- blockchecks-1.3.2/src/blockchecks/shortlist_export.py +188 -0
- blockchecks-1.3.2/src/blockchecks/shortlist_import.py +206 -0
- blockchecks-1.3.2/src/blockchecks.egg-info/PKG-INFO +118 -0
- blockchecks-1.3.2/src/blockchecks.egg-info/SOURCES.txt +233 -0
- blockchecks-1.3.2/src/blockchecks.egg-info/dependency_links.txt +1 -0
- blockchecks-1.3.2/src/blockchecks.egg-info/entry_points.txt +5 -0
- blockchecks-1.3.2/src/blockchecks.egg-info/requires.txt +30 -0
- blockchecks-1.3.2/src/blockchecks.egg-info/top_level.txt +2 -0
- blockchecks-1.3.2/systemd/blockcheck-series.service +18 -0
- blockchecks-1.3.2/systemd/blockcheck-serve.service +18 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 blockcheckS contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
include configs/*.conf
|
|
2
|
+
include configs/composite_discord.conf
|
|
3
|
+
recursive-include presets/strategies *.tls *.txt *.http *.quic *.udp
|
|
4
|
+
recursive-include presets/domains *.txt
|
|
5
|
+
include presets/blobs/README.md
|
|
6
|
+
recursive-include blobs *.bin
|
|
7
|
+
include blobs/README.md
|
|
8
|
+
recursive-include lua/blockchecks *.lua
|
|
9
|
+
recursive-include lua/custom *.lua *.toml
|
|
10
|
+
include lua/README.md
|
|
11
|
+
include lua/custom/README.md
|
|
12
|
+
include presets/README.md
|
|
13
|
+
include LICENSE
|
|
14
|
+
include README.md
|
|
15
|
+
include docs/todo.md
|
|
16
|
+
include docs/guide.md
|
|
17
|
+
include docs/package.md
|
|
18
|
+
include changelog.md
|
|
19
|
+
recursive-include systemd *.service
|
|
20
|
+
recursive-include src/blockchecks *.py
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: blockchecks
|
|
3
|
+
Version: 1.3.2
|
|
4
|
+
Summary: Asynchronous DPI strategy testing framework for nfqws2/zapret2
|
|
5
|
+
Author: zhoel-sherk
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/zhoel-sherk/blockcheckS
|
|
8
|
+
Project-URL: Repository, https://github.com/zhoel-sherk/blockcheckS
|
|
9
|
+
Project-URL: Changelog, https://github.com/zhoel-sherk/blockcheckS/blob/master/changelog.md
|
|
10
|
+
Project-URL: Documentation, https://github.com/zhoel-sherk/blockcheckS/blob/master/docs/guide.md
|
|
11
|
+
Keywords: nfqws2,zapret,dpi,network,bypass,blockcheck,netns
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: System Administrators
|
|
15
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: System :: Networking
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: curl-cffi>=0.8.0
|
|
25
|
+
Requires-Dist: colorama>=0.4.6
|
|
26
|
+
Requires-Dist: aiosqlite>=0.20.0
|
|
27
|
+
Requires-Dist: tomli>=2.0.0; python_version < "3.11"
|
|
28
|
+
Requires-Dist: pydantic-settings>=2.0
|
|
29
|
+
Provides-Extra: mcp
|
|
30
|
+
Requires-Dist: mcp<2.0.0,>=1.1.0; extra == "mcp"
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest-cov>=7.0.0; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-randomly>=3.15; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-timeout>=2.0.0; extra == "dev"
|
|
37
|
+
Requires-Dist: pytest-xdist>=3.5.0; extra == "dev"
|
|
38
|
+
Requires-Dist: ruff>=0.9.0; extra == "dev"
|
|
39
|
+
Requires-Dist: vulture>=2.14; extra == "dev"
|
|
40
|
+
Requires-Dist: pytest-archon>=0.0.6; extra == "dev"
|
|
41
|
+
Requires-Dist: mutmut>=3.6; extra == "dev"
|
|
42
|
+
Requires-Dist: hypothesis>=6.0; extra == "dev"
|
|
43
|
+
Provides-Extra: discovery
|
|
44
|
+
Requires-Dist: aiohttp-socks>=0.11.0; extra == "discovery"
|
|
45
|
+
Requires-Dist: aiohttp>=3.9; extra == "discovery"
|
|
46
|
+
Provides-Extra: youtube
|
|
47
|
+
Requires-Dist: yt-dlp>=2024.1.0; extra == "youtube"
|
|
48
|
+
Dynamic: license-file
|
|
49
|
+
|
|
50
|
+
# blockchecks
|
|
51
|
+
|
|
52
|
+
Asynchronous DPI (Deep Packet Inspection) strategy testing framework for
|
|
53
|
+
**nfqws2** / **zapret2**.
|
|
54
|
+
|
|
55
|
+
It runs thousands of desync strategies against target domains inside isolated
|
|
56
|
+
network namespaces, using a browser-grade TLS fingerprint (JA4 via curl_cffi),
|
|
57
|
+
and reports which combinations actually work on a given network. Results are
|
|
58
|
+
stored in SQLite and can be exported to ready-to-use nfqws2 configuration
|
|
59
|
+
files for Keenetic / OpenWrt / Linux routers.
|
|
60
|
+
|
|
61
|
+
## Features
|
|
62
|
+
|
|
63
|
+
- **Fast**: ~1 test/sec (33× faster than the reference `blockcheck.sh`) via
|
|
64
|
+
asyncio + a reused netns pool.
|
|
65
|
+
- **Accurate**: browser-grade JA4 TLS fingerprint (Chrome BoringSSL), content
|
|
66
|
+
validation, DPI fake-detection.
|
|
67
|
+
- **TCP + UDP**: TCP strategy families, HTTP :80, QUIC/HTTP3, and Discord
|
|
68
|
+
Voice UDP endpoint discovery (STUN + IP Discovery).
|
|
69
|
+
- **Resilient**: checkpoint/resume, SQLite state, adaptive priority queue.
|
|
70
|
+
- **Tooling**: static strategy validator (offline, 9+ rules), custom Lua
|
|
71
|
+
registry, MCP server for LLM agents.
|
|
72
|
+
- **Portable**: installs on x86_64, arm64 and armv7l (Raspberry Pi 2+) without
|
|
73
|
+
compiling native dependencies.
|
|
74
|
+
|
|
75
|
+
## Requirements
|
|
76
|
+
|
|
77
|
+
- Linux with root (needed for network namespaces + iptables)
|
|
78
|
+
- Python 3.10+
|
|
79
|
+
- nfqws2 / zapret2 (auto-fetched on first run)
|
|
80
|
+
|
|
81
|
+
## Quick start
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pip install blockchecks
|
|
85
|
+
|
|
86
|
+
# First scan — ~30 strategies against discord.com
|
|
87
|
+
sudo bs scan -d discord.com --generate --parallel 4
|
|
88
|
+
|
|
89
|
+
# Resume after interruption (checkpoint/resume)
|
|
90
|
+
sudo bs scan -d discord.com --generate --resume
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Export a router config
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# default: ~/.local/share/blockcheckS/export/nfqws2_<ts>.conf (+ raw, user.list)
|
|
97
|
+
bc-nfconf --db logs/run.db --out-dir /path/to/out
|
|
98
|
+
|
|
99
|
+
# optional: add an IP filter from the DNS cache (no DNS needed on the router)
|
|
100
|
+
bc-nfconf --db logs/run.db --out-dir /path/to/out --ipset
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Documentation
|
|
104
|
+
|
|
105
|
+
- [User guide](https://github.com/zhoel-sherk/blockcheckS/blob/master/docs/guide.md)
|
|
106
|
+
- [Architecture](https://github.com/zhoel-sherk/blockcheckS/blob/master/docs/architecture.md)
|
|
107
|
+
- [MCP server](https://github.com/zhoel-sherk/blockcheckS/blob/master/docs/mcp.md)
|
|
108
|
+
- [Changelog](https://github.com/zhoel-sherk/blockcheckS/blob/master/changelog.md)
|
|
109
|
+
|
|
110
|
+
## License
|
|
111
|
+
|
|
112
|
+
MIT — see [LICENSE](https://github.com/zhoel-sherk/blockcheckS/blob/master/LICENSE).
|
|
113
|
+
|
|
114
|
+
## Disclaimer
|
|
115
|
+
|
|
116
|
+
This software is an open-source analytical tool for educational, academic and
|
|
117
|
+
network-research purposes, intended for network administrators and systems
|
|
118
|
+
engineers to study DPI behaviors. Use entirely at your own risk.
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# blockcheckS — lightspeed DPI strategy tester
|
|
2
|
+
|
|
3
|
+
[](#)
|
|
4
|
+
[](#)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](#)
|
|
7
|
+
|
|
8
|
+
**Твой провайдер режет YouTube, Discord и Telegram через DPI?**
|
|
9
|
+
*blockcheckS за 10 минут найдёт работающий обход из 10 000+ комбинаций,
|
|
10
|
+
пока ты пьёшь кофе. В 33 раза быстрее, чем blockcheck.sh.*
|
|
11
|
+
|
|
12
|
+
> Асинхронный подбор стратегий nfqws2/zapret2 в изолированных network
|
|
13
|
+
> namespaces. HTTP/2 и HTTP/3 через браузерный TLS-отпечаток (JA4),
|
|
14
|
+
> TCP×UDP pair matrix с авто-дискавери голосовых эндпоинтов Discord,
|
|
15
|
+
> checkpoint/resume, SQLite-стейт и экспорт готового конфига для Keenetic.
|
|
16
|
+
|
|
17
|
+
- ⚡ **1 тест/сек** — 33× быстрее blockcheck.sh (0.43 тест/сек)
|
|
18
|
+
- 🔍 **10 886+ стратегий** — StandardGenerator: TCP-семей + HTTP :80 + QUIC + UDP voice
|
|
19
|
+
- 🎭 **Браузерный JA4** — curl_cffi с Chrome 124 BoringSSL (не палится как скрипт)
|
|
20
|
+
- 🏊 **Netns pool** — пресозданные изолированные namespace'ы
|
|
21
|
+
- 🔬 **Preflight Triage** — детерминированный профиль DPI до скана (DNS/L3/SNI/
|
|
22
|
+
stream-stall/QoS/QUIC/TLS-fingerprint) → отсечение бесполезных веток генераторов
|
|
23
|
+
- 🧬 **Adaptive queue** — генетический буст PASS-стратегий по family/blob/traits
|
|
24
|
+
- 🛰️ **`bs serve`** — резидентный on-the-fly probe server (Unix socket + HTTP)
|
|
25
|
+
- 🧩 **`bs mcp`** — MCP-мост (FastMCP, stdio) для LLM-клиентов (Claude/Cursor/opencode)
|
|
26
|
+
- 🧪 **Статический валидатор** — офлайн-проверка стратегий до netns (9+ правил,
|
|
27
|
+
fuzz-устойчив) + кастомные Lua (`lua/custom/`, `manifest.toml` с included/excluded)
|
|
28
|
+
- 📊 **TCP×UDP матрицы** — ищет пары стратегий для голоса Discord
|
|
29
|
+
- 💾 **Checkpoint/resume** — упал роутер? Продолжи с места, SQLite помнит всё
|
|
30
|
+
- 📦 **nfconf export** — готовый конфиг для Keenetic, Linux, OpenWrt (+ `--ipset`
|
|
31
|
+
из DNS-кэша, IP→CIDR через ip2net)
|
|
32
|
+
- 🤖 **Zapret2 auto-fetch** — сам скачает nfqws2 с GitHub, если нет локально
|
|
33
|
+
- 🍓 **Raspberry Pi 2+ (armv7l)** — установка без компиляции (stdlib /proc, без psutil)
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Оглавление
|
|
38
|
+
|
|
39
|
+
1. [Что такое blockcheckS? (30 секунд)](#что-такое-blockchecks-30-секунд)
|
|
40
|
+
2. [Сравнение с blockcheck.sh](#сравнение-с-blockchecksh)
|
|
41
|
+
3. [Быстрый старт](#быстрый-старт)
|
|
42
|
+
4. [Установка](#установка)
|
|
43
|
+
5. [CLI команды](#cli-команды)
|
|
44
|
+
6. [Пресеты](#пресеты)
|
|
45
|
+
7. [Экспорт конфига для роутера](#экспорт-конфига-для-роутера)
|
|
46
|
+
8. [Документация](#документация)
|
|
47
|
+
9. [For contributors](#for-contributors)
|
|
48
|
+
10. [Дисклеймер](#дисклеймер)
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Что такое blockcheckS? (30 секунд)
|
|
53
|
+
|
|
54
|
+
Берёшь домен (скажем, `discord.com`), запускаешь одну команду — и через пару
|
|
55
|
+
минут получаешь список стратегий nfqws2, которые **реально работают** на твоём
|
|
56
|
+
провайдере. Никакого гадания на кофейной гуще с `badsum`/`fakedsplit` — только
|
|
57
|
+
холодный, циничный перебор через изолированные netns с браузерным JA4.
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
sudo bs scan -d discord.com --generate --parallel 4
|
|
61
|
+
# → 29 стратегий за 8 секунд, 3 PASS
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Под капотом: asyncio + NetNsPool + curl_cffi + nfqws2 + SQLite + немного магии.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Сравнение с blockcheck.sh
|
|
69
|
+
|
|
70
|
+
| blockcheck.sh (оригинал) | blockcheckS (этот парень) |
|
|
71
|
+
|---|---|
|
|
72
|
+
| ~60–120 сек на стратегию | ~3–5 сек на стратегию (async parallel) |
|
|
73
|
+
| System curl / OpenSSL | curl_cffi с браузерным JA4 (Chrome 124 BoringSSL) |
|
|
74
|
+
| Только TCP | TCP + UDP voice (STUN + IP Discovery) |
|
|
75
|
+
| Последовательный shell | asyncio + NetNsPool (netns переиспользуются) |
|
|
76
|
+
| Легко «ложно-зелёный» | Content validation + DPI fake detection |
|
|
77
|
+
| 32 000+ комбинаций, медленно | 10 886 комбинаций, **быстро** (покрытие ≥90% BC2) |
|
|
78
|
+
| Только bash | Python-пакет, `pip install`, pytest, ruff |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Быстрый старт
|
|
83
|
+
|
|
84
|
+
Три команды — и ты в деле:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# 1. Установка (editable, см. ниже почему)
|
|
88
|
+
pip install -e ".[dev,discovery]"
|
|
89
|
+
|
|
90
|
+
# 2. Первый скан — 29 стратегий на discord.com
|
|
91
|
+
sudo bs scan -d discord.com --generate --parallel 4
|
|
92
|
+
|
|
93
|
+
# 3. Продолжить после обрыва (checkpoint/resume)
|
|
94
|
+
sudo bs scan -d discord.com --generate --resume
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Больше примеров в [User Guide](docs/guide.md).
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Установка
|
|
102
|
+
|
|
103
|
+
**Linux с root** (нужен для netns + iptables). Python 3.10+.
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
git clone https://github.com/zhoel-sherk/blockcheckS.git
|
|
107
|
+
cd blockcheckS
|
|
108
|
+
pip install -e ".[dev,discovery]"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Почему **editable** (`-e`)? `configs/` и `presets/` лежат в корне репо —
|
|
112
|
+
plain wheel их не найдёт. Это осознанное решение (см. [ONB-7](docs/package.md)).
|
|
113
|
+
|
|
114
|
+
**nfqws2 / zapret2** — blockcheckS сам скачает официальный релиз
|
|
115
|
+
[bol-van/zapret2](https://github.com/bol-van/zapret2) при первом запуске в
|
|
116
|
+
`~/.local/share/blockcheckS/zapret2/` (под armv7l/arm64 — `binaries/linux-arm`).
|
|
117
|
+
Если nfqws2 уже стоит в `/opt/zapret2` — использует его. Отключить авто-фетч:
|
|
118
|
+
`--no-fetch-deps`.
|
|
119
|
+
|
|
120
|
+
**Блобы** (fake payloads) — в репо `blobs/` (без скачивания). Override:
|
|
121
|
+
`BLOCKCHECKS_BLOBS`. Опционально: `scripts/install_blobs.sh` для extras на хосте.
|
|
122
|
+
Flowseal-техники: `--tcp-sources flowseal` / `-M flowseal-fast`
|
|
123
|
+
([Flowseal/zapret-discord-youtube](https://github.com/Flowseal/zapret-discord-youtube);
|
|
124
|
+
howto: [docs/cookbook/blobs.md](docs/cookbook/blobs.md)).
|
|
125
|
+
|
|
126
|
+
**Raspberry Pi 2+ (armv7l)** — все обязательные зависимости имеют armv7l
|
|
127
|
+
wheels на PyPI (psutil убран → stdlib `/proc`), поэтому установка **без
|
|
128
|
+
компиляции**:
|
|
129
|
+
```bash
|
|
130
|
+
bash scripts/setup-standalone.sh # venv + pip install + smoke
|
|
131
|
+
# подробности: docs/install-rpi.md
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Юнит-тесты запускаются **без root**:
|
|
135
|
+
```bash
|
|
136
|
+
pytest -m "not integration"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## CLI команды
|
|
142
|
+
|
|
143
|
+
| Команда | Что делает | Пример |
|
|
144
|
+
|---|---|---|
|
|
145
|
+
| `bs scan` | Асинхронный TCP-батч | `sudo bs scan -d discord.com --generate --parallel 4` |
|
|
146
|
+
| `bs pair` | TCP×UDP pair matrix | `sudo bs pair -d discord.com --generate --auto-discover 5` |
|
|
147
|
+
| `bs full` | Масс-скан + экспорт (долгий) | `sudo bs full --parallel 4 --max-timeh 2` |
|
|
148
|
+
| `bs tcp` | Одна TCP-стратегия (sync) | `sudo bs tcp -d discord.com -c configs/simple_fake__fake_ts.conf` |
|
|
149
|
+
| `bs udp` | Один UDP-конфиг (sync) | `sudo bs udp -c configs/udp_voice__fake_r6.conf` |
|
|
150
|
+
| `bs composite` | Композитный TCP+UDP конфиг | `sudo bs composite -c configs/composite_discord.conf` |
|
|
151
|
+
| `bs bench-settle` | Калибровка settle/curl таймаутов | `sudo bs bench-settle -d discord.com` |
|
|
152
|
+
| `bs serve` | Резидентный probe server (Unix socket + HTTP) | `sudo bs serve --pool 2` |
|
|
153
|
+
| `bs mcp` | MCP-сервер (stdio) для LLM-клиентов | `bs-mcp` (см. [docs/mcp.md](docs/mcp.md)) |
|
|
154
|
+
| `bc-nfconf` | Экспорт nfqws2-конфигов из БД (+`--ipset`) | `bc-nfconf --db state.db --out-dir output --ipset` |
|
|
155
|
+
|
|
156
|
+
Флаги, которые стоит знать: `--resume`, `--preset`, `-M`, `--generate`,
|
|
157
|
+
`--tcp-sources`, `--parallel`, `--max`, `--scan-level`, `--repeats`,
|
|
158
|
+
`--disable-ech`, `--max-timeh`. Bare `--generate` (без значения) =
|
|
159
|
+
`custom,configs`; явно: `--generate fake,configs`.
|
|
160
|
+
|
|
161
|
+
Подробный CLI reference: [docs/guide.md](docs/guide.md).
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Пресеты
|
|
166
|
+
|
|
167
|
+
Готовые списки доменов и стратегий из GP control-plane:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Домены
|
|
171
|
+
bs scan --preset benchmark --generate # 6 доменов для быстрой проверки
|
|
172
|
+
bs scan --preset discord --generate # голый Discord (22 домена)
|
|
173
|
+
bs scan --preset google-youtube --generate # YouTube CDN (23 домена)
|
|
174
|
+
bs scan --preset critical --generate # критичные: YT + Discord + GV
|
|
175
|
+
|
|
176
|
+
# Стратегии
|
|
177
|
+
bs scan -d discord.com -M blockcheckS-best # 9 проверенных стратегий
|
|
178
|
+
bs scan -d discord.com -M gp-verified # 12 GP-подтверждённых
|
|
179
|
+
bs pair -d discord.com -M gp-voice # голосовые UDP-стратегии
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Посмотреть всё: `bs scan --list-presets`.
|
|
183
|
+
Детали: [presets/README.md](presets/README.md).
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Экспорт конфига для роутера
|
|
188
|
+
|
|
189
|
+
После прогона blockcheckS экспортирует готовые nfqws2-конфиги из best-стратегий
|
|
190
|
+
в XDG-каталог:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# default: ~/.local/share/blockcheckS/export/nfqws2_<ts>.conf (+ raw, user.list)
|
|
194
|
+
bc-nfconf --db logs/run.db --out-dir /path/to/out
|
|
195
|
+
|
|
196
|
+
# Добавить IP-фильтр из DNS-кэша (без DNS на роутере):
|
|
197
|
+
# малые наборы → --ipset-ip inline, большие → user.ipset
|
|
198
|
+
bc-nfconf --db logs/run.db --out-dir /path/to/out --ipset
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
На Keenetic скопируйте `nfqws2_*.conf` → `/opt/etc/nfqws2/nfqws2.conf`.
|
|
202
|
+
Детали: [configs/README.md](configs/README.md).
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Документация
|
|
207
|
+
|
|
208
|
+
| Документ | О чём |
|
|
209
|
+
|---|---|
|
|
210
|
+
| [User Guide](docs/guide.md) | CLI reference, примеры, known limitations |
|
|
211
|
+
| [Architecture](docs/architecture.md) | Data flow, module map, voice discovery flow |
|
|
212
|
+
| [Package Layout](docs/package.md) | XDG-пути, деревья, import graph |
|
|
213
|
+
| [Database Schema](docs/database.md) | ER-диаграмма, SQL examples, checkpoint logic |
|
|
214
|
+
| [MCP Server](docs/mcp.md) | Установка MCP в Claude Desktop / Cursor / opencode |
|
|
215
|
+
| [Raspberry Pi (armv7l)](docs/install-rpi.md) | Установка на RPi 2+ без компиляции |
|
|
216
|
+
| [Glossary](docs/glossary.md) | Терминология: netns, NFQUEUE, pair matrix, ... |
|
|
217
|
+
| [Changelog](changelog.md) | История версий (1.3.2 и ранее) |
|
|
218
|
+
| [Roadmap](docs/todo.md) | Бэклог: P1 (скорость), P2 (voice/GP), P3 (ML) |
|
|
219
|
+
|
|
220
|
+
Cookbook: [add checker](docs/cookbook/add-checker.md) ·
|
|
221
|
+
[add generator](docs/cookbook/add-generator.md) ·
|
|
222
|
+
[add CLI flag](docs/cookbook/add-cli-flag.md) ·
|
|
223
|
+
[GP bridge](docs/cookbook/gp-bridge.md).
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## For contributors
|
|
228
|
+
|
|
229
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md) — setup, тесты, PR flow, что коммитить а что нет
|
|
230
|
+
- [docs/architecture.md](docs/architecture.md) — data flow, module map
|
|
231
|
+
- [docs/cookbook/](docs/cookbook/) — как добавить checker / generator / CLI flag
|
|
232
|
+
|
|
233
|
+
Быстрый старт для разработчика:
|
|
234
|
+
```bash
|
|
235
|
+
pip install -e ".[dev,discovery]"
|
|
236
|
+
ruff check src tests # линтер
|
|
237
|
+
pytest -m "not integration" # юнит-тесты (без root)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## ⚖️ Legal Disclaimer / Дисклеймер
|
|
243
|
+
|
|
244
|
+
### English
|
|
245
|
+
This software is provided "as is", without warranty of any kind, express or
|
|
246
|
+
implied. **blockcheckS** is an open-source analytical tool designed strictly for
|
|
247
|
+
educational, academic, and network research purposes. It is intended for network
|
|
248
|
+
administrators and systems engineers to analyze Deep Packet Inspection (DPI)
|
|
249
|
+
behaviors and diagnose network topologies.
|
|
250
|
+
|
|
251
|
+
* The author(s) do not encourage, facilitate, or promote any illegal
|
|
252
|
+
activities or violations of local telecommunication laws.
|
|
253
|
+
* This software does not contain any malicious code, malware, or exploits
|
|
254
|
+
designed to compromise computer security or bypass information protection
|
|
255
|
+
systems (in compliance with Art. 273 of the Criminal Code of the Russian
|
|
256
|
+
Federation).
|
|
257
|
+
* The use of this tool is entirely **at your own risk**. The author(s) shall
|
|
258
|
+
not be held liable for any direct, indirect, incidental, or consequential
|
|
259
|
+
damages, service disruptions, or legal actions resulting from the use or
|
|
260
|
+
misuse of this software.
|
|
261
|
+
|
|
262
|
+
### Русский
|
|
263
|
+
Данное программное обеспечение предоставляется по принципу «как есть» (as is).
|
|
264
|
+
**blockcheckS** является аналитическим инструментом и распространяется
|
|
265
|
+
исключительно в ознакомительных, научно-исследовательских и диагностических
|
|
266
|
+
целях для системных инженеров и сетевых администраторов.
|
|
267
|
+
|
|
268
|
+
* **Исключительно исследовательский характер**: Программа предназначена для
|
|
269
|
+
изучения механизмов работы систем глубокого анализа пакетов (DPI) и не
|
|
270
|
+
содержит вредоносного функционала, средств обхода систем защиты информации
|
|
271
|
+
или вирусов (соответствует требованиям **Ст. 273 УК РФ**). Утилита
|
|
272
|
+
оперирует стандартными сетевыми вызовами и легитимными механизмами ядра
|
|
273
|
+
Linux.
|
|
274
|
+
* **Соблюдение законодательства**: Автор(ы) не призывают к нарушению
|
|
275
|
+
действующего законодательства Российской Федерации, включая Федеральный
|
|
276
|
+
закон «О связи» № 126-ФЗ и Федеральный закон «Об информации, информационных
|
|
277
|
+
технологиях и о защите информации» № 149-ФЗ.
|
|
278
|
+
* **Отказ от ответственности**: Вы используете данное ПО **на свой страх и
|
|
279
|
+
риск**. Автор(ы) не несут ответственности за любые ограничения связи,
|
|
280
|
+
блокировки, штрафы, потерю данных или иные прямые или косвенные
|
|
281
|
+
последствия, возникшие в результате работы или неправильной настройки
|
|
282
|
+
данной утилиты.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# blockchecks
|
|
2
|
+
|
|
3
|
+
Asynchronous DPI (Deep Packet Inspection) strategy testing framework for
|
|
4
|
+
**nfqws2** / **zapret2**.
|
|
5
|
+
|
|
6
|
+
It runs thousands of desync strategies against target domains inside isolated
|
|
7
|
+
network namespaces, using a browser-grade TLS fingerprint (JA4 via curl_cffi),
|
|
8
|
+
and reports which combinations actually work on a given network. Results are
|
|
9
|
+
stored in SQLite and can be exported to ready-to-use nfqws2 configuration
|
|
10
|
+
files for Keenetic / OpenWrt / Linux routers.
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- **Fast**: ~1 test/sec (33× faster than the reference `blockcheck.sh`) via
|
|
15
|
+
asyncio + a reused netns pool.
|
|
16
|
+
- **Accurate**: browser-grade JA4 TLS fingerprint (Chrome BoringSSL), content
|
|
17
|
+
validation, DPI fake-detection.
|
|
18
|
+
- **TCP + UDP**: TCP strategy families, HTTP :80, QUIC/HTTP3, and Discord
|
|
19
|
+
Voice UDP endpoint discovery (STUN + IP Discovery).
|
|
20
|
+
- **Resilient**: checkpoint/resume, SQLite state, adaptive priority queue.
|
|
21
|
+
- **Tooling**: static strategy validator (offline, 9+ rules), custom Lua
|
|
22
|
+
registry, MCP server for LLM agents.
|
|
23
|
+
- **Portable**: installs on x86_64, arm64 and armv7l (Raspberry Pi 2+) without
|
|
24
|
+
compiling native dependencies.
|
|
25
|
+
|
|
26
|
+
## Requirements
|
|
27
|
+
|
|
28
|
+
- Linux with root (needed for network namespaces + iptables)
|
|
29
|
+
- Python 3.10+
|
|
30
|
+
- nfqws2 / zapret2 (auto-fetched on first run)
|
|
31
|
+
|
|
32
|
+
## Quick start
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install blockchecks
|
|
36
|
+
|
|
37
|
+
# First scan — ~30 strategies against discord.com
|
|
38
|
+
sudo bs scan -d discord.com --generate --parallel 4
|
|
39
|
+
|
|
40
|
+
# Resume after interruption (checkpoint/resume)
|
|
41
|
+
sudo bs scan -d discord.com --generate --resume
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Export a router config
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# default: ~/.local/share/blockcheckS/export/nfqws2_<ts>.conf (+ raw, user.list)
|
|
48
|
+
bc-nfconf --db logs/run.db --out-dir /path/to/out
|
|
49
|
+
|
|
50
|
+
# optional: add an IP filter from the DNS cache (no DNS needed on the router)
|
|
51
|
+
bc-nfconf --db logs/run.db --out-dir /path/to/out --ipset
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Documentation
|
|
55
|
+
|
|
56
|
+
- [User guide](https://github.com/zhoel-sherk/blockcheckS/blob/master/docs/guide.md)
|
|
57
|
+
- [Architecture](https://github.com/zhoel-sherk/blockcheckS/blob/master/docs/architecture.md)
|
|
58
|
+
- [MCP server](https://github.com/zhoel-sherk/blockcheckS/blob/master/docs/mcp.md)
|
|
59
|
+
- [Changelog](https://github.com/zhoel-sherk/blockcheckS/blob/master/changelog.md)
|
|
60
|
+
|
|
61
|
+
## License
|
|
62
|
+
|
|
63
|
+
MIT — see [LICENSE](https://github.com/zhoel-sherk/blockcheckS/blob/master/LICENSE).
|
|
64
|
+
|
|
65
|
+
## Disclaimer
|
|
66
|
+
|
|
67
|
+
This software is an open-source analytical tool for educational, academic and
|
|
68
|
+
network-research purposes, intended for network administrators and systems
|
|
69
|
+
engineers to study DPI behaviors. Use entirely at your own risk.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Baked strategy blobs
|
|
2
|
+
|
|
3
|
+
Committed `.bin` payloads for nfqws2 `--blob=` / Flowseal-style strategies.
|
|
4
|
+
|
|
5
|
+
- Prefer this directory at runtime (see `BLOCKCHECKS_BLOBS` / `config.BLOB_DIR`).
|
|
6
|
+
- Alias map: `src/blockchecks/engine/blob_aliases.py`
|
|
7
|
+
- How to add a file: [docs/cookbook/blobs.md](../docs/cookbook/blobs.md)
|
|
8
|
+
- Upstream reference: https://github.com/Flowseal/zapret-discord-youtube
|
|
9
|
+
|
|
10
|
+
## TLS ClientHello blobs (TCP :443 fake payloads)
|
|
11
|
+
|
|
12
|
+
| Alias | File | Size | Source / note |
|
|
13
|
+
|---|---|---|---|
|
|
14
|
+
| `google` / `tls_clienthello` | `tls_clienthello_www_google_com.bin` | 681 B | www.google.com ClientHello (Flowseal bin) — базовый Google-фейк |
|
|
15
|
+
| `max_ru` | `tls_clienthello_max_ru.bin` | 664 B | max.ru ClientHello (Flowseal) — подтверждён на LLC Fiord |
|
|
16
|
+
| `4pda` | `tls_clienthello_4pda_to.bin` | 284 B | 4pda.to ClientHello (Flowseal) |
|
|
17
|
+
| `tls_vk` | `tls_clienthello_vk_com.bin` | 517 B | vk.com ClientHello |
|
|
18
|
+
| `tls_5ka` | `tls_5ka.bin` | 654 B | **5ka.ru ClientHello (NEW, Flowseal 2026)** — Пятёрочка, обход РКН |
|
|
19
|
+
| `tls_funpay` | `tls_funpay.bin` | 562 B | funpay.com ClientHello (Hellcat-95, PR #16591) |
|
|
20
|
+
| `tls_rzd` | `tls_rzd.bin` | 658 B | www.rzd.ru ClientHello (Hellcat-95, PR #16591) |
|
|
21
|
+
|
|
22
|
+
## QUIC Initial blobs (UDP :443 fake payloads)
|
|
23
|
+
|
|
24
|
+
| Alias | File | Size | Source / note |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| `quic_google` | `quic_initial_www_google_com.bin` | 1200 B | www.google.com QUIC Initial (Flowseal) — базовый |
|
|
27
|
+
| `quic_dbank` | `quic_initial_dbankcloud_ru.bin` | 1357 B | dbankcloud.ru QUIC Initial (Flowseal) |
|
|
28
|
+
| `quic_4pda` | `quic_4pda.bin` | 1250 B | 4pda.to QUIC Initial (Flowseal) |
|
|
29
|
+
| `quic_tencent` | `quic_tencent.bin` | 1231 B | tencent.com QUIC Initial (Flowseal) |
|
|
30
|
+
| `quic_steam` | `quic_steam.bin` | 1200 B | steamcommunity.com QUIC Initial (Flowseal) |
|
|
31
|
+
| `quic_vk` | `quic_initial_vk_com.bin` | 1357 B | vk.com QUIC Initial |
|
|
32
|
+
| `quic_5ka` | `quic_5ka.bin` | 1250 B | **5ka.ru QUIC Initial (NEW, Flowseal 2026)** — Пятёрочка |
|
|
33
|
+
| `quic_rutube` | `quic_rutube.bin` | 1357 B | **rutube.ru QUIC Initial (NEW, Flowseal 2026)** — Rutube |
|
|
34
|
+
| `quic_funpay` | `quic_funpay.bin` | 1200 B | funpay.com QUIC Initial (Hellcat-95, PR #16591) |
|
|
35
|
+
| `quic_cloudflare` | `quic_cloudflare.bin` | 1200 B | www.cloudflare.com QUIC Initial (Hellcat-95, PR #16591) |
|
|
36
|
+
| `quic_alfabank` | `quic_alfabank.bin` | 1200 B | alfabank.ru QUIC Initial (Hellcat-95, PR #16591) |
|
|
37
|
+
| `quic_gv_kyber_1` | `quic_gv_kyber_1.bin` | 1230 B | googlevideo CDN QUIC + Kyber/ML-KEM key-share #1 |
|
|
38
|
+
| `quic_gv_kyber_2` | `quic_gv_kyber_2.bin` | 1230 B | googlevideo CDN QUIC + Kyber key-share #2 |
|
|
39
|
+
| `quic_gv_rr2` | `quic_gv_rr2.bin` | 1200 B | googlevideo CDN QUIC (rr2 snapshot) |
|
|
40
|
+
| `quic_initial` | `quic_initial.bin` | 1200 B | generic QUIC Initial (zapret2 default) |
|
|
41
|
+
|
|
42
|
+
## UDP voice / STUN blobs
|
|
43
|
+
|
|
44
|
+
| Alias | File | Size | Source / note |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| `discord_udp` | `discord_udp.bin` | 1200 B | Flowseal ACTIVE_DISCORD_UDP.bin — Discord voice IP-discovery/media |
|
|
47
|
+
| `discord_ipdisc` | `discord_ipdisc.bin` | 74 B | Discord IP-discovery-with-port (70 B discovery) |
|
|
48
|
+
| `game_udp` | `game_udp.bin` | 1250 B | Flowseal ACTIVE_GAME_UDP.bin — game UDP fake |
|
|
49
|
+
| `stun` | `stun.bin` | 100 B | STUN binding request (Flowseal) |
|
|
50
|
+
| `stun2` | `stun2.bin` | 120 B | STUN variant 2 (Flowseal) |
|
|
51
|
+
|
|
52
|
+
## Other
|
|
53
|
+
|
|
54
|
+
| Alias | File | Size | Source / note |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| `wireguard_init` | `wireguard_init.bin` | 148 B | WireGuard handshake initiation |
|
|
57
|
+
| `http_iana` | `http_iana.bin` | 427 B | fake HTTP GET to www.iana.org |
|
|
58
|
+
|
|
59
|
+
## New blobs (2026-08)
|
|
60
|
+
|
|
61
|
+
Added from Flowseal zapret-discord-youtube (2026 tree):
|
|
62
|
+
- **5ka.ru** (`tls_5ka`, `quic_5ka`) — Пятёрочка (X5 Retail), россия, часто под РКН-фильтрацией.
|
|
63
|
+
Источник: [PR #16589](https://github.com/Flowseal/zapret-discord-youtube/pull/16589) (merged).
|
|
64
|
+
- **rutube.ru** (`quic_rutube`) — Rutube, российский видеохостинг.
|
|
65
|
+
- **funpay.com / www.cloudflare.com / alfabank.ru** (`quic_funpay`, `quic_cloudflare`,
|
|
66
|
+
`quic_alfabank`) и **funpay.com / www.rzd.ru** (`tls_funpay`, `tls_rzd`) —
|
|
67
|
+
из [PR #16591](https://github.com/Flowseal/zapret-discord-youtube/pull/16591)
|
|
68
|
+
(Hellcat-95, закрыт без мержа; блобы взяты из коммита 8c35287).
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
GET / HTTP/1.1
|
|
2
|
+
Host: www.iana.org
|
|
3
|
+
Connection: keep-alive
|
|
4
|
+
Upgrade-Insecure-Requests: 1
|
|
5
|
+
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4300.0 Safari/537.36
|
|
6
|
+
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
|
|
7
|
+
Accept-Encoding: gzip, deflate
|
|
8
|
+
Accept-Language: en-US,en;q=0.9,ru;q=0.8
|
|
9
|
+
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|