
रस्ट और GTK4 के साथ निर्मित एक रीयल-टाइम नेटवर्क कनेक्शन मॉनिटरिंग टूल, जो आधुनिक ग्राफिकल इंटरफ़ेस में सक्रिय कनेक्शनों को लाइव I/O आँकड़ों के साथ प्रदर्शित करता है।
# नेटवर्क मॉनिटर  Rust और GTK4 के साथ बनाया गया एक रीयल-टाइम नेटवर्क कनेक्शन मॉनिटरिंग टूल, जो एक आधुनिक ग्राफिकल इंटरफ़ेस में लाइव I/O आंकड़ों के साथ सक्रिय कनेक्शन प्रदर्शित करता है। [](https://github.com/grigio/network-monitor/actions/workflows/rust.yml) [](https://deps.rs/repo/github/grigio/network-monitor) ## विशेषताएँ - **रीयल-टाइम मॉनिटरिंग**: सक्रिय नेटवर्क कनेक्शनों की लगातार निगरानी करता है - **I/O आंकड़े**: प्रत्येक कनेक्शन के लिए लाइव अपलोड/डाउनलोड दर दिखाता है - **प्रोसेस पहचान**: प्रत्येक कनेक्शन से जुड़े प्रोग्राम और PID को प्रदर्शित करता है - **प्रोसेस क्रियाएँ**: किसी पंक्ति पर राइट-क्लिक करके उसका मान/कमांड कॉपी करें या उस प्रोसेस को किल करें जो कनेक्शन का स्वामी है (Terminate या Force Kill, पुष्टि के साथ) - **स्थायी चयन**: चयनित पंक्ति रीफ्रेश के दौरान अपना हाइलाइट बनाए रखती है और स्टेटस स्ट्रिप में दिखाई जाती है - **आधुनिक GTK4 UI**: Libadwaita स्टाइलिंग के साथ साफ़, उत्तरदायी ग्राफिकल इंटरफ़ेस - **टर्मिनल UI (TUI)**: समान मॉनिटरिंग क्षमताओं वाला इंटरैक्टिव टर्मिनल इंटरफ़ेस - **पता रिज़ॉल्यूशन**: सामान्य पतों (localhost, any, mDNS) को सरल बनाता है - **कनेक्शन फ़िल्टरिंग**: साफ़ आउटपुट के लिए localhost कनेक्शनों को फ़िल्टर करता है - **GNOME एकीकरण**: डॉक पिनिंग और डेस्कटॉप एकीकरण के लिए उचित WM क्लास समर्थन - **दोहरी इंस्टॉलेशन**: उपयोगकर्ता-स्थानीय और सिस्टम-व्यापी दोनों इंस्टॉलेशन का समर्थन करता है - **मज़बूत त्रुटि प्रबंधन**: स्पष्ट सेटअप मार्गदर्शन के साथ व्यापक त्रुटि रिकवरी - **प्रदर्शन अनुकूलित**: बेहतर प्रतिक्रियाशीलता के लिए प्रोसेस कैशिंग और लेआउट कैशिंग ## आवश्यकताएँ - Rust 1.70+ (2021 edition) - GTK4 डेवलपमेंट लाइब्रेरीज़ - Libadwaita डेवलपमेंट लाइब्रेरीज़ - `/proc` फ़ाइलसिस्टम वाला Linux सिस्टम - Linux 5.8+ (eBPF ग्रैनुलर क्षमताओं के लिए) - Nightly Rust और `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/` (सिस्टम-व्यापी) में इंस्टॉल करेगी - GNOME डॉक पिनिंग के लिए उचित WM क्लास के साथ डेस्कटॉप फ़ाइल इंस्टॉल करेगी - उपयुक्त आइकन निर्देशिकाओं में आइकन इंस्टॉल करेगी - आइकन कैश और डेस्कटॉप डेटाबेस अपडेट करेगी - सुनिश्चित करेगी कि एप्लिकेशन को 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)**: सटीक socket-to-process मैपिंग के साथ प्रोसेस नाम और PID - **Protocol**: TCP/UDP प्रोटोकॉल - **Source**: स्थानीय एंडपॉइंट (पठनीय प्रारूप में रिज़ॉल्व किया गया) - **Destination**: रिमोट एंडपॉइंट (पठनीय प्रारूप में रिज़ॉल्व किया गया) - **Status**: कनेक्शन स्थिति (ESTABLISHED, LISTEN, आदि) - **TX**: प्रोसेस I/O आंकड़ों से गणना की गई अपलोड दर - **RX**: प्रोसेस I/O आंकड़ों से गणना की गई डाउनलोड दर - **Path**: `/proc/[pid]/cmdline` से पूर्ण कमांड पथ और आर्गुमेंट्स **पंक्ति क्रियाएँ** - **लेफ़्ट क्लिक**: एक पंक्ति चुनें (नीचे की स्ट्रिप में भी दिखाई जाती है) - **राइट क्लिक**: *Copy Value*, *Copy Command* और *Kill "process" (PID)* के साथ कॉन्टेक्स्ट मेनू खोलें, जो पूछता है कि Terminate (SIGTERM) करना है या Force Kill (SIGKILL) - **Delete**: वर्तमान में चयनित पंक्ति को किल करें (समान पुष्टि संवाद) - **Ctrl+C**: सेल सामग्री कॉपी करें - **हेडर बार में Refresh बटन**: तुरंत अपडेट करें (सूची हर 3 सेकंड में भी रीफ्रेश होती है) ### टर्मिनल इंटरफ़ेस (TUI)  टर्मिनल इंटरफ़ेस लॉन्च करें: ```bash cargo run --bin nmt ``` TUI एक इंटरैक्टिव टर्मिनल इंटरफ़ेस में समान मॉनिटरिंग क्षमताएँ प्रदान करता है: **की नियंत्रण:** - `q` - एप्लिकेशन से बाहर निकलें - `r` - होस्टनेम रिज़ॉल्यूशन टॉगल करें - `R` - कनेक्शनों को मैन्युअल रूप से रीफ्रेश करें - `a` - ऑटो-रीफ्रेश टॉगल करें (2-सेकंड अंतराल) - `↑/↓` - कनेक्शनों के माध्यम से नेविगेट करें - `←/→` - तालिका को क्षैतिज रूप से स्क्रॉल करें - `k` / **राइट क्लिक** - किसी पंक्ति के लिए kill मेनू खोलें (Terminate / Force Kill / Cancel) - `1-8` - स्तंभों के अनुसार क्रमबद्ध करें (Process(ID), Protocol, Source, Destination, Status, TX, RX, Path) माउस: लेफ़्ट क्लिक एक पंक्ति चुनता है, राइट क्लिक उसे चुनता है और kill मेनू खोलता है। **विशेषताएँ:** - ऑटो-रीफ्रेश के साथ रीयल-टाइम कनेक्शन मॉनिटरिंग - दृश्य संकेतकों के साथ क्रमबद्ध करने योग्य स्तंभ - चौड़ी तालिकाओं के लिए क्षैतिज स्क्रॉलिंग - स्मार्ट स्तंभ आकार - अंतिम स्तंभ को पूरी शेष चौड़ाई मिलती है - रंग-कोडित प्रोटोकॉल (TCP/TCP6 हरे में, UDP/UDP6 पीले में) - सक्रिय कनेक्शन हाइलाइटिंग - प्रोसेस और PID जानकारी - लाइव I/O दर प्रदर्शन - निरंतरता के लिए GTK4 संस्करण के समान स्तंभ क्रम ### पता रिज़ॉल्यूशन पठनीयता के लिए सामान्य पते सरल किए जाते हैं: - `0.0.0.0:*` या `*:*` → `ANY` - `127.0.0.1:*` या `[::1]:*` → `LOCALHOST` - `224.0.0.251:*` → `MDNS` ## यह कैसे काम करता है ### eBPF बैकएंड (इवेंट-चालित) ऐप `/proc/net` को पोल करने के बजाय कर्नेल-स्तरीय kprobes (`tcp_v4_connect`, `tcp_v6_connect`, `tcp_close`, `inet_csk_accept`) का उपयोग करता है। यह प्रदान करता है: - **इवेंट-चालित**: सब-मिलीसेकंड इवेंट डिलीवरी, कोई पोलिंग ओवरहेड नहीं (~1-3% CPU) - **प्रत्यक्ष PID**: प्रोब पॉइंट पर `bpf_get_current_pid_tgid()` के माध्यम से कैप्चर किया गया, कोई inode स्कैनिंग नहीं - **अल्पकालिक कनेक्शन**: पोल अंतरालों के बीच कभी नहीं छूटते ### eBPF मोड eBPF बैकएंड डिफ़ॉल्ट `/proc/net` पोलिंग दृष्टिकोण की तुलना में कम ओवरहेड और रीयल-टाइम इवेंट्स के साथ **इवेंट-चालित** कनेक्शन मॉनिटरिंग प्रदान करता है। यह अल्पकालिक कनेक्शनों को कैप्चर कर सकता है जो पोलिंग से छूट सकते हैं। **पूर्वापेक्षाएँ:** ```bash rustup toolchain install nightly cargo install bpf-linker ``` **बिल्ड और रन:** ```bash cargo build ``` **सामान्य उपयोगकर्ता के रूप में चलाएँ** (kernel 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**: आधुनिक क्रॉस-प्लेटफ़ॉर्म GUI फ़्रेमवर्क - **Libadwaita**: GNOME-शैली UI घटक - **Tokio**: समवर्ती संचालनों के लिए async रनटाइम - **Aya + eBPF**: रीयल-टाइम इवेंट्स के लिए kprobes के साथ कर्नेल-स्तरीय कनेक्शन ट्रेसिंग - **प्रत्यक्ष PID**: प्रोब पॉइंट पर `bpf_get_current_pid_tgid()` के माध्यम से प्रोसेस पहचान - **सिस्टम कॉल**: I/O आंकड़ों के लिए सीधा `/proc/[pid]/io` पठन - **त्रुटि प्रबंधन**: `thiserror` का उपयोग करके सुगम रिकवरी के साथ व्यापक त्रुटि प्रकार - **प्रदर्शन कैशिंग**: इष्टतम प्रदर्शन के लिए UI लेआउट कैशिंग ## Linux पैकेज [](https://repology.org/project/network-monitor/versions) ## दान यदि आपको यह प्रोजेक्ट सहायक लगता है, तो कृपया इसके विकास का समर्थन करने के लिए दान देने पर विचार करें। - **Monero**: `88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv` - **Bitcoin**: `bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025` ## लाइसेंस यह प्रोजेक्ट ओपन सोर्स है। विवरण के लिए LICENSE फ़ाइल देखें।