업데이트로 돌아가기
New releaseAug 10, 2026

netwatch v0.28.2

터미널에서 실시간 네트워크 진단. 명령어 하나, 설정 없이, 즉시 확인 가능.

공유

NetWatch

네트워크에서 실제로 무슨 일이 일어나고 있는지 확인하세요 — 터미널에서 실시간으로.
암호화된 트래픽을 읽고, 모든 연결 뒤의 프로세스를 식별하며, 외부로 통신하는 멀웨어를 잡아내는 네트워크 모니터. 단일 바이너리. 설정 불필요.

crates.io downloads Release Packaging status Platform License

Terminal Trove Tool of The Week

실시간 NetWatch TUI 둘러보기: 대시보드, 프로세스 귀속 연결, 실시간 패킷 캡처 및 디코드, 네트워크 토폴로지, 각 프로그램의 이그레스 프로필

실시간 TUI에 대한 빠른 둘러보기 — 대시보드, 모든 소켓 뒤의 프로그램, 심층 패킷 검사, 네트워크 맵, 각 프로그램이 통신하는 대상.


대부분의 네트워크 도구는 *"내 대역폭을 누가 쓰고 있나?"*라는 단 하나의 질문에 답하고 멈춥니다. NetWatch는 계속 나아갑니다. 네트워크상의 프로토콜을 디코드하고, 각 연결을 연 프로세스를 알려주며, 문제를 의미하는 패턴 — 포트 스캔, 명령 서버에 신호를 보내는 멀웨어, DNS를 통해 몰래 빠져나가는 데이터 — 을 감시합니다. 뭔가 이상해 보이면 키 하나로 휴대용 증거 번들을 고정해 버그 리포트에 첨부할 수 있습니다.

이것은 대역폭 측정기, Wireshark의 트라이어지 뷰, 경량 침입 탐지기의 역할을 하는 설정이 필요 없는 단일 바이너리라고 생각하세요 — 터미널을 떠나지 않고 말이죠.

묻는 질문의 규모에 맞게 확장됩니다. netwatch --lite는 *"지금 내 네트워크를 누가 쓰고 있지?"*에 대한 80×24 화면 한 개입니다. 답이 "조사해야 할 무언가"일 때는 전체 10탭 뷰가 있습니다 — 키 하나 차이이며, 동일한 라이브 캡처를 공유합니다.

만들어진 대상은 지금 당장 무슨 일이 일어나고 있는지 확인해야 하는 블루팀, 침해 대응 담당자, SRE, 그리고 홈랩 사용자입니다 — 한 시간 후에 캡처 파일을 분석하는 것이 아니라요.

650개 이상의 테스트 · Landlock 샌드박스 (Linux) · 적대적 트래픽을 안전하게 파싱

그리고 다른 어떤 터미널 도구도 하지 못하는 부분: NetWatch는 시스템의 각 프로그램이 통신하는 대상을 학습하고, 관찰된 기준선을 키 하나로 정책으로 전환하며, 프로그램이 새로운 곳과 통신하기 시작하는 순간 알려줍니다.

NetWatch가 curl이 통신하는 대상을 학습하고, 그 기준선을 이그레스 정책으로 승격시킨 다음, 새 대상을 드리프트로 플래그하는 모습

관찰 → 승격 → 경고. 기준선은 키 하나로 정책이 되고, 다음 새 대상은 드리프트로 도착합니다.

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

그게 전부입니다. 19로 탭을 전환하고, ?로 도움말을, 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가 사용하는 것과 동일한 메커니즘으로, 당신이 제어하는 트래픽에서만 작동하며 타사 또는 멀웨어 트래픽에서는 작동하지 않습니다.)

NetWatch가 실시간 TLS 1.3 세션을 복호화 — Packets 탭에서 디코드된 평문 HTTP 교환

실시간 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이 프로그램은 선언된 적이 없음 — 아무것도 확인되지 않음
✗ undeclaredstrict = true에서 규칙이 없음 — 정책이 완전하다고 주장하므로 부재가 발견 사항입니다

규칙은 정확한 호스트 이름, *.wildcards, 자율 시스템, CIDR 블록(10.0.0.0/8), 포트를 허용합니다. strict = true는 린터를 "선언한 소프트웨어가 잘못된 행동을 할 때 알려줘"에서 "선언하지 않은 무언가가 통신을 시작할 때 알려줘"로 바꿔줍니다 — 이것이 실제 침해의 형태입니다.

제공 기능

190으로 전환하는 10개의 탭:

