
محلل حركة مرور شبكة عالي الأداء يعتمد على eBPF ومكتوب بلغة Rust.
ayaFlow هو محلل حركة مرور شبكية مبني بلغة Rust + eBPF باستخدام Aya. يشغل وكيلًا واحدًا لكل عقدة لينكس، ويُرفق مصنف TC (تصنيف حركة المرور) عند الدخول والخروج، ويعرض بيانات حركة المرور الحية، وسجلًا تاريخيًا مدعومًا بـ SQLite، ومقاييس Prometheus.
/metrics الخاصة بـ Prometheus.بيئة تشغيل التقاط الحزم لـ ayaFlow مخصصة للينكس فقط. تم تقسيم سير عمل المساهمين عن قصد:
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask build-usercargo xtask check-hostcargo xtask build-ebpfcargo xtask buildcargo xtask run -- --deep-inspectإذا كنت على macOS، استخدم Docker أو جهاز لينكس افتراضي لسير عمل eBPF الكامل. راجع HOW_TO_USE_LOCAL.md لكلا المسارين.
cargo xtask check-host
cargo xtask build
sudo ./target/debug/ayaflow --db-path /tmp/traffic.db
إذا تم حذف --interface، يقوم ayaFlow بالكشف التلقائي عن واجهة المسار الافتراضي من /proc/net/route ويعود إلى eth0 فقط إذا فشل الكشف.
curl http://localhost:3000/api/health
curl http://localhost:3000/api/stats
curl "http://localhost:3000/api/history?limit=5&row_type=raw"
curl http://localhost:3000/metrics
| العلامة | الوصف | الإفتراضي |
|---|---|---|
-i, --interface | الواجهة المراد مراقبتها. احذفها للكشف التلقائي عن واجهة المسار الافتراضي على لينكس. | كشف تلقائي، العودة إلى eth0 |
-p, --port | منفذ خادم API | 3000 |
--db-path | مسار قاعدة بيانات SQLite | traffic.db |
--connection-timeout | تنظيف الاتصالات القديمة بالثواني | 60 |
--data-retention | حذف تلقائي للسجلات الأقدم من N ثانية | معطل |
--aggregation-window | تخزين نوافذ السجل المُجمَّع بدلاً من صفوف الحزم الخام | 0 (وضع خام) |
--allowed-ips | عناوين CIDR المسموح لها بالوصول إلى API | غير مقيد |
-c, --config | مسار ملف التكوين YAML | لا شيء |
-q, --quiet | كتم السجلات غير المتعلقة بالأخطاء | false |
--deep-inspect | تمكين استخراج استعلامات DNS + TLS SNI | false |
--enable-ipv6 | تمكين التقاط حزم IPv6 | false |
--resolve-dns | تمكين بحث DNS العكسي | false |
| المسار | الطريقة | الوصف |
|---|---|---|
/api/health | GET | حالة الصحية، عدادات الحزم، وتكوين التشغيل النشط |
/api/stats | GET | زمن التشغيل، الإنتاجية، العدادات، وتكوين التشغيل النشط |
/api/live | GET | أفضل 50 اتصال نشط حسب عدد الحزم |
/api/history | GET | سجل تاريخي قابل للتصفية مع بيانات ترقيم الصفحات |
/api/stream | WS | إحصائيات حية كل ثانية |
/metrics | GET | تنسيق نص Prometheus |
يدعم /api/history:
limit، offsetstart_time، end_timeprotocolip، src_ip، dst_ipport، src_port، dst_portdirectiondomainrow_type=raw|aggregatedمثال:
curl "http://localhost:3000/api/history?limit=20&protocol=TCP&dst_port=443&row_type=raw"
ayaflow/ بيئة تشغيل المستخدم، API، التخزين، واختبارات آمنة على المضيف
ayaflow-common/ أنواع الحزم/الأحداث المشتركة بين المستخدم و eBPF
ayaflow-ebpf/ مصنف TC وبرنامج التقاط الحمولة
xtask/ أدوات البناء وسير العمل المساعدة
k8s/ قوائم Kubernetes
monitoring/ أصول Prometheus وGrafana
شجرة src/ المكررة على المستوى الجذر هي قديمة وليست جزءًا من مسار البناء المدعوم. استخدم crate ayaflow/ وأوامر cargo xtask أعلاه.
سير العمل الآمن على المضيف يعمل الآن على جهاز التطوير هذا بنظام macOS مع:
cargo test -p ayaflow-commoncargo test -p ayaflowcargo xtask check-hostلا يزال التحقق من صحة بيئة التشغيل على لينكس فقط يحتاج إلى التنفيذ على مضيف لينكس أو مشغل CI مع تثبيت أدوات eBPF.
يستخدم هذا المشروع ثلاثة تراخيص مختلفة اعتمادًا على المكون:
الوكيل في مساحة المستخدم والمكتبات المشتركة (ayaflow و ayaflow-common) مرخصة بشكل مزدوج بموجب أحد:
حسب اختيارك.
مكونات نواة eBPF (ayaflow-ebpf) مرخصة بدقة بموجب GNU General Public License v2.0 (GPL) لضمان التوافق مع مدقق نواة لينكس.