
rustnet v1.6.0
مراقبة الشبكة لكل عملية في الطرفية الخاصة بك مع فحص عميق للحزم. متعدد المنصات، معزول.
RustNet
مراقبة شبكة لكل عملية على حدة في طرفيتك: اتصالات TCP وUDP وQUIC حية مع فحص عميق للحزم، معزولة افتراضيًا.
رؤية لحظية لكل اتصال يصدره جهازك، ومن يملكه، وبأي بروتوكول يتحدث. لا حاجة لـ tcpdump أو تمرير X11 أو أنابيب بصلاحيات الجذر (root piping).
الميزات
- إسناد لكل عملية على حدة: كل اتصال TCP وUDP وQUIC يُربط بالعملية المالكة له، عبر eBPF على Linux، وPKTAP على macOS، وETW مع تراجع تلقائي إلى IP Helper على Windows، وواجهات برمجة أصلية على FreeBSD. تتضمن التفاصيل PID والملف التنفيذي وأسماء المستخدم/المجموعة ودرجة الثقة في المطابقة وسلسلة عمليات أصل محدودة السقف على كل منصة. لا يمكن لـ Wireshark وtcpdump فعل ذلك؛ ولا يمكن لـ
netstat/ssإظهار الحالة الحية. - فحص عميق للحزم: التعرف على HTTP وHTTPS/TLS مع SNI وDNS وSSH وFTP وQUIC وMQTT وBitTorrent وSTUN وNTP وmDNS وLLMNR وDHCP وSNMP وSSDP وNetBIOS، دون محللات خارجية.
- تصدير PCAPNG مُعلَّق: يكتب
--pcapng-exportملف التقاط جاهزًا لـ Wireshark مع تضمين العملية وPID والاتجاه وDPI/SNI وGeoIP كتعليقات لكل حزمة. افتحه في Wireshark وستجد كل حزمة تسمّي عمليتها المالكة بالفعل، دون أي معالجة لاحقة. يتوفر أيضًا التصدير الكلاسيكي--pcap-exportمع ملف JSONL جانبي للربط دون اتصال. - عزل أمني: Landlock (Linux 5.13+)، وSeatbelt (macOS)، وإسقاط امتيازات الرمز المميز + حظر العمليات الفرعية عبر كائن الوظيفة (Windows). تُسقَط الامتيازات فورًا بعد تهيئة libpcap. انظر SECURITY.md.
- تحليلات الشبكة: أزمنة ذهاب وإياب لحظية لاتصالات TCP ومصافحات QUIC واستجابات DNS وصدى ICMP، بالإضافة إلى كشف إعادة إرسال TCP والحزم خارج الترتيب وإعادة الإرسال السريع.
- دورة حياة اتصال ذكية: مهلات مدركة للبروتوكول مع مؤشرات تقادم بالأبيض ← الأصفر ← الأحمر. بدّل بـ
tلإبقاء الاتصالات التاريخية (المغلقة) مرئية للتحليل الجنائي. - تصفية بأسلوب Vim/fzf:
port:وsrc:وdst:وsni:وprocess:وstate:وproto:، بالإضافة إلى التعبيرات النمطية عبر/(?i)pattern/. - إثراء GeoIP: بحث عن الدول عبر MaxMind GeoLite2 المحلي. دون أي استدعاءات شبكة.
- تحديد أجهزة الشبكة المحلية: عنوان MAC والمورّد (من قاعدة بيانات IEEE OUI المدمجة) للأقران على نفس الرابط والبوابة، تُكتسب سلبيًا من حركة ARP وتُعرض في لوحة التفاصيل.
- إسناد Kubernetes (ميزة
kubernetesاختيارية): اتصالات مربوطة بالبود والنطاق والحاوية الخاصة بها، وتظهر في لوحة التفاصيل وتصديرات JSON/PCAPNG ومرشحاتpod:وns:وcontainer:. مفعّلة في صورة Docker الرسمية؛ وعلى الكتلة، استخدم إضافة kubectl-rustnet لتشغيله كبود تصحيح مؤقت. انظر USAGE.md. - متعدد المنصات: Linux وmacOS وWindows وFreeBSD.
لماذا RustNet؟
يسد RustNet الفجوة بين أدوات الاتصال البسيطة (netstat، ss) ومحللات الحزم (Wireshark، tcpdump):
- إسناد العملية: اعرف أي تطبيق يملك كل اتصال. لا يمكن لـ Wireshark توفير ذلك لأنه يرى الحزم فقط، لا المقابس (sockets).
- عرض متمركز حول الاتصال: تتبّع الحالات وعرض النطاق والبروتوكولات لكل اتصال في الوقت الفعلي
- متوافق مع SSH: تعمل واجهة TUI عبر SSH بحيث يمكنك رؤية ما يحدث على خادم بعيد بسرعة دون تمرير X11 أو التقاط حركة المرور
يكمل RustNet أدوات التقاط الحزم. استخدم RustNet لرؤية ما الذي يُنشئ الاتصالات. للفحص المباشر عبر Wireshark، يكتب --pcapng-export تعليقات حزم حية بأفضل جهد مع سياق PID/العملية. وللربط عند التنظيف، استخدم --pcap-export مع الملف الجانبي JSONL وسكربت scripts/pcap_enrich.py الاختياري. انظر تصدير PCAP ومقارنة مع الأدوات المشابهة للتفاصيل.
مبني على ratatui وlibpcap وeBPF (libbpf-rs) وDashMap وcrossbeam وring وMaxMind GeoLite2 وLandlock. انظر ARCHITECTURE.md للتفصيل الكامل للتبعيات.
تعريف العملية المحسّن عبر eBPF (الافتراضي على Linux)
يستخدم RustNet برامج eBPF الخاصة بالنواة افتراضيًا على Linux لتحسين الأداء وتحديد العمليات بتكلفة أقل.
أسماء العمليات:
- يسجّل eBPF معرف TGID واسم
commلقائد مجموعة العمليات (حقل نواة محدود بـ 16 حرفًا) بدلًا من اسم الخيط المنفّذ، بحيث تعرض التطبيقات متعددة الخيوط اسم العملية الرئيسية بدلًا من أسماء الخيوط مثل "Socket Thread" - ثم يعيد RustNet تحليل الاسم الحالي عبر
/proc/<tgid>/comm، ويستعيد الأسماء المقتطعة منcommمن اسم ملف الملف التنفيذي (مثلًا "chromium-browse" تصبح "chromium-browser")، ويحلل مسار الملف التنفيذي الكامل المعروض في عرض التفاصيل - العمليات قصيرة العمر التي تنتهي قبل تشغيل هذا الإثراء تحتفظ بالاسم المكوّن من 16 حرفًا الذي سجّله eBPF
سلوك التراجع:
- عند فشل تحميل eBPF أو عدم توفر الصلاحيات الكافية، يتراجع RustNet تلقائيًا إلى تحديد العمليات القياسي المعتمد على procfs
- يحل الوضع القياسي الأسماء بالطريقة نفسها عبر مسح procfs، لكن مع حمل أعلى على وحدة المعالجة
- eBPF مفعّل افتراضيًا؛ لا حاجة لأعلام بناء خاصة
لتعطيل eBPF واستخدام وضع procfs فقط، ابنِ باستخدام:
cargo build --release --no-default-features
انظر ARCHITECTURE.md للمعلومات التقنية.
مراقبة نشاط العمليات والواجهات
يجمع RustNet بين محاسبة حركة المرور على مستوى العملية وإحصاءات واجهات الشبكة اللحظية:
- تبويب النظرة العامة: يعرض الواجهات النشطة مع المعدلات والأخطاء والإسقاطات الحالية
- تبويب النشاط (اضغط
3): يرتب العمليات حسب الصادر (TX) أو الوارد (RX)، بما في ذلك حركة المرور المحتفَظ بها والمتجددة والمعدلات والحصص والاتصالات والوجهات - خطة عمل أمنية: رتب حسب الصادر، وحدد أي مُرسِل غير متوقع، ثم افحص أقرب نظير بعيد له وحركة مروره المحتفَظ بها حتى بعد إغلاق الاتصال
- تفاصيل الواجهة (اضغط
iفي تبويب النشاط): تعرض المقاييس الشاملة الأصلية لكل واجهة - متعدد المنصات: Linux (sysfs) وmacOS/FreeBSD (getifaddrs) وWindows (واجهة GetIfTable2 API)
- تصفية ذكية: يستبعد Windows تلقائيًا المحولات الافتراضية/الترشيحية
انظر USAGE.md لتوثيق مفصّل حول تفسير إحصاءات الواجهة والسلوك الخاص بكل منصة.
المقاييس المتاحة:
- إجمالي البايتات والحزم (RX/TX)
- عدادات الأخطاء (استقبال وإرسال)
- إسقاطات الحزم (تجاوز سعة الطوابير)
- التصادمات (موروثة، ونادرًا ما تُستخدم على الشبكات الحديثة)
تُجمع الإحصاءات كل ثانيتين في خيط خلفي بتأثير ضئيل على الأداء.
لقطات الشاشة
| النظرة العامة جدول الاتصالات مع إحصاءات حية ورسوم sparklines ![]() | التفاصيل SNI والتشفير وGeoIP وDPI لكل اتصال ![]() |
| الرسم البياني مخطط حركة المرور وتوزيع التطبيقات وأهم العمليات ![]() | النشاط صادر/وارد العملية وتغطية 60 ثانية والإسناد والنظراء البعيدون ![]() |
بدء سريع
التثبيت
Homebrew (macOS / Linux):
brew install rustnet
Ubuntu (22.04 LTS+) / Linux Mint 21+ / Pop!_OS 22.04+:
sudo add-apt-repository ppa:domcyrus/rustnet
# on Pop!_OS: sudo apt-manage add ppa:domcyrus/rustnet
sudo apt update && sudo apt install rustnet
Fedora (42+):
sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet
openSUSE Tumbleweed:
sudo zypper addrepo https://download.opensuse.org/repositories/home:/domcyrus:/rustnet/openSUSE_Tumbleweed/home:domcyrus:rustnet.repo
sudo zypper refresh
sudo zypper install rustnet
Arch Linux:
sudo pacman -S rustnet
Nix / NixOS:
nix-shell -p rustnet
# Then inside the shell: sudo rustnet
من crates.io:
cargo install rustnet-monitor
Windows (Chocolatey):
# Run in Administrator PowerShell
# Requires Npcap (https://npcap.com) installed with "WinPcap API-compatible Mode" enabled
choco install rustnet
منصات أخرى:
- FreeBSD: حمّله من إصدارات rustnet-bsd
- Docker والبناء من المصدر وتوزيعات Linux الأخرى: انظر INSTALL.md لتعليمات مفصلة
تشغيل RustNet
يتطلب التقاط الحزم صلاحيات مرتفعة:
# Quick start (all platforms)
sudo rustnet
# Linux: Grant capabilities to run without sudo (recommended)
sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' $(which rustnet)
rustnet
الخيارات الشائعة:
rustnet -i eth0 # Specify network interface
rustnet --show-localhost # Show localhost connections
rustnet --no-resolve-dns # Disable reverse DNS lookups (enabled by default)
rustnet -r 500 # Set refresh interval (ms)
rustnet --theme tokyo-night # Theme: muted (default), vivid, catppuccin-mocha, tokyo-night, gruvbox, nord
rustnet --pcapng-export capture.pcapng # Annotated PCAPNG for Wireshark
يمكن أيضًا ضبط السمة وتجاوزات الألوان الفردية في ~/.config/rustnet/config.toml؛ ويمتلك --theme الأولوية. انظر USAGE.md لمخطط الإعدادات.
انظر INSTALL.md لإعداد الصلاحيات المفصّل وUSAGE.md للخيارات الكاملة.
إذا ضبطت الصلاحيات (capabilities) لكن واجهة TUI ما زالت تعرض
eBPF unavailable، فانظر eBPF غير متاح رغم ضبط الصلاحيات في قسم استكشاف الأخطاء وإصلاحها.
اختصارات لوحة المفاتيح
| المفتاح | الإجراء |
|---|---|
q | إنهاء (اضغط مرتين للتأكيد) |
Ctrl+C | إنهاء فوري |
x | مسح جميع الاتصالات (اضغط مرتين للتأكيد) |
Tab أو ] | التبويب التالي |
Shift+Tab أو [ | التبويب السابق |
1–5 | الانتقال إلى النظرة العامة / التفاصيل / النشاط / الرسم البياني / المساعدة |
↑/k ↓/j | التنقل لأعلى/لأسفل |
g G | الانتقال إلى أول/آخر اتصال |
Enter | عرض تفاصيل الاتصال |
Esc | الرجوع أو مسح المرشح |
c | نسخ العنوان البعيد |
p | تبديل أسماء الخدمات/المنافذ |
d | تبديل أسماء المضيفين/عناوين IP في النظرة العامة أو الصادر/الوارد في النشاط |
s S | التنقل بين أعمدة الفرز / تبديل الاتجاه |
a | تبديل تجميع العمليات |
Space | توسيع/طي مجموعة العمليات |
←/→ أو h/l | طي/توسيع المجموعة |
PageUp/PageDown أو Ctrl+B/F | التنقل بين الصفحات |
t | تبديل الاتصالات التاريخية (المغلقة) |
i | تبديل معلومات النظام في النظرة العامة أو تفاصيل الواجهة في النشاط |
r | إعادة ضبط العرض (التجميع والفرز والتصفية) |
/ | الدخول إلى وضع التصفية |
h | تبديل المساعدة |
انظر USAGE.md لاختصارات لوحة المفاتيح المفصلة ونصائح التنقل.
التصفية والفرز
أمثلة تصفية سريعة:
/google # Search for "google" anywhere
/port:443 # Filter by port
/process:firefox # Filter by process
/state:established # Filter by connection state
/dport:443 sni:github.com # Combine filters
الفرز:
- اضغط
sللتنقل بين الأعمدة القابلة للفرز (العملية، العناوين، الخدمة، التطبيق، الحالة، عرض النطاق) - اضغط
S(Shift+s) لتبديل اتجاه الفرز - اعثر على مستهلكي عرض النطاق: اضغط
sحتى يظهر "إجمالي عرض النطاق ↓" (يفرز حسب السرعة المجمعة للرفع والتنزيل)
انظر USAGE.md للدليل الكامل لصيغة التصفية والفرز.
أمثلة تصفية متقدمة
مرشحات الكلمات المفتاحية:
port:44- المنافذ التي تحتوي على "44" (443 و8080 و4433)sport:80- منافذ المصدر التي تحتوي على "80"dport:443- منافذ الوجهة التي تحتوي على "443"src:192.168- عناوين IP المصدر التي تحتوي على "192.168"dst:github.com- الوجهات التي تحتوي على "github.com"process:ssh- أسماء العمليات التي تحتوي على "ssh"sni:api- أسماء مضيفات SNI التي تحتوي على "api"app:openssh- اتصالات SSH التي تستخدم OpenSSHstate:established- التصفية حسب حالة البروتوكولproto:tcp- التصفية حسب نوع البروتوكول
تصفية الحالة:
state:syn_recv- اتصالات نصف مفتوحة (كشف فيضان SYN)state:established- الاتصالات القائمة فقطstate:quic_connected- اتصالات QUIC النشطةstate:dns_query- اتصالات استعلام DNS
أمثلة مجمعة:
sport:80 process:nginx- اتصالات Nginx من المنفذ 80dport:443 sni:google.com- HTTPS إلى Googleprocess:firefox state:quic_connected- اتصالات QUIC لمتصفح Firefoxdport:22 app:openssh state:established- اتصالات OpenSSH القائمة
دورة حياة الاتصال والمؤشرات المرئية
يستخدم RustNet مهلات ذكية وتحذيرات مرئية قبل إزالة الاتصالات:
مؤشرات التقادم المرئية:
- أبيض: نشط (< 75% من المهلة)
- أصفر: قديم (75-90% من المهلة)
- أحمر: حرج (> 90% من المهلة)
مهلات مدركة للبروتوكول:
- HTTP/HTTPS: 10 دقائق (يدعم الإبقاء على الاتصال keep-alive)
- SSH: 30 دقيقة (جلسات طويلة)
- اتصالات TCP القائمة العامة: 5 دقائق
- QUIC متصل: 3 دقائق (أو مهلة خمول معاملات النقل لدى النظير، عند توفرها)؛
Initial/Handshaking: 60 ثانية - DNS: 30 ثانية
- TCP CLOSED: فترة سماح 15 ثانية قبل الأرشفة
مثال: يتحول اتصال HTTP إلى الأصفر عند 7.5 دقيقة، وإلى الأحمر عند 9 دقائق، ويُزال عند 10 دقائق.
انظر USAGE.md لتفاصيل المهلات الكاملة.
التوثيق
- INSTALL.md - تعليمات تثبيت مفصلة لجميع المنصات وإعداد الصلاحيات واستكشاف الأخطاء وإصلاحها
- USAGE.md - دليل استخدام كامل يشمل خيارات سطر الأوامر والتصفية والفرز والتسجيل
- SECURITY.md - الميزات الأمنية بما في ذلك عزل Landlock وإدارة الامتيازات
- ARCHITECTURE.md - البنية التقنية وتنفيذات المنصات وتفاصيل الأداء
- CONTRIBUTING.md - سير عمل المساهمة ومتطلبات الجودة وإرشادات المشروع
- PROFILING.md - دليل قياس الأداء مع إعداد flamegraph ونصائح التحسين
- ROADMAP.md - الميزات المخطط لها والتحسينات المستقبلية
- RELEASE.md - عملية الإصدار للمشرفين
المساهمة
نرحب بالمساهمات! يرجى الاطلاع على CONTRIBUTING.md للإرشادات حول كيفية المساهمة.
انظر CONTRIBUTORS.md لقائمة الأشخاص الذين ساهموا في هذا المشروع.
الترخيص
هذا المشروع مرخّص بموجب رخصة Apache، الإصدار 2.0 - انظر ملف LICENSE للتفاصيل.
شكر وتقدير
- مبني بـ ratatui لواجهة الطرفية
- التقاط الحزم مدعوم بـ libpcap
- مستوحى من أدوات مثل
tshark/wireshark/tcpdumpوsniffnetوnetstatوssوiftopوbandwhich - بعض الكود كُتب بأسلوب vibe coding (يا إلهي) / ولتكن آلهة نماذج اللغة الكبيرة معكم
توثيق منقول
نُقلت بعض الأقسام إلى ملفات مخصصة لتنظيم أفضل:
- إعداد الصلاحيات: أصبح الآن في INSTALL.md - إعداد الصلاحيات
- تعليمات التثبيت: أصبحت الآن في INSTALL.md
- الاستخدام المفصل: أصبح الآن في USAGE.md
- تفاصيل البنية: أصبحت الآن في ARCHITECTURE.md



