
network-monitor v0.7.5
أداة مراقبة اتصالات الشبكة في الوقت الفعلي مبنية بلغة Rust وGTK4، تعرض الاتصالات النشطة مع إحصائيات الإدخال/الإخراج المباشرة في واجهة رسومية حديثة.
مراقب الشبكة

أداة مراقبة اتصالات الشبكة في الوقت الفعلي مبنية باستخدام Rust وGTK4، تعرض الاتصالات النشطة مع إحصائيات الإدخال/الإخراج الحية في واجهة رسومية حديثة.
الميزات
- مراقبة في الوقت الفعلي: تراقب باستمرار اتصالات الشبكة النشطة
- إحصائيات الإدخال/الإخراج: تعرض معدلات الرفع/التنزيل الحية لكل اتصال
- تحديد العملية: تعرض البرنامج ومعرف العملية (PID) المرتبط بكل اتصال
- واجهة مستخدم GTK4 حديثة: واجهة رسومية نظيفة ومتجاوبة مع تصميم Libadwaita
- واجهة طرفية (TUI): واجهة طرفية تفاعلية بنفس قدرات المراقبة
- تحليل العناوين: يبسط العناوين الشائعة (localhost, any, mDNS)
- تصفية الاتصالات: يفلتر اتصالات localhost لإخراج أنظف
- تكامل مع جنوم: دعم مناسب لفئة WM للتثبيت في الرصيف والتكامل مع سطح المكتب
- تثبيت مزدوج: يدعم التثبيت المحلي للمستخدم وعلى مستوى النظام
- معالجة أخطاء قوية: استرداد شامل للأخطاء مع إرشادات إعداد واضحة
- محسّن للأداء: تخزين مؤقت للعملية وتخطيط لتحسين الاستجابة
المتطلبات
- Rust 1.70+ (إصدار 2021)
- مكتبات تطوير GTK4
- مكتبات تطوير Libadwaita
- نظام لينكس مع نظام ملفات
/proc - Linux 5.8+ (لإمكانيات eBPF التفصيلية)
- Rust الإصدار الليلي و
bpf-linker(لتجميع eBPF)
التثبيت على Ubuntu/Debian:
sudo apt update
sudo apt install libgtk-4-dev libadwaita-1-dev
التثبيت على Fedora:
sudo dnf install gtk4-devel libadwaita-devel
التثبيت
الطريقة 1: التثبيت من المصدر مع تكامل سطح المكتب
- استنساخ المستودع:
git clone <repository-url>
cd network-monitor
- التثبيت محليًا (لا يتطلب صلاحيات sudo):
./scripts/install.sh
- أو التثبيت على مستوى النظام (يتطلب صلاحيات sudo):
sudo ./scripts/install.sh
سينفذ نص التثبيت ما يلي:
- بناء كل من ثنائيات GTK4 و TUI (وضع التصحيح للمحلي، والإصدار للنظام)
- تثبيت الثنائيات في
~/.local/bin/(محليًا) أو/usr/local/bin/(على مستوى النظام) - تثبيت ملف سطح المكتب مع فئة WM المناسبة لتثبيت رصيف جنوم
- تثبيت الأيقونات في أدلة الأيقونات المناسبة
- تحديث ذاكرة التخزين المؤقت للأيقونات وقاعدة بيانات سطح المكتب
- ضمان إمكانية تثبيت التطبيق على رصيف/لوحة معلومات جنوم
الطريقة 2: البناء والتشغيل مباشرة
- استنساخ المستودع:
git clone <repository-url>
cd network-monitor
- بناء وتشغيل:
cargo run
أو بناء في وضع الإصدار:
cargo build --release
./target/release/network-monitor
الطريقة 3: بناء وتشغيل نسخة TUI
- استنساخ المستودع:
git clone <repository-url>
cd network-monitor
- بناء وتشغيل TUI:
cargo build --bin nmt
./target/debug/nmt
أو بناء في وضع الإصدار:
cargo build --release --bin nmt
./target/release/nmt
إلغاء التثبيت
إزالة النسخة المثبتة
إزالة التثبيت المحلي:
./scripts/uninstall.sh
إزالة على مستوى النظام (تتطلب صلاحيات sudo):
sudo ./scripts/uninstall.sh
سينفذ نص إلغاء التثبيت إزالة الثنائي وملف سطح المكتب والأيقونات من المواقع المناسبة وتحديث جميع ذاكرات التخزين المؤقت ذات الصلة.
الاستخدام
الواجهة الرسومية GTK4
تشغيل تطبيق مراقب الشبكة:
cargo run
سيفتح التطبيق نافذة GTK4 تعرض:
- العملية (ID): اسم العملية ومعرفها PID مع تعيين دقيق من المقبس إلى العملية
- البروتوكول: بروتوكول TCP/UDP
- المصدر: نقطة النهاية المحلية (محللة إلى تنسيق قابل للقراءة)
- الوجهة: نقطة النهاية البعيدة (محللة إلى تنسيق قابل للقراءة)
- الحالة: حالة الاتصال (مؤسس، يستمع، إلخ)
- الإرسال (TX): معدل الرفع المحسوب من إحصائيات الإدخال/الإخراج للعملية
- الاستلام (RX): معدل التنزيل المحسوب من إحصائيات الإدخال/الإخراج للعملية
- المسار: مسار الأمر الكامل والوسائط من
/proc/[pid]/cmdline
الواجهة الطرفية (TUI)

