| Crates.io | monitetoring |
| lib.rs | monitetoring |
| version | 0.3.1 |
| created_at | 2025-06-16 02:56:29.467477+00 |
| updated_at | 2025-06-21 12:48:56.427254+00 |
| description | A real-time per-process network bandwidth monitoring tool for Linux, inspired by nethogs. Built with Rust and featuring a terminal UI powered by ratatui. |
| homepage | https://github.com/superapple8x/monitetoring |
| repository | https://github.com/superapple8x/monitetoring |
| max_upload_size | |
| id | 1713861 |
| size | 700,889 |
A real-time per-process network bandwidth monitoring tool for Linux and Windows, inspired by nethogs. Built with Rust and featuring a terminal UI powered by ratatui.
The easiest way to get started on Windows is to use the pre-compiled binary release.
C:\Program Files\monitetoring).setup_windows.bat and select "Run as Administrator".The setup script handles everything for you:
After setup, you can run monitetoring.exe as Administrator.
For Linux, the recommended method is to install via cargo. This requires the Rust toolchain, which includes cargo.
1. Install Rust & Cargo
Choose the command for your distribution:
# Install dependencies and Rust/Cargo
sudo apt update
sudo apt install -y curl build-essential pkg-config libssl-dev
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
# Install dependencies and Rust/Cargo
sudo dnf install -y curl pkg-config openssl-devel
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
After installation, you may need to restart your terminal or run source "$HOME/.cargo/env" for the cargo command to be available.
2. Install Monitetoring
# This single command downloads, compiles, and installs the application
cargo install monitetoring
Once installed, run the application with sudo monitetoring.
3. (Optional) Set up system-wide access
For easier sudo usage, you can set up system-wide access:
# Download and run the system-wide installation script
curl -sSL https://raw.githubusercontent.com/superapple8x/monitetoring/main/install_system_wide.sh | bash
# Or if you have the repository cloned:
./install_system_wide.sh
This sets up system-wide access so you can run sudo monitetoring from anywhere. Future updates via cargo install will automatically be available system-wide.
If you want to contribute, modify, or build the project manually, follow these steps. This is the only path that requires you to install the Rust compiler.
git clone https://github.com/superapple8x/monitetoring
cd monitetoring
If you don't have Rust, install it using rustup.
On Linux:
Choose the command for your distribution:
# Install dependencies and Rust/Cargo
sudo apt update
sudo apt install -y curl build-essential pkg-config libssl-dev
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
# Install dependencies and Rust/Cargo
sudo dnf install -y curl pkg-config openssl-devel
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
After installation, you may need to restart your terminal or run source "$HOME/.cargo/env" for the cargo command to be available.
On Windows:
rustup-init.exe from rustup.rs.On Linux:
cargo build --release
# To run it:
sudo ./target/release/monitetoring
On Windows: Building on Windows has an additional dependency: the Npcap SDK.
# You can either set an environment variable to the SDK location...
set NPCAP_SDK_PATH=C:\path\to\npcap-sdk
# ...or place the SDK's /Lib/x64 folder contents in the right place.
# See build.rs for details.
cargo build --release
After building, run ./target/release/monitetoring.exe as Administrator.
Build fails with "wpcap.lib not found":
NPCAP_SDK_PATH environment variable is set correctly or that you've placed the library files where the build script can find them.Application crashes or "No interfaces found":
npcap service is running: sc query npcap.Simply run without arguments for guided setup:
sudo monitetoring
This will:
# Both `--iface` and the legacy `--interface` are accepted. The examples below use the primary flag.
sudo monitetoring --iface any
sudo monitetoring --iface eth0 --json
sudo monitetoring --iface eth0 --containers
sudo monitetoring --reset
Main View

Bandwidth – System Stack

Bandwidth – Process Lines

System Overview

Usage: monitetoring [OPTIONS]
Options:
-i, --iface <IFACE> Network interface to monitor [default: any] (alias: --interface)
-j, --json Output in JSON format instead of TUI
-c, --containers Enable container detection and display
--reset Reset saved configuration and exit
-h, --help Print help
-V, --version Print version
The TUI interface provides:
Monitetoring has three main interface modes that you can cycle through using the Tab key:
| Key | Action |
|---|---|
q |
Quit application |
Tab |
Switch mode |
Esc |
Return to main mode from overview |
| Key | Action |
|---|---|
p |
Sort by PID |
n |
Sort by process name |
u |
Sort by user |
s |
Sort by bytes sent |
r |
Sort by bytes received |
c |
Sort by container name (when containers enabled) |
d |
Toggle sort direction (ascending/descending) |
↑/↓ |
Select process |
Enter |
Show actions for selected process |
| Key | Action |
|---|---|
t |
Toggle chart type (process lines/system stacked) |
m |
Toggle metrics mode (combined/send only/receive only) |
| Key | Action |
|---|---|
+/- |
Adjust data quota threshold (±100MB) |
r |
Reset quota exceeded state |
For integration with monitoring systems or scripts:
sudo monitetoring --iface eth0 --json --containers
[
{
"pid": 1234,
"name": "firefox",
"sent_bytes": 2621440,
"received_bytes": 15925248,
"sent_formatted": "2.5 MB",
"received_formatted": "15.2 MB",
"container_name": null
},
{
"pid": 5678,
"name": "nginx",
"sent_bytes": 876544,
"received_bytes": 1258291,
"sent_formatted": "856 KB",
"received_formatted": "1.2 MB",
"container_name": "webserver"
}
]
Monitetoring can detect processes running in container runtimes:
Container detection reads /proc/[PID]/cgroup to identify container membership.
Note: Due to Docker's network namespace isolation, containerized processes may not show network traffic in the host's monitoring view. This is expected behavior - containers use separate network namespaces.
Monitetoring automatically saves your preferences to:
~/.config/monitetoring/config.jsonThe configuration includes:
Reset configuration:
sudo monitetoring --reset
The project uses these key dependencies:
pcap - Packet captureratatui - Terminal UItokio - Async runtimeclap - CLI parsingprocfs - Process informationserde - JSON serializationlibpcap for packet capture/proc/net/{tcp,udp}Contributions are welcome. Areas for improvement:
This project is licensed under the GPL-2.0 License - see the LICENSE file for details.
nethogsratatuiIf you encounter any issues:
For bug reports and feature requests, please use the GitHub issue tracker.
sudoIf you installed Monitetoring with cargo install monitetoring, you may get a command not found error when running sudo monitetoring.
Solutions:
Set up system-wide access (recommended):
curl -sSL https://raw.githubusercontent.com/superapple8x/monitetoring/main/install_system_wide.sh | bash
# Then you can simply run: sudo monitetoring --iface any
Use this command instead:
sudo $HOME/.cargo/bin/monitetoring --iface any
Keep your current PATH when escalating privileges:
sudo -E monitetoring --iface any
# or
sudo env "PATH=$PATH" monitetoring --iface any
Add Cargo's bin directory to the secure_path in /etc/sudoers (requires root privileges):
sudo visudo
# Add /home/<user>/.cargo/bin to the secure_path setting, e.g.
# Defaults secure_path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/<user>/.cargo/bin
The first option is recommended as it's permanent, automatic, and works for all users.