
netwatch v0.28.2
터미널에서 실시간 네트워크 진단. 명령어 하나, 설정 없이, 즉시 확인 가능.
NetWatch
네트워크에서 실제로 무슨 일이 일어나고 있는지 확인하세요 — 터미널에서 실시간으로.
암호화된 트래픽을 읽고, 모든 연결 뒤의 프로세스를 식별하며, 외부로 통신하는 멀웨어를 잡아내는 네트워크 모니터. 단일 바이너리. 설정 불필요.
실시간 TUI에 대한 빠른 둘러보기 — 대시보드, 모든 소켓 뒤의 프로그램, 심층 패킷 검사, 네트워크 맵, 각 프로그램이 통신하는 대상.
대부분의 네트워크 도구는 *"내 대역폭을 누가 쓰고 있나?"*라는 단 하나의 질문에 답하고 멈춥니다. NetWatch는 계속 나아갑니다. 네트워크상의 프로토콜을 디코드하고, 각 연결을 연 프로세스를 알려주며, 문제를 의미하는 패턴 — 포트 스캔, 명령 서버에 신호를 보내는 멀웨어, DNS를 통해 몰래 빠져나가는 데이터 — 을 감시합니다. 뭔가 이상해 보이면 키 하나로 휴대용 증거 번들을 고정해 버그 리포트에 첨부할 수 있습니다.
이것은 대역폭 측정기, Wireshark의 트라이어지 뷰, 경량 침입 탐지기의 역할을 하는 설정이 필요 없는 단일 바이너리라고 생각하세요 — 터미널을 떠나지 않고 말이죠.
묻는 질문의 규모에 맞게 확장됩니다. netwatch --lite는 *"지금 내 네트워크를 누가 쓰고 있지?"*에 대한 80×24 화면 한 개입니다. 답이 "조사해야 할 무언가"일 때는 전체 10탭 뷰가 있습니다 — 키 하나 차이이며, 동일한 라이브 캡처를 공유합니다.
만들어진 대상은 지금 당장 무슨 일이 일어나고 있는지 확인해야 하는 블루팀, 침해 대응 담당자, SRE, 그리고 홈랩 사용자입니다 — 한 시간 후에 캡처 파일을 분석하는 것이 아니라요.
650개 이상의 테스트 · Landlock 샌드박스 (Linux) · 적대적 트래픽을 안전하게 파싱
그리고 다른 어떤 터미널 도구도 하지 못하는 부분: NetWatch는 시스템의 각 프로그램이 통신하는 대상을 학습하고, 관찰된 기준선을 키 하나로 정책으로 전환하며, 프로그램이 새로운 곳과 통신하기 시작하는 순간 알려줍니다.
관찰 → 승격 → 경고. 기준선은 키 하나로 정책이 되고, 다음 새 대상은 드리프트로 도착합니다.
NetWatch를 선택하는 이유
- 🔓 직접 제어하는 암호화 트래픽 읽기 — 브라우저나 앱의
SSLKEYLOGFILE을 NetWatch에 지정하면 Wireshark와 동일한 방식으로 TLS 1.3 세션의 평문이 실시간으로 디코드되는 것을 볼 수 있습니다. 프록시도, 인증서도, 중간에 개입하는 것도 없습니다. - 🛰️ 모든 프로그램이 통신하는 대상을 학습하고, 변경되면 알림 받기 — NetWatch는 각 프로세스가 도달하는 대상(ClientHello의 호스트 이름, 자율 시스템, 포트)을 감시하고, 키 하나로 관찰된 기준선을 이그레스 정책으로 승격합니다. 그 후 프로그램이 새로운 곳과 통신하기 시작하면 경고합니다. 이것은 방화벽 규칙 집합이 표현할 수 없는 문장입니다:
curl은 이전에api.github.com에만 도달했지만, 오늘은 다른 곳에 도달했습니다. 관찰 전용이며 차단하지 않습니다. - 🧬 연결 뒤에 있는 소프트웨어 지문 채취 — JA4는 모든 TLS/QUIC 핸드셰이크를 안정적인 지문으로 바꿔서, 트래픽이 암호화되어 있어도 특정 클라이언트 — 또는 특정 멀웨어 — 를 브라우저의 user-agent로 식별하는 것처럼 알아볼 수 있습니다. 지문을 기준으로 피벗하여 동일한 소프트웨어의 다른 모든 흐름을 찾아보세요.
- 🚨 외부 통신하는 멀웨어 잡기 — C2 비콘닝(규칙적이고 지터가 낮은 체크인), 포트 스캔, DNS 터널링을 위한 내장 탐지가 설정 없이 백그라운드에서 실행됩니다. 심각한 알림이 발생하면 레코더가 자동으로 고정되어 확인할 때 이미 증거가 저장되어 있습니다.
- ⚙️ 모든 연결 뒤의 프로세스 이름 식별 —
ss/lsof에서 각 소켓을 연 프로그램에 매핑하며, 선택적 커널 레벨 eBPF kprobe(Linux,ebpf기능)를 통해 폴링이 놓칠 수 있는 수명이 짧은 흐름도 포착합니다. 모든 곳에서 작동하며, kprobe는 요구 사항이 아닌 개선 사항입니다. - 📡 포트뿐만 아니라 프로토콜 디코드 — TLS, QUIC, HTTP, DNS(그리고 SSH 배너/버전 스니핑) 및 12가지 이상의 프로토콜에 대한 실제 L7 파싱과 흐름별 스트림 추적 및 핸드셰이크 타이밍을 제공하므로 "포트 443"이 아닌
api.github.com과 JA4 지문을 볼 수 있습니다. - 🎥 증거 고정 — 순환 레코더를 준비하고 모든 사고를 휴대용 번들로 고정하세요: 패킷 그리고 이를 설명하는 연결, DNS, 상태, 알림. 버그 리포트와 사후 분석을 위해 만들어졌습니다.
- 🛡️ 설계상 안전 — 설정 후 NetWatch는 권한을 내려놓고 Landlock 파일시스템 허용 목록(Linux)으로 자신을 잠급니다. 적대적 트래픽을 파싱하는 도구는 SSH 키, 브라우저 프로필,
/etc/shadow를 읽을 수 없습니다. - 🪟 한 화면으로 축소 —
--lite는 80×24 화면 하나와 여섯 개의 키로 *"내 네트워크를 누가 쓰고 있는지, 내 연결은 괜찮은지?"*에 답합니다. Pi에 대한 SSH 세션 또는 tmux 분할에 적합합니다. 키 하나로 수집기가 이미 준비된 전체 포렌식 뷰로 확장됩니다.
구성 파일 없음. 설정 없음. 플래그 필요 없음.
설치
brew install netwatch # macOS / Linux
nix-shell -p netwatch # NixOS / Nix
paru -S netwatch-tui-bin # Arch (prebuilt; netwatch-tui builds from source)
scoop install netwatch # Windows
cargo install netwatch-tui # anywhere with Rust
또는 Releases에서 사전 빌드된 바이너리를 받으세요.
Nix, Arch 및 Scoop 패키지는 커뮤니티 패키저가 유지 관리합니다 — 감사합니다. 패키징 문제는 해당 패키저에게 보고하고, netwatch 버그는 여기에 보고하세요. 패키지가 릴리스보다 늦으면 Repology 페이지에서 확인할 수 있습니다.
모든 플랫폼 및 소스에서 빌드
| 플랫폼 | 다운로드 |
|---|---|
| Linux (x86_64, Debian/Ubuntu) | netwatch-linux-x86_64.tar.gz |
| Linux (aarch64, Debian/Ubuntu) | netwatch-linux-aarch64.tar.gz |
| Linux (x86_64, static — Arch/Fedora/Alpine/any distro) | netwatch-linux-x86_64-static.tar.gz |
| Linux (aarch64, static — Arch/Fedora/Alpine/any distro) | netwatch-linux-aarch64-static.tar.gz |
| macOS (Intel) | netwatch-macos-x86_64.tar.gz |
| macOS (Apple Silicon) | netwatch-macos-aarch64.tar.gz |
-static Linux 빌드는 libpcap을 번들하며 런타임 의존성이 없습니다 — 기본 빌드에서 libpcap.so.0.8: cannot open shared object file 오류가 보고되는 Arch, Fedora, Alpine 또는 모든 배포판에서 이것을 사용하세요.
소스에서 빌드:
git clone https://github.com/matthart1983/netwatch.git && cd netwatch
cargo build --release
사전 요구 사항: Rust 1.70+, libpcap (Linux에서는 sudo apt install libpcap-dev, macOS에는 포함됨).
빠른 시작
netwatch # interface stats, connections, config — no privileges needed
sudo netwatch # full mode — adds live packet capture + health probes
그게 전부입니다. 1–9로 탭을 전환하고, ?로 도움말을, q로 종료합니다. 대시보드는 5초 안에 유용하게 사용할 수 있습니다. 아래의 모든 것은 더 깊이 파고들 필요가 있을 때 준비되어 있습니다.
sudo없는 Linux: 캡처 기능을 한 번 부여한 후 일반 사용자로 실행하세요 —sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' "$(which netwatch)". 업그레이드할 때마다 다시 실행하세요 (자세히).
60초 안에 TLS 복호화 확인하기
NetWatch가 무엇인지 이해하는 가장 빠른 방법 — 당신이 제어하는 TLS 1.3 세션의 평문을 읽는 것을 지켜보는 것입니다:
sudo netwatch # 1. launch, then open the Packets tab (4)
SSLKEYLOGFILE=/tmp/sslkeylog.txt curl https://example.com # 2. any client that exports its keys
# 3. filter the Packets tab with: decrypted:true
복호화된 애플리케이션 데이터는 인라인으로 렌더링됩니다. 키로그를 놓쳐도 캡처가 중단되지 않습니다 — 해당 레코드는 불투명한 상태로 유지될 뿐입니다. (SSLKEYLOGFILE은 Wireshark가 사용하는 것과 동일한 메커니즘으로, 당신이 제어하는 트래픽에서만 작동하며 타사 또는 멀웨어 트래픽에서는 작동하지 않습니다.)
실시간 TLS 1.3 세션에서 평문을 읽습니다 — 터미널에서 바로 복호화. 프록시도, 중간자도 없습니다.
60초 안에 이그레스 드리프트 탐지 확인하기
위 데모의 루프를 세 개의 명령으로:
sudo netwatch # 1. launch and open the Egress tab (0). Leave it a minute
# while it learns; each process grows a list of destinations
# with hostnames, autonomous systems and ports
# 2. put the cursor on a process and press Enter — its observed
# baseline becomes a rule in egress-policy.toml
curl https://example.org # 3. same program, somewhere it has never been
새 대상은 ✗ drift 판정과 함께 알림으로 표시됩니다. 차단된 것은 없습니다 — 핵심은 알림을 받았다는 것입니다.
판정은 의도적으로 이분법적이지 않습니다:
✓ sni / ✓ ip | 선언된 호스트 이름 또는 주소와 일치 — 정확함 |
~ asn | 자율 시스템으로만 일치 — 해당 AS가 운영하는 모든 것을 허용하며, 하이퍼스케일러의 경우 사실상 무제한입니다 |
? ech | 암호화된 ClientHello: 이름이 설계상 숨겨져 있으므로 "판단할 수 없음"이지 "나쁨"이 아닙니다 |
✗ drift | 허용 목록 밖 |
— no rule | 이 프로그램은 선언된 적이 없음 — 아무것도 확인되지 않음 |
✗ undeclared | strict = true에서 규칙이 없음 — 정책이 완전하다고 주장하므로 부재가 발견 사항입니다 |
규칙은 정확한 호스트 이름, *.wildcards, 자율 시스템, CIDR 블록(10.0.0.0/8), 포트를 허용합니다. strict = true는 린터를 "선언한 소프트웨어가 잘못된 행동을 할 때 알려줘"에서 "선언하지 않은 무언가가 통신을 시작할 때 알려줘"로 바꿔줍니다 — 이것이 실제 침해의 형태입니다.
제공 기능
1–9과 0으로 전환하는 10개의 탭:
| # | 탭 | 표시 내용 |
|---|---|---|
| 1 | Dashboard | 인터페이스, 대역폭 그래프, 상위 연결, 게이트웨이/DNS 상태, 지연 시간 히트맵. 5초 안에 유용하게 사용할 수 있습니다. |
| 2 | Connections | 프로세스 + PID, 프로토콜, 상태, GeoIP, 지연 시간 스파크라인이 포함된 모든 소켓. |
| 3 | Interfaces | 인터페이스별 IPv4/IPv6, MAC, MTU, RX/TX, 오류, 드롭. |
| 4 | Packets | 실제 L7 디코드, TLS 1.3 복호화, JA4, 흐름별 스트림 추적, 필터, PCAP 내보내기가 포함된 라이브 캡처. |
| 5 | Stats | 바이트별 프로토콜 분석 + TCP 핸드셰이크 타이밍 히스토그램. |
| 6 | Topology | 머신 → 게이트웨이 → DNS → 상위 호스트의 ASCII 맵, traceroute 포함. |
| 7 | Timeline | TCP 상태별로 색상이 지정된 연결 타임라인; 보안 알림이 여기에 표시됩니다. |
| 8 | Processes | 실시간 RX/TX 및 연결 수를 포함한 프로세스별 대역폭 순위. |
| 9 | Insights | (선택 사항) 로컬/클라우드 LLM에 스냅샷을 보내 평이한 언어로 분석합니다. |
| 0 | Egress | 각 프로세스가 통신하는 대상(호스트 이름/AS/포트)을 학습하고, 기준선을 키 하나로 정책으로 승격한 다음 드리프트를 경고합니다. 관찰 전용이며 차단하지 않습니다. |
Packets 탭은 포렌식의 핵심입니다 — 심층 프로토콜 디코딩, 실시간 TLS 1.3 복호화, JA4 위협 헌팅, Wireshark 스타일 디스플레이 필터, 사고 캡처. 전체 기능 참조 보기 →
Lite 뷰
10개의 탭은 운영자를 위한 도구입니다. 질문이 단지 *"내 네트워크를 누가 쓰고 있고, 내 연결은 괜찮은가?"*일 때 — 단일 머신, Pi에 대한 SSH 세션, tmux 분할 — --lite가 있습니다:
netwatch --lite # one screen, fits 80×24
화면 하나, 키 여섯 개. 실시간 처리량, 연결 가능 여부, 누가 통신 중인지 — 행을 제자리에서 확장하고 입력하면서 필터링하세요.
모든 것이 단일 화면에 있습니다: 실시간 처리량 차트, 게이트웨이/DNS/인터넷 연결 가능 여부, 프로세스 및 호스트별 상위 통신 주체. 여섯 개의 키 — q 종료, p 일시 중지, / 필터, ↵ 통신 주체 확장, L 전체 뷰로 돌아가기, ? 도움말.
어느 뷰에서든 L을 눌러 전환합니다. 둘 다 동일한 수집기를 공유하므로 "뭔가 이상하다"에서 전체 10탭 포렌식 뷰로 확장하는 데 키 하나만 누르면 됩니다 — 재시작도, 기록 손실도 없으며 캡처는 계속 실행됩니다.
심층 가이드
| 가이드 | 내용 |
|---|---|
| 기능 참조 | 모든 키 바인딩, 디스플레이 필터 언어, 프로토콜 디코더 목록, 테마 및 구성 옵션. |
| TLS 1.3 복호화 | SSLKEYLOGFILE 복호화 작동 방식, 지원되는 암호 스위트, 읽을 수 있는 것과 없는 것. |
| JA4를 이용한 위협 헌팅 | 클라이언트 지문 채취 및 흐름 간 피벗. |
| 보안 & Landlock 샌드박스 | 위협 모델, 권한 삭제, 파일시스템 허용 목록. |
| 이그레스 정책 린팅 | 관찰 → 승격 → 경고 모델, 규칙 언어, strict 모드 및 NDJSON 내보내기 스키마. |
| 플라이트 레코더 | 준비, 고정, 사고 번들의 내용. |
| AI 인사이트 | 선택적 로컬/클라우드 LLM 분석(기본적으로 꺼져 있음). |
작동 방식
Raw bytes → Ethernet → IPv4/IPv6/ARP → TCP/UDP/ICMP → L7 decoders
↓
Per-flow stream tracking · Handshake timing
TLS 1.3 decryption · JA4 · Threat detection
| 수집기 | macOS | Linux |
|---|---|---|
| 연결 | lsof + PKTAP | /proc/net/tcp + eBPF kprobe |
| 패킷 | libpcap (BPF) | libpcap |
| 프로세스 귀속 | PKTAP | lsof/ss 폴링, 선택적 eBPF kprobe 오버레이 포함 |
모든 것은 우아하게 저하됩니다: 상승된 권한이 필요한 기능은 명확한 메시지를 표시하고 대체되며 절대 충돌하지 않습니다. 전체 아키텍처 노트는 WIKI.md에 있습니다.
관련 프로젝트
형제 프로젝트: SysWatch(시스템) 및 DiskWatch(디스크) — 동일한 외관, 다른 영역. ESSH — 동일한 TUI 미학을 가진 순수 Rust SSH 클라이언트입니다. NetWatch가 관찰하는 곳에 연결합니다.
NetWatch Cloud — NetWatch를 실행하는 서버를 위한 호스팅 플릿 모니터링. 각 Linux 호스트의 작은 Rust 에이전트, 실시간 대시보드, 지연 시간, 패킷 손실 또는 호스트 오프라인에 대한 이메일 + Slack 알림. 성장하는 동안 무료입니다. 에이전트, SDK 및 대시보드는 MIT 라이선스이며, 호스팅 백엔드는 독점입니다.
감사의 말
패키저들. NetWatch는 homebrew-core, nixpkgs, AUR 및 Scoop 메인 버킷에 있습니다 — 그리고 저는 그중 어떤 것도 패키징하지 않았습니다. 그 모든 것은 도구가 유용하다고 생각한 누군가가 요청 없이 작업을 수행하고 지금까지 최신 상태를 유지해 준 것입니다. Scoop 항목은 보통 태그가 생성된 후 몇 시간 안에 릴리스를 따라잡았습니다.
| Dominiquini | 2026년 3월부터 AUR의 netwatch-tui |
| kemelzaidan | AUR의 netwatch-tui-bin |
| tomasrivera | nixpkgs의 netwatch |
| scillidan | Scoop 메인 버킷의 netwatch, v0.15.3부터 |
| Homebrew 관리자 | 포뮬러를 core로 가져간 것과, 이후 모든 릴리스를 추적한 봇에 대해 |
패키징은 고마운 일이지만, 문제가 생겼을 때만 주목받는 일입니다. NetWatch를 이 중 하나를 통해 설치했다면, 감사해야 할 사람은 저가 아니라 그들입니다.
기여자들. @lamchau, @fdncred 및 @PeteE가 패치를 보내주었습니다. 감사합니다 — 낯선 사람의 풀 리퀘스트는 이와 같은 프로젝트에 일어날 수 있는 최고의 일입니다.
그리고 실제 재현 사례와 함께 이슈를 열어주고, 설계 결정에 대해 논쟁해 주고, 터미널에서 출력이 잘못되었다고 알려준 모든 분께: 이것이 이 프로젝트가 구축된 피드백 루프입니다.
기여하기
질문, 아이디어, 버그 리포트는 GitHub Discussions와 Issues에서 환영합니다. 코딩 규칙은 CONTRIBUTING.md, 아키텍처 가이드는 WIKI.md를 참조하세요.
라이선스
MIT