تشغيل الواجهة الطرفية:
cargo run --bin nmt
توفر الواجهة الطرفية نفس قدرات المراقبة في واجهة طرفية تفاعلية:
مفاتيح التحكم:
q- إنهاء التطبيقr- تحديث الاتصالات يدويًاa- تبديل التحديث التلقائي (فترات 2 ثانية)↑/↓- التنقل عبر الاتصالات←/→- التمرير أفقيًا عبر الجدول1-8- الفرز حسب الأعمدة (العملية (ID)، البروتوكول، المصدر، الوجهة، الحالة، الإرسال، الاستلام، المسار)
الميزات:
- مراقبة الاتصالات في الوقت الفعلي مع التحديث التلقائي
- أعمدة قابلة للفرز مع مؤشرات مرئية
- التمرير الأفقي للجداول العريضة
- تحديد حجم الأعمدة الذكي - يحصل العمود الأخير على العرض المتبقي الكامل
- بروتوكولات ملونة (TCP/TCP6 بالأخضر، UDP/UDP6 بالأصفر)
- تمييز الاتصال النشط
- معلومات العملية ومعرفها PID
- عرض معدل الإدخال/الإخراج الحي
- نفس ترتيب الأعمدة كنسخة GTK4 للاتساق
تحليل العناوين
يتم تبسيط العناوين الشائعة لسهولة القراءة:
0.0.0.0:*أو*:*←ANY127.0.0.1:*أو[::1]:*←LOCALHOST224.0.0.251:*←MDNS
كيف يعمل
خلفية eBPF (مدفوعة بالأحداث)
يستخدم التطبيق kprobes على مستوى النواة (tcp_v4_connect, tcp_v6_connect, tcp_close,
inet_csk_accept) بدلاً من استقصاء /proc/net. يوفر هذا:
- مدفوعة بالأحداث: تسليم الأحداث دون ميلي ثانية، بدون حمل استقصاء (~1-3% CPU)
- PID مباشر: يتم التقاطه عند نقطة الفحص عبر
bpf_get_current_pid_tgid()، بدون مسح inode - اتصالات قصيرة العمر: لا تفوت أبدًا بين فترات الاستقصاء
وضع eBPF
توفر خلفية eBPF مراقبة اتصالات مدفوعة بالأحداث مع حمل أقل وأحداث في الوقت الفعلي، مقارنة بطريقة الاستقصاء الافتراضية /proc/net. يمكنها التقاط اتصالات قصيرة العمر قد يفوتها الاستقصاء.
المتطلبات الأساسية:
rustup toolchain install nightly
cargo install bpf-linker
البناء والتشغيل:
cargo build
التشغيل كمستخدم عادي (يتطلب نواة 5.8+):
منح الصلاحيات المطلوبة لنظام Linux للثنائي مرة واحدة:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor
./target/debug/network-monitor
أو لنسخة TUI:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt
./target/debug/nmt
للبناءات الإصدارية، اضبط المسار وفقًا لذلك:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor
سيخرج التطبيق برسالة إعداد إذا كان eBPF غير متاح (صلاحيات مفقودة أو نواة غير مدعومة).
البنية
- GTK4: إطار عمل واجهة مستخدم حديث عبر المنصات
- Libadwaita: مكونات واجهة مستخدم على نمط جنوم
- Tokio: وقت تشغيل غير متزامن للعمليات المتزامنة
- Aya + eBPF: تتبع اتصالات على مستوى النواة مع kprobes للأحداث في الوقت الفعلي
- PID مباشر: تحديد العملية عبر
bpf_get_current_pid_tgid()عند نقطة الفحص - استدعاءات النظام: قراءة مباشرة لـ
/proc/[pid]/ioلإحصائيات الإدخال/الإخراج - معالجة الأخطاء: أنواع أخطاء شاملة مع استرداد لطيف باستخدام
thiserror - التخزين المؤقت للأداء: تخزين مؤقت لتخطيط واجهة المستخدم للأداء الأمثل
حزم Linux
التبرعات
إذا وجدت هذا المشروع مفيدًا، يرجى التفكير في التبرع لدعم تطويره.
- مونيرو:
88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv - بيتكوين:
bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025
الترخيص
هذا المشروع مفتوح المصدر. راجع ملف LICENSE للتفاصيل.