blockchecks
Asynchronous DPI (Deep Packet Inspection) strategy testing framework for nfqws2 / zapret2.
It runs thousands of desync strategies against target domains inside isolated network namespaces, using a browser-grade TLS fingerprint (JA4 via curl_cffi), and reports which combinations actually work on a given network. Results are stored in SQLite and can be exported to ready-to-use nfqws2 configuration files for Keenetic / OpenWrt / Linux routers.
Features
- Fast: ~1 test/sec (33× faster than the reference
blockcheck.sh) via asyncio + a reused netns pool. - Accurate: browser-grade JA4 TLS fingerprint (Chrome BoringSSL), content validation, DPI fake-detection.
- TCP + UDP: TCP strategy families, HTTP :80, QUIC/HTTP3, and Discord Voice UDP endpoint discovery (STUN + IP Discovery).
- Resilient: checkpoint/resume, SQLite state, adaptive priority queue.
- Tooling: static strategy validator (offline, 9+ rules), custom Lua registry, MCP server for LLM agents.
- Portable: installs on x86_64, arm64 and armv7l (Raspberry Pi 2+) without compiling native dependencies.
Requirements
- Linux with root (needed for network namespaces + iptables)
- Python 3.10+
- nfqws2 / zapret2 (auto-fetched on first run)
Quick start
pip install blockchecks
# Smoke test — 20 strategies, adaptive queue + preflight ON by default
sudo bs scan -d discord.com --profile smoke --generate
# Full scan — ~30 strategies against discord.com
sudo bs scan -d discord.com --generate --parallel 4
# Resume after interruption (checkpoint/resume)
sudo bs scan -d discord.com --generate --resume
# Long-term mass campaign (20h series bundle)
sudo bs full --profile 20h
Run profiles (--profile smoke|fast|20h) bundle common flag sets for
scan, pair, and full. Protective features are ON by default — disable
with --no-adaptive, --no-preflight (or use --quick for prolog-only),
--no-ech, --no-wssize.
Export a router config
# default: ~/.local/share/blockcheckS/export/nfqws2_<ts>.conf (+ raw, user.list)
bc-nfconf --db logs/run.db --out-dir /path/to/out
# optional: add an IP filter from the DNS cache (no DNS needed on the router)
bc-nfconf --db logs/run.db --out-dir /path/to/out --ipset
Documentation
License
MIT — see LICENSE.
Disclaimer
This software is an open-source analytical tool for educational, academic and network-research purposes, intended for network administrators and systems engineers to study DPI behaviors. Use entirely at your own risk.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file blockchecks-1.4.0.tar.gz.
File metadata
- Download URL: blockchecks-1.4.0.tar.gz
- Upload date:
- Size: 461.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc6ea5deb21e3c384eace2ac4b9c4c77c6305ee375244ca82ba40484f8745aba
|
|
| MD5 |
fde68a74752bc1cb996b7a9fdaed5860
|
|
| BLAKE2b-256 |
cc5169c1eba2b61341fb6b84ca9d94cdf8180e8f8699141a3a06c145475bd136
|
File details
Details for the file blockchecks-1.4.0-py3-none-any.whl.
File metadata
- Download URL: blockchecks-1.4.0-py3-none-any.whl
- Upload date:
- Size: 496.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b431c7f7615b993f09969d4941ca03148ae4a0ef6979280e6303958edc9235d
|
|
| MD5 |
d4d924f598592add5148475affc7cec9
|
|
| BLAKE2b-256 |
a21a09d8b4794bcfc3c67622a7736188fd45dae9490eb298c384bc24162ac2b2
|