پروژه

ابزار 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 تک‌فایل محلی که داده‌ات را به هیچ سرویس ثالثی نمی‌فرستد.

لینک‌ها