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

Rust와 GTK4로 구축된 실시간 네트워크 연결 모니터링 도구로, 현대적인 그래픽 인터페이스에서 실시간 I/O 통계와 함께 활성 연결을 표시합니다.
기능
- 실시간 모니터링: 활성 네트워크 연결을 지속적으로 모니터링
- 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에서 설치:
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
또는 release 모드로 빌드:
cargo build --release
./target/release/network-monitor
방법 3: TUI 버전 빌드 및 실행
- 저장소 복제:
git clone <repository-url>
cd network-monitor
- TUI 빌드 및 실행:
cargo build --bin nmt
./target/debug/nmt
또는 release 모드로 빌드:
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의 전체 명령 경로 및 인수
행 작업
- 왼쪽 클릭: 행 선택 (하단 표시줄에도 표시됨)
- 오른쪽 클릭: Copy Value, Copy Command 및 *Kill "process" (PID)*가 포함된 컨텍스트 메뉴 열기, Terminate (SIGTERM) 또는 Force Kill (SIGKILL) 여부를 묻습니다
- Delete: 현재 선택된 행 종료 (동일한 확인 대화 상자)
- Ctrl+C: 셀 내용 복사
- 헤더 바의 새로 고침 버튼: 즉시 업데이트 (목록은 3초마다 자동 새로 고침됨)
터미널 인터페이스 (TUI)

터미널 인터페이스 실행:
cargo run --bin nmt
TUI는 대화형 터미널 인터페이스에서 동일한 모니터링 기능을 제공합니다:
키 조작:
q- 애플리케이션 종료r- 호스트 이름 해석 전환R- 연결 수동 새로 고침a- 자동 새로 고침 전환 (2초 간격)↑/↓- 연결 탐색←/→- 테이블 가로 스크롤k/ 오른쪽 클릭 - 행의 종료 메뉴 열기 (Terminate / Force Kill / Cancel)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-3% CPU)
- 직접 PID:
bpf_get_current_pid_tgid()를 통해 프로브 지점에서 캡처, inode 스캔 불필요 - 단명 연결: 폴링 간격 사이에 놓치지 않음
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
release 빌드의 경우 경로를 적절히 조정:
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 파일을 참조하세요.