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

أداة لمراقبة اتصالات الشبكة في الوقت الفعلي مبنية باستخدام Rust وGTK4، تعرض الاتصالات النشطة مع إحصائيات الإدخال/الإخراج المباشرة في واجهة رسومية حديثة.
الميزات
- المراقبة في الوقت الفعلي: يراقب باستمرار اتصالات الشبكة النشطة
- إحصائيات الإدخال/الإخراج: يعرض معدلات الرفع/التنزيل المباشرة لكل اتصال
- تحديد العمليات: يعرض البرنامج ومعرّف العملية (PID) المرتبط بكل اتصال
- إجراءات العمليات: انقر بزر الفأرة الأيمن على صف لنسخ قيمته/أمره أو لإنهاء العملية التي تملك الاتصال (إنهاء أو إنهاء قسري، مع تأكيد)
- تحديد مستمر: يحتفظ الصف المحدد بتمييزه عبر عمليات التحديث ويظهر في شريط الحالة
- واجهة GTK4 حديثة: واجهة رسومية نظيفة وسريعة الاستجابة بتنسيق Libadwaita
- واجهة الطرفية (TUI): واجهة طرفية تفاعلية بنفس إمكانيات المراقبة
- تحليل العناوين: يبسّط العناوين الشائعة (localhost، any، mDNS)
- تصفية الاتصالات: يستبعد اتصالات localhost للحصول على مخرجات أنظف
- تكامل مع GNOME: دعم صحيح لفئة WM لتثبيت التطبيق في الشريط والتكامل مع سطح المكتب
- تثبيت مزدوج: يدعم التثبيت المحلي للمستخدم والتثبيت على مستوى النظام
- معالجة قوية للأخطاء: استرداد شامل من الأخطاء مع إرشادات إعداد واضحة
- محسّن للأداء: تخزين مؤقت للعمليات والتخطيط لتحسين سرعة الاستجابة
المتطلبات
- Rust 1.70+ (إصدار 2021)
- مكتبات تطوير GTK4
- مكتبات تطوير Libadwaita
- نظام Linux مع نظام ملفات
/proc - Linux 5.8+ (لقدرات eBPF الدقيقة)
- Rust nightly و
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 (وضع debug للمحلي، وrelease للنظام)
- تثبيت الملفات التنفيذية في
~/.local/bin/(محلي) أو/usr/local/bin/(على مستوى النظام) - تثبيت ملف سطح المكتب مع فئة WM الصحيحة لتثبيت التطبيق في شريط GNOME
- تثبيت الأيقونات في أدلة الأيقونات المناسبة
- تحديث ذاكرة الأيقونات المؤقتة وقاعدة بيانات سطح المكتب
- ضمان إمكانية تثبيت التطبيق في شريط/لوحة GNOME
الطريقة 2: البناء والتشغيل مباشرة
- استنسخ المستودع:
git clone <repository-url>
cd network-monitor
- البناء والتشغيل:
cargo run
أو البناء في وضع release:
cargo build --release
./target/release/network-monitor
الطريقة 3: بناء وتشغيل إصدار TUI
- استنسخ المستودع:
git clone <repository-url>
cd network-monitor
- بناء وتشغيل TUI:
cargo build --bin nmt
./target/debug/nmt
أو البناء في وضع release:
cargo build --release --bin nmt
./target/release/nmt
إلغاء التثبيت
إزالة الإصدار المثبّت
إزالة التثبيت المحلي:
./scripts/uninstall.sh
الإزالة على مستوى النظام (تتطلب sudo):
sudo ./scripts/uninstall.sh
سيقوم سكربت إلغاء التثبيت بإزالة الملف التنفيذي وملف سطح المكتب والأيقونات من المواقع المناسبة وتحديث جميع ذاكرات التخزين المؤقت ذات الصلة.
الاستخدام
واجهة GTK4 الرسومية
شغّل تطبيق مراقب الشبكة:
cargo run
سيفتح التطبيق نافذة GTK4 تعرض:
- Process(ID): اسم العملية ومعرّفها (PID) مع ربط دقيق بين المقبس والعملية
- Protocol: بروتوكول TCP/UDP
- Source: نقطة النهاية المحلية (محلّلة إلى صيغة مقروءة)
- Destination: نقطة النهاية البعيدة (محلّلة إلى صيغة مقروءة)
- Status: حالة الاتصال (ESTABLISHED، LISTEN، إلخ)
- TX: معدل الرفع المحسوب من إحصائيات الإدخال/الإخراج للعملية
- RX: معدل التنزيل المحسوب من إحصائيات الإدخال/الإخراج للعملية
- Path: مسار الأمر الكامل والوسائط من
/proc/[pid]/cmdline
إجراءات الصف
- النقر الأيسر: تحديد صف (يظهر أيضًا في الشريط السفلي)
- النقر الأيمن: فتح قائمة السياق مع Copy Value وCopy Command و Kill "process" (PID)، والتي تسأل عما إذا كنت تريد الإنهاء (SIGTERM) أو الإنهاء القسري (SIGKILL)
- Delete: إنهاء الصف المحدد حاليًا (نفس مربع حوار التأكيد)
- Ctrl+C: نسخ محتوى الخلية
- زر التحديث في شريط العنوان: التحديث فورًا (تُحدَّث القائمة أيضًا كل 3 ثوانٍ)
واجهة الطرفية (TUI)

شغّل واجهة الطرفية:
cargo run --bin nmt
توفر واجهة TUI نفس إمكانيات المراقبة في واجهة طرفية تفاعلية:
عناصر التحكم بالمفاتيح:
q- الخروج من التطبيقr- تبديل تحليل أسماء المضيفينR- تحديث الاتصالات يدويًاa- تبديل التحديث التلقائي (كل ثانيتين)↑/↓- التنقل بين الاتصالات←/→- التمرير الأفقي في الجدولk/ النقر الأيمن - فتح قائمة الإنهاء لصف (إنهاء / إنهاء قسري / إلغاء)1-8- الترتيب حسب الأعمدة (Process(ID)، Protocol، Source، Destination، Status، TX، RX، Path)
الفأرة: النقر الأيسر يحدد صفًا، والنقر الأيمن يحدده ويفتح قائمة الإنهاء.
الميزات:
- مراقبة الاتصالات في الوقت الفعلي مع التحديث التلقائي
- أعمدة قابلة للترتيب مع مؤشرات مرئية
- تمرير أفقي للجداول العريضة
- تحجيم ذكي للأعمدة - يحصل العمود الأخير على كامل العرض المتبقي
- بروتوكولات مرمّزة بالألوان (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% من المعالج)
- 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
لإصدارات release، عدّل المسار وفقًا لذلك:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor
سيخرج التطبيق برسالة إعداد إذا كان eBPF غير متاح (قدرات مفقودة أو نواة غير مدعومة).
البنية
- GTK4: إطار عمل رسومي حديث متعدد المنصات
- Libadwaita: مكونات واجهة بأسلوب GNOME
- Tokio: بيئة تشغيل غير متزامنة للعمليات المتزامنة
- Aya + eBPF: تتبع الاتصالات على مستوى النواة باستخدام kprobes للأحداث في الوقت الفعلي
- PID مباشر: تحديد العمليات عبر
bpf_get_current_pid_tgid()عند نقطة الفحص - استدعاءات النظام: قراءة مباشرة لـ
/proc/[pid]/ioلإحصائيات الإدخال/الإخراج - معالجة الأخطاء: أنواع أخطاء شاملة مع استرداد سلس باستخدام
thiserror - تخزين مؤقت للأداء: تخزين مؤقت لتخطيط الواجهة للحصول على أداء مثالي