پروژه
ابزار Wireglass
CLI با Rust برای اندازهگیری DNS → TCP → TLS → HTTP/2 → HTTP/3 و UDP (STUN/QUIC) با گزارش صادقانهٔ شکست. v0.2.1 برای Linux، macOS، Windows و اندروید.
- Rust
- DNS
- TLS
- HTTP/3
- QUIC
- STUN
Wireglass یک CLI محلی با Rust است که مسیر واقعی اتصال را طی میکند — DNS → TCP → TLS (ALPN) → HTTP/2 → HTTP/3 — و هر مرحله را بهصورت نتیجهٔ اندازهگیریشده و قابلبازتولید گزارش میکند. از v0.2.0 تشخیص UDP آگاه از پروتکل برای STUN و QUIC هم دارد. هیچ چیز حدس زده یا استنتاج نمیشود؛ هر اندازهگیری ناموفق با خطا و وضعیت دقیقش گزارش میشود.
پاسخ مستقیم
یک دستور، یک هدف، یک گزارش JSON. DNS عمیق (رکورد، TTL، CAA، زنجیرهٔ تفویض، DS/DNSKEY) + اتصال TCP واقعی + handshake TLS (پروتکل، cipher، ALPN، انقضای گواهی) + درخواست HTTP/2 واقعی + handshake QUIC/HTTP-3 واقعی + پروبهای اختیاری UDP برای STUN/QUIC. downgrade پنهان HTTP/3 — تبلیغشده با Alt-Svc اما هرگز واقعاً متصل نشده — صادقانه گزارش میشود. باینری آماده را از Releases بگیر و روی هر URL اجرا کن.
وضعیت (۲۰۲۶-۱۰-۳۱)
- آخرین نسخه: v0.2.1 (۲۰۲۶-۱۰-۳۰) — باینری آماده برای Linux x86_64، macOS ARM64 و Windows x86_64، بهعلاوهٔ APK اندروید.
- فاز ۱: امتیازدهی + «roast» تفسیری روی موتور اندازهگیری فاز ۰. دروازههای شاهد فاز ۱ (G1–G6) در
docs/evidence-plan.mdهنوز باز هستند. - CI (Actions):
cargo fmt+clippy -D warnings(هسته و اپ اندروید)، build + تست روی Linux، macOS و Windows، و یک host check اندروید — رویmainسبز. workflow جدای Release برای هر tag باینریها را میسازد. - مجوز: MIT یا Apache-2.0.
آنچه اندازه میگیرد
- DNS — رکوردهای A/AAAA با TTL واقعی، CAA، زنجیرهٔ تفویض NS/SOA (root → … → zone میزبان)، DS/DNSKEY خام، خطاهای صریح (
hickory-resolver). - TCP — زمان اتصال واقعی به یک آدرس انتخابی؛
--repeat Nپراکندگی را ثبت میکند. - TLS — زمان handshake، نسخهٔ پروتکل، cipher suite، ALPN مذاکرهشده، subject/issuer/expiry گواهی (
rustls+x509-parser). - HTTP/2 — درخواست واقعی روی ALPN مذاکرهشده، با status،
serverوAlt-Svc. - HTTP/3 — handshake QUIC واقعی با ALPN
h3روی پورت واقعی URL؛ تبلیغشده جدا از واقعاً متصلشده. - UDP/STUN — درخواست STUN Binding؛ موفق فقط با پاسخ Binding همبسته با magic cookie، transaction ID و طول درست. تکرارپذیر و چندهدفه.
- UDP/QUIC — پروبهایی که همان handshake HTTP/3 را روی هر host:port اجرا میکنند.
- امتیاز —
score/total، grade، دلیل هر دسته و roast قطعی، در JSON و گزارش HTML.
دانلود (v0.2.1)
| پلتفرم | فایل | حجم |
|---|---|---|
| Linux x86_64 | wireglass-linux-x64 |
10.8 MB |
| macOS ARM64 | wireglass-macos-arm64 |
9.0 MB |
| Windows x86_64 | wireglass-windows-x64.exe |
8.0 MB |
| Android (arm64-v8a) | wireglass-android-arm64-v0.2.1.apk |
7.4 MB |
چکسامهای SHA256 (SHA256SUMS.txt، wireglass-android-SHA256SUMS.txt) و هر دو فایل مجوز همراه هر نسخه هستند.
اندروید پیشنمایش مهندسی است، نه نسخهٔ Play Store: رابط Slint روی همان هستهٔ wireglass::run، minSdk 26 (Android 8)، targetSdk 34، فقط arm64، و فقط مجوز INTERNET. پیشرفت زندهٔ مراحل، لغو، اشتراک با fallback به کلیپبورد، هدفهای اخیر و خروجی «Save JSON» دارد. پوشش دستگاهها جدا پیگیری میشود — بدون شاهد، ادعای پشتیبانی گسترده نمیکنیم.
اجرا
# باینری آماده
chmod +x wireglass-linux-x64 && ./wireglass-linux-x64 https://example.com
# از سورس
cargo run -- https://example.com
cargo run -- https://example.com --compact --timeout 15
cargo run -- https://example.com --html report.html --card card.svg
# تشخیص UDP (برای هدفهای بیشتر فلگ را تکرار کن)
cargo run -- --stun-target stun.l.google.com:19302 --timeout 3 --repeat 3
cargo run -- --quic-target example.com:443 --quic-target example.net:8443
# اثبات کار کردن مسیر QUIC client وقتی UDP/443 بسته است
cargo run --example quic_selfcheck
خروجی JSON روی stdout است (pretty بهصورت پیشفرض). --render FILE گزارش ذخیرهشده را آفلاین دوباره رندر میکند. ایمیج Docker از خود مخزن ساخته میشود (docker build -t wireglass .).
محدودیتهای صادقانه
- DNSSEC: زنجیره و DS/DNSKEY خام گزارش میشوند، اما امضاها بهصورت رمزنگاری اعتبارسنجی نمیشوند (
unsigned·signed_unverified·delegation_signed_no_dnskey). - HTTP/3: فقط handshake QUIC — هنوز درخواست/پاسخ HTTP/3 نیست و گزارش همین را میگوید.
- STUN:
MESSAGE-INTEGRITY/FINGERPRINTاعتبارسنجی نمیشوند؛ TURN خارج از دامنه است. - timeout در UDP ≠ مسدود: timeout یعنی در زمان مقرر پاسخ معتبری از همان endpoint نیامد — هرگز اثبات فیلترینگ نیست. یک آدرس برای هر هدف؛ یک نقطهٔ دید؛ برای اتصال IPv4 ترجیح دارد.
تاریخچهٔ نسخهها
- v0.2.1 (۲۰۲۶-۱۰-۳۰) — سختسازی: اعتبارسنجی سختتر URL/scheme، بدون fallback به
0.0.0.0وقتی DNS شکست میخورد، bind روی IPv6 برای هدفهای IPv6 در HTTP/3، شمارش درست body در HTTP/1.1، لغو تعاونی؛ manifest اندروید فقطINTERNET، «Save JSON»، fallback اشتراک به کلیپبورد؛ CI حالا اپ اندروید را هم پوشش میدهد. - v0.2.0 (۲۰۲۶-۱۰-۲۸) — تشخیص UDP آگاه از پروتکل (
--stun-target،--quic-target)، پروب چندهدفه/چندپورته،udp_measurementsساختیافته، تستهای UDP محلی قطعی؛ پروب HTTP/3 از پورت واقعی URL استفاده میکند. - v0.1.0 (۲۰۲۶-۱۰-۱۳) — فاز ۰: DNS با زنجیرهٔ تفویض و رکوردهای خام DNSSEC، TCP، TLS + ALPN، HTTP/2، handshake QUIC، گزارش JSON + HTML، کارت SVG، امتیاز.
- روی
main، منتشرنشده: رفع stack overflow ویندوز برایcargo run(futureهای boxed + stack بزرگتر برای main thread).
لاگ کامل: CHANGELOG.md.
چرا وجود دارد
بر اساس یادداشتهای رقبا، «خط زمانی» و «گزارش قابلبازتولید» بهتنهایی منحصربهفرد نیستند — http-stat-rs و httptap این کار را میکنند. Wireglass روی ترکیب شرط میبندد: DNS + TLS + HTTP/2 + HTTP/3 عمیق در یک خروجی قابلبازتولید، گزارش صادقانهٔ downgrade پنهان HTTP/3، اندازهگیریهای STUN و QUIC آگاه از پروتکل با دستهبندی ساختیافتهٔ شکست، و یک ابزار Rust تکفایل محلی که دادهات را به هیچ سرویس ثالثی نمیفرستد.
لینکها
- مخزن: https://github.com/BTF-Kabir-2020/wireglass
- نسخهها: https://github.com/BTF-Kabir-2020/wireglass/releases
- مستندات: https://github.com/BTF-Kabir-2020/wireglass/tree/main/docs (اندروید، پیشنیازها، مجوزها، حجم APK، طراحی، دیپلوی)
- CI: https://github.com/BTF-Kabir-2020/wireglass/actions
- evidence plan: https://github.com/BTF-Kabir-2020/wireglass/blob/main/docs/evidence-plan.md
- تغییرات: https://github.com/BTF-Kabir-2020/wireglass/blob/main/CHANGELOG.md