
أداة مراقبة اتصالات الشبكة في الوقت الفعلي مبنية بلغة Rust وGTK4، تعرض الاتصالات النشطة مع إحصائيات الإدخال/الإخراج المباشرة في واجهة رسومية حديثة.
# مراقب الشبكة  أداة لمراقبة اتصالات الشبكة في الوقت الفعلي مبنية باستخدام Rust وGTK4، تعرض الاتصالات النشطة مع إحصائيات الإدخال/الإخراج المباشرة في واجهة رسومية حديثة. [](https://github.com/grigio/network-monitor/actions/workflows/rust.yml) [](https://deps.rs/repo/github/grigio/network-monitor) ## الميزات - **المراقبة في الوقت الفعلي**: يراقب باستمرار اتصالات الشبكة النشطة - **إحصائيات الإدخال/الإخراج**: يعرض معدلات الرفع/التنزيل المباشرة لكل اتصال - **تحديد العمليات**: يعرض البرنامج ومعرّف العملية (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: ```bash sudo apt update sudo apt install libgtk-4-dev libadwaita-1-dev ``` ### التثبيت على Fedora: ```bash sudo dnf install gtk4-devel libadwaita-devel ``` ## التثبيت ### الطريقة 1: التثبيت من المصدر مع التكامل مع سطح المكتب 1. استنسخ المستودع: ```bash git clone <repository-url> cd network-monitor ``` 2. ثبّت محليًا (لا يتطلب sudo): ```bash ./scripts/install.sh ``` 3. أو ثبّت على مستوى النظام (يتطلب sudo): ```bash sudo ./scripts/install.sh ``` سيقوم سكربت التثبيت بما يلي: - بناء كلا الملفين التنفيذيين GTK4 وTUI (وضع debug للمحلي، وrelease للنظام) - تثبيت الملفات التنفيذية في `~/.local/bin/` (محلي) أو `/usr/local/bin/` (على مستوى النظام) - تثبيت ملف سطح المكتب مع فئة WM الصحيحة لتثبيت التطبيق في شريط GNOME - تثبيت الأيقونات في أدلة الأيقونات المناسبة - تحديث ذاكرة الأيقونات المؤقتة وقاعدة بيانات سطح المكتب - ضمان إمكانية تثبيت التطبيق في شريط/لوحة GNOME ### الطريقة 2: البناء والتشغيل مباشرة 1. استنسخ المستودع: ```bash git clone <repository-url> cd network-monitor ``` 2. البناء والتشغيل: ```bash cargo run ``` أو البناء في وضع release: ```bash cargo build --release ./target/release/network-monitor ``` ### الطريقة 3: بناء وتشغيل إصدار TUI 1. استنسخ المستودع: ```bash git clone <repository-url> cd network-monitor ``` 2. بناء وتشغيل TUI: ```bash cargo build --bin nmt ./target/debug/nmt ``` أو البناء في وضع release: ```bash cargo build --release --bin nmt ./target/release/nmt ``` ## إلغاء التثبيت ### إزالة الإصدار المثبّت إزالة التثبيت المحلي: ```bash ./scripts/uninstall.sh ``` الإزالة على مستوى النظام (تتطلب sudo): ```bash sudo ./scripts/uninstall.sh ``` سيقوم سكربت إلغاء التثبيت بإزالة الملف التنفيذي وملف سطح المكتب والأيقونات من المواقع المناسبة وتحديث جميع ذاكرات التخزين المؤقت ذات الصلة. ## الاستخدام ### واجهة GTK4 الرسومية شغّل تطبيق مراقب الشبكة: ```bash 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)  شغّل واجهة الطرفية: ```bash 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:*` أو `*:*` → `ANY` - `127.0.0.1:*` أو `[::1]:*` → `LOCALHOST` - `224.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`. يمكنها التقاط الاتصالات قصيرة العمر التي قد يفوتها الاستقصاء. **المتطلبات المسبقة:** ```bash rustup toolchain install nightly cargo install bpf-linker ``` **البناء والتشغيل:** ```bash cargo build ``` **التشغيل كمستخدم عادي** (يتطلب نواة 5.8+): امنح قدرات Linux المطلوبة للملف التنفيذي مرة واحدة: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor ./target/debug/network-monitor ``` أو لإصدار TUI: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt ./target/debug/nmt ``` لإصدارات release، عدّل المسار وفقًا لذلك: ```bash 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` - **تخزين مؤقت للأداء**: تخزين مؤقت لتخطيط الواجهة للحصول على أداء مثالي ## حزم Linux [](https://repology.org/project/network-monitor/versions) ## التبرعات إذا وجدت هذا المشروع مفيدًا، فيرجى التفكير في تقديم تبرع لدعم تطويره. - **Monero**: `88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv` - **Bitcoin**: `bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025` ## الترخيص هذا المشروع مفتوح المصدر. راجع ملف LICENSE للتفاصيل.