
network-monitor v0.7.5
Rust와 GTK4로 구축된 실시간 네트워크 연결 모니터링 도구로, 최신 그래픽 인터페이스에서 활성 연결과 실시간 I/O 통계를 표시합니다.
네트워크 모니터

Rust와 GTK4로 구축된 실시간 네트워크 연결 모니터링 도구로, 최신 그래픽 인터페이스에서 활성 연결과 실시간 I/O 통계를 표시합니다.
기능
- 실시간 모니터링: 활성 네트워크 연결을 지속적으로 모니터링합니다
- I/O 통계: 각 연결의 실시간 업로드/다운로드 속도를 표시합니다
- 프로세스 식별: 각 연결과 연결된 프로그램 및 PID를 표시합니다
- 최신 GTK4 UI: Libadwaita 스타일의 깔끔하고 반응성이 뛰어난 그래픽 인터페이스
- 터미널 UI (TUI): 동일한 모니터링 기능을 제공하는 대화형 터미널 인터페이스
- 주소 해석: 일반적인 주소(localhost, any, mDNS)를 단순화합니다
- 연결 필터링: 더 깔끔한 출력을 위해 localhost 연결을 필터링합니다
- GNOME 통합: 도크 고정 및 데스크톱 통합을 위한 올바른 WM 클래스 지원
- 이중 설치: 사용자 로컬 및 시스템 전체 설치를 모두 지원합니다
- 견고한 오류 처리: 명확한 설정 안내와 함께 포괄적인 오류 복구
- 성능 최적화: 향상된 응답성을 위한 프로세스 캐싱 및 레이아웃 캐싱
요구 사항
- Rust 1.70+ (2021 에디션)
- GTK4 개발 라이브러리
- Libadwaita 개발 라이브러리
/proc파일시스템을 갖춘 Linux 시스템- Linux 5.8+ (eBPF 세분화된 권한용)
- Nightly Rust 및
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/(시스템 전체)에 바이너리를 설치합니다- GNOME 도크 고정을 위한 올바른 WM 클래스로 데스크톱 파일을 설치합니다
- 적절한 아이콘 디렉토리에 아이콘을 설치합니다
- 아이콘 캐시와 데스크톱 데이터베이스를 업데이트합니다
- 애플리케이션이 GNOME 도크/대시보드에 고정될 수 있도록 보장합니다
방법 2: 직접 빌드 및 실행
- 저장소를 클론합니다:
git clone <repository-url>
cd network-monitor
- 빌드 및 실행:
cargo run
또는 릴리스 모드로 빌드:
cargo build --release
./target/release/network-monitor
방법 3: TUI 버전 빌드 및 실행
- 저장소를 클론합니다:
git clone <repository-url>
cd network-monitor
- TUI를 빌드 및 실행:
cargo build --bin nmt
./target/debug/nmt
또는 릴리스 모드로 빌드:
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: 프로세스 I/O 통계에서 계산된 업로드 속도
- RX: 프로세스 I/O 통계에서 계산된 다운로드 속도
- Path:
/proc/[pid]/cmdline의 전체 명령 경로 및 인자
터미널 인터페이스 (TUI)

터미널 인터페이스를 실행합니다:
cargo run --bin nmt
TUI는 대화형 터미널 인터페이스에서 동일한 모니터링 기능을 제공합니다:
주요 키 조작:
q- 애플리케이션 종료r- 연결 수동 새로고침a- 자동 새로고침 전환 (2초 간격)↑/↓- 연결 탐색←/→- 테이블 가로 스크롤1-8- 열 기준 정렬 (Process(ID), Protocol, Source, Destination, Status, TX, RX, Path)
기능:
- 자동 새로고침을 통한 실시간 연결 모니터링
- 시각적 표시기가 있는 정렬 가능한 열
- 넓은 테이블을 위한 가로 스크롤
- 스마트 열 크기 조정 - 마지막 열이 나머지 전체 너비를 차지합니다
- 색상으로 구분된 프로토콜 (TCP/TCP6는 녹색, UDP/UDP6는 노란색)
- 활성 연결 강조 표시
- 프로세스 및 PID 정보
- 실시간 I/O 속도 표시
- 일관성을 위해 GTK4 버전과 동일한 열 순서
주소 해석
일반적인 주소는 가독성을 위해 단순화됩니다:
0.0.0.0:*또는*:*→ANY127.0.0.1:*또는[::1]:*→LOCALHOST224.0.0.251:*→MDNS
작동 방식
eBPF 백엔드 (이벤트 기반)
이 앱은 /proc/net 폴링 대신 커널 수준 kprobe(tcp_v4_connect, tcp_v6_connect, tcp_close,
inet_csk_accept)를 사용합니다. 이를 통해 다음을 제공합니다:
- 이벤트 기반: 1밀리초 미만의 이벤트 전달, 폴링 오버헤드 없음 (CPU 약 1-3%)
- 직접 PID: inode 스캔 없이
bpf_get_current_pid_tgid()를 통해 프로브 지점에서 캡처 - 수명이 짧은 연결: 폴링 간격 사이에 놓치지 않음
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
릴리스 빌드의 경우 경로를 그에 맞게 조정합니다:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor
eBPF를 사용할 수 없는 경우(권한 누락 또는 지원되지 않는 커널) 앱은 설정 메시지와 함께 종료됩니다.
아키텍처
- GTK4: 최신 크로스플랫폼 GUI 프레임워크
- Libadwaita: GNOME 스타일 UI 구성 요소
- Tokio: 동시 작업을 위한 비동기 런타임
- Aya + eBPF: 실시간 이벤트를 위한 kprobe 기반 커널 수준 연결 추적
- 직접 PID: 프로브 지점에서
bpf_get_current_pid_tgid()를 통한 프로세스 식별 - 시스템 호출: I/O 통계를 위한
/proc/[pid]/io직접 읽기 - 오류 처리:
thiserror를 사용한 안전한 복구가 포함된 포괄적인 오류 유형 - 성능 캐싱: 최적의 성능을 위한 UI 레이아웃 캐싱
Linux 패키지
기부
이 프로젝트가 유용하다고 생각되신다면 개발을 지원하기 위해 기부를 고려해 주시기 바랍니다.
- Monero:
88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv - Bitcoin:
bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025
라이선스
이 프로젝트는 오픈소스입니다. 자세한 내용은 LICENSE 파일을 참조하세요.