#표시 내용
1Dashboard인터페이스, 대역폭 그래프, 상위 연결, 게이트웨이/DNS 상태, 지연 시간 히트맵. 5초 안에 유용하게 사용할 수 있습니다.
2Connections프로세스 + PID, 프로토콜, 상태, GeoIP, 지연 시간 스파크라인이 포함된 모든 소켓.
3Interfaces인터페이스별 IPv4/IPv6, MAC, MTU, RX/TX, 오류, 드롭.
4Packets실제 L7 디코드, TLS 1.3 복호화, JA4, 흐름별 스트림 추적, 필터, PCAP 내보내기가 포함된 라이브 캡처.
5Stats바이트별 프로토콜 분석 + TCP 핸드셰이크 타이밍 히스토그램.
6Topology머신 → 게이트웨이 → DNS → 상위 호스트의 ASCII 맵, traceroute 포함.
7TimelineTCP 상태별로 색상이 지정된 연결 타임라인; 보안 알림이 여기에 표시됩니다.
8Processes실시간 RX/TX 및 연결 수를 포함한 프로세스별 대역폭 순위.
9Insights(선택 사항) 로컬/클라우드 LLM에 스냅샷을 보내 평이한 언어로 분석합니다.
0Egress각 프로세스가 통신하는 대상(호스트 이름/AS/포트)을 학습하고, 기준선을 키 하나로 정책으로 승격한 다음 드리프트를 경고합니다. 관찰 전용이며 차단하지 않습니다.

Packets 탭은 포렌식의 핵심입니다 — 심층 프로토콜 디코딩, 실시간 TLS 1.3 복호화, JA4 위협 헌팅, Wireshark 스타일 디스플레이 필터, 사고 캡처. 전체 기능 참조 보기 →

Lite 뷰

10개의 탭은 운영자를 위한 도구입니다. 질문이 단지 *"내 네트워크를 누가 쓰고 있고, 내 연결은 괜찮은가?"*일 때 — 단일 머신, Pi에 대한 SSH 세션, tmux 분할 — --lite가 있습니다:

netwatch --lite     # one screen, fits 80×24

NetWatch Lite: 실시간 처리량 차트, 게이트웨이/DNS/인터넷 연결 가능 여부, 프로세스 및 호스트별 상위 통신 주체를 보여주는 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
수집기macOSLinux
연결lsof + PKTAP/proc/net/tcp + eBPF kprobe
패킷libpcap (BPF)libpcap
프로세스 귀속PKTAPlsof/ss 폴링, 선택적 eBPF kprobe 오버레이 포함

모든 것은 우아하게 저하됩니다: 상승된 권한이 필요한 기능은 명확한 메시지를 표시하고 대체되며 절대 충돌하지 않습니다. 전체 아키텍처 노트는 WIKI.md에 있습니다.

관련 프로젝트

형제 프로젝트: SysWatch(시스템) 및 DiskWatch(디스크) — 동일한 외관, 다른 영역. ESSH — 동일한 TUI 미학을 가진 순수 Rust SSH 클라이언트입니다. NetWatch가 관찰하는 곳에 연결합니다.

NetWatch Cloud — NetWatch를 실행하는 서버를 위한 호스팅 플릿 모니터링. 각 Linux 호스트의 작은 Rust 에이전트, 실시간 대시보드, 지연 시간, 패킷 손실 또는 호스트 오프라인에 대한 이메일 + Slack 알림. 성장하는 동안 무료입니다. 에이전트, SDK대시보드는 MIT 라이선스이며, 호스팅 백엔드는 독점입니다.

감사의 말

패키저들. NetWatch는 homebrew-core, nixpkgs, AURScoop 메인 버킷에 있습니다 — 그리고 저는 그중 어떤 것도 패키징하지 않았습니다. 그 모든 것은 도구가 유용하다고 생각한 누군가가 요청 없이 작업을 수행하고 지금까지 최신 상태를 유지해 준 것입니다. Scoop 항목은 보통 태그가 생성된 후 몇 시간 안에 릴리스를 따라잡았습니다.

Dominiquini2026년 3월부터 AUR의 netwatch-tui
kemelzaidanAUR의 netwatch-tui-bin
tomasriveranixpkgs의 netwatch
scillidanScoop 메인 버킷의 netwatch, v0.15.3부터
Homebrew 관리자포뮬러를 core로 가져간 것과, 이후 모든 릴리스를 추적한 봇에 대해

패키징은 고마운 일이지만, 문제가 생겼을 때만 주목받는 일입니다. NetWatch를 이 중 하나를 통해 설치했다면, 감사해야 할 사람은 저가 아니라 그들입니다.

기여자들. @lamchau, @fdncred@PeteE가 패치를 보내주었습니다. 감사합니다 — 낯선 사람의 풀 리퀘스트는 이와 같은 프로젝트에 일어날 수 있는 최고의 일입니다.

그리고 실제 재현 사례와 함께 이슈를 열어주고, 설계 결정에 대해 논쟁해 주고, 터미널에서 출력이 잘못되었다고 알려준 모든 분께: 이것이 이 프로젝트가 구축된 피드백 루프입니다.

기여하기

질문, 아이디어, 버그 리포트는 GitHub DiscussionsIssues에서 환영합니다. 코딩 규칙은 CONTRIBUTING.md, 아키텍처 가이드는 WIKI.md를 참조하세요.

라이선스

MIT

카테고리