Snitch – 더 친숙한 ss/netstat 도구
(github.com/karol-broda)-
Snitch는 기존
ss나netstat보다 사람이 보기 쉬운 네트워크 연결 검사 도구로, 터미널 UI(TUI)와 스타일링된 표 형식을 지원 - 실시간 인터랙티브 화면 또는 한 번에 출력되는 표 형식으로 연결 상태를 표시하며, TCP/UDP, 리스닝, 연결됨 상태 등 다양한 필터 제공
- JSON·CSV 출력, DNS/서비스명 해석, 프로세스 감시 및 종료, 자동 업데이트 기능을 포함
- Homebrew, Go, Nix, Arch Linux, Shell Script, Binary 등 여러 설치 방법을 지원하며, macOS의 Gatekeeper 경고 자동 해제 기능 포함
- 개발자와 시스템 관리자가 네트워크 연결을 직관적으로 모니터링하고 스크립트 자동화에 활용할 수 있는 유용한 도구
개요
- Snitch는 네트워크 연결을 시각적으로 탐색할 수 있는 도구로,
ss나netstat의 대체 도구로 설계 - TUI 인터페이스 또는 스타일링된 표 출력을 통해 연결 상태를 표시
- Linux와 macOS에서 동작하며, 루트 권한 또는 CAP_NET_ADMIN 권한이 필요할 수 있음
설치 방법
-
Homebrew:
brew install snitch명령으로 설치 가능 -
Go:
go install github.com/karol-broda/snitch@latest -
Nix/NixOS:
nix-env -iA nixpkgs.snitch또는 flake 입력으로 추가 가능 -
Arch Linux (AUR) :
yay -S snitch-bin또는paru -S snitch-bin -
Shell Script:
curl -sSL ... | sh명령으로 설치, 기본 경로는~/.local/bin또는/usr/local/bin- macOS에서는 설치 스크립트가 자동으로 quarantine 속성 제거
- Binary 다운로드: GitHub Releases에서 Linux(.tar.gz, .deb, .rpm, .apk) 및 macOS(.tar.gz) 버전 제공
빠른 시작
-
snitch실행 시 인터랙티브 TUI 실행 -
snitch -l은 리스닝 소켓만 표시,snitch ls는 표 형식으로 출력 후 종료 -
snitch ls -t -e는 TCP 연결된 세션만 표시,snitch ls -p는 파싱 가능한 단순 출력
주요 명령
-
snitch/snitch top: 실시간 갱신되는 연결 목록 표시- 옵션:
-l(리스닝),-t(TCP),-e(연결됨),-i(갱신 주기) - 키 바인딩:
j/k이동,t/uTCP·UDP 전환,K프로세스 종료,/검색,q종료 등
- 옵션:
-
snitch ls: 한 번에 표 출력, 터미널 높이를 초과하면 자동으로 pager 사용- 출력 형식: 기본 표,
-o json,-o csv,-p(단순),--no-headers(헤더 제거)
- 출력 형식: 기본 표,
-
snitch json: JSON 형식 출력으로 스크립트 활용 가능 -
snitch watch: 일정 간격으로 JSON 프레임 스트리밍 -
snitch upgrade: 버전 확인 및 자동 업데이트
필터 및 해석 옵션
- 공통 플래그:
-t(TCP),-u(UDP),-l(리스닝),-e(연결됨),-4(IPv4),-6(IPv6) -
DNS 및 서비스명 해석:
-
--resolve-addrs,--resolve-ports,--no-cache옵션 지원 - 병렬 DNS 조회 및 캐싱 수행,
--no-cache로 캐시 비활성화 가능
-
-
세부 필터링:
key=value형식으로 프로세스명, 포트, 상태 등 지정 가능- 예:
snitch ls proto=tcp state=listen,snitch ls proc=nginx
- 예:
출력 형식
- 기본 표 출력: 프로세스명, PID, 프로토콜, 상태, 로컬 주소·포트 표시
- 단순 출력(-p) : 파싱 가능한 텍스트 형태
- JSON/CSV 출력: 스크립트 자동화 및 로그 분석에 활용 가능
설정 및 환경 변수
- 설정 파일:
~/.config/snitch/snitch.toml-
numeric,dns_cache,theme(auto/dark/light/mono) 설정 가능
-
- 환경 변수:
-
SNITCH_THEME,SNITCH_RESOLVE,SNITCH_DNS_CACHE,SNITCH_NO_COLOR,SNITCH_CONFIG등 지원
-
시스템 요구사항
- Linux 또는 macOS 환경 필요
- Linux:
/proc/net/*에서 데이터 읽기, 전체 프로세스 정보에는 루트 또는CAP_NET_ADMIN권한 필요 - macOS: 시스템 API 사용, 전체 프로세스 정보에는
sudo필요
Hacker News 의견들
- lsof와 ss의 기본 설정이 너무 불편함
ss는 기본 출력에서 송수신 큐 크기 같은 드물게 필요한 정보는 보여주면서, 정작 소켓이 어떤 애플리케이션에 속하는지는 안 보여줌
또 기본적으로 리스닝 소켓을 생략하는데, 이런 도구의 주요 용도는 바로 그걸 보는 것임
기본값을 잘 고르는 게 어렵다는 건 알지만, 이건 거의 모든 걸 잘못 고른 사례임- 완전히 동의함. Unix 도구들은 장기적으로 합리적인 기본값을 유지하기 어려운 구조적 한계가 있음
시간이 지나면서 사용자와 사용 사례가 변하니 기본값도 바뀌어야 하지만, Unix 도구들은 출력 형식이 곧 API라서 바꾸면 하위 호환성 문제가 생김
예를 들어ps aux가 긴 프로세스 이름을 7자 정도로 잘라버리는 것도 그런 이유임
관련 글: sh and the separation of data and representation - 지금은 UX에 대한 이해가 훨씬 깊어졌음. 70년대 개발자들이 ss나 lsof를 만들 때는 이런 사용성 문제를 잘 몰랐던 것 같음
- 요즘의 fd, ag, rg 같은 신세대 CLI 도구들도 비슷한 문제를 겪음
속도나 기능보다 직관적인 사용성이 훨씬 중요하다고 생각함 -
netstat -utan과ss -utan이 거의 같은 정보를 보여주는 것 같음
- 완전히 동의함. Unix 도구들은 장기적으로 합리적인 기본값을 유지하기 어려운 구조적 한계가 있음
- 제목을 보고 처음엔 Mac용 네트워크 모니터링 툴 Little Snitch 얘기인 줄 알았음
이름이 겹치니 다른 이름을 쓰는 게 좋을 수도 있음
Little Snitch 공식 사이트- Linux용 OpenSnitch라는 클론도 있음
- 이름 괜찮다고 생각함. 기존 Little Snitch가 있다고 해서 꼭 바꿀 필요는 없다고 봄
- 이름을 바꿀 필요까진 없을 듯함. Little Snitch와는 용도가 완전히 다름
Snitch는 단순히 ss/netstat 데이터를 터미널에서 보기 좋게 보여주는 도구임 - 와, 멋지네. 혹시 Windows나 Linux용 대체 도구도 있을까 궁금함
- 나도 처음엔 그 생각했음. 이름이 너무 부끄럽게 느껴짐
같은 IT 분야에 이미 비슷한 이름의 툴이 있는데 왜 굳이 또 그걸 쓰는지 이해가 안 됨
- 데모의 recording-as-code 방식이 흥미로움
데모 링크- 고마움 :) 다른 프로젝트에서는 이런 접근을 거의 못 봤음
- 요즘 TUI 기반 도구가 늘어나는 게 너무 좋음. 이 프로젝트도 멋져 보여서 꼭 써볼 생각임
- 근데 TUI가 GUI만큼 접근성이 좋을까 궁금함
GUI 라이브러리는 시각장애인 등 사용자를 위한 다양한 기능이 있는데, TUI는 그런 부분이 부족할 수도 있음
- 근데 TUI가 GUI만큼 접근성이 좋을까 궁금함
- ss에 익숙해져서 잘 쓰고 있음. 다만 송수신 큐 숫자는 안 보고 싶음
화면 폭이 너무 넓어져서 노트북에서 세로 분할하면 거의 안 들어감
Snitch는 설치하지 않을 생각임. ss는 이미 모든 서버에 기본 설치되어 있고, TUI는 필요하지 않음
Snitch는 개인용이나 워크스테이션용으로는 괜찮겠지만, 서버에서는 ss가 기본임- 맞음. 서버에서는 ss가 기본으로 깔려 있으니 그대로 쓰면 됨
Snitch는 워크스테이션이나 homelab 디버깅용으로 더 적합함
송수신 큐는 아직 표시하지 않지만, 나중에 compact 모드나 토글로 추가할 예정임
- 맞음. 서버에서는 ss가 기본으로 깔려 있으니 그대로 쓰면 됨
- 보기엔 괜찮지만, 나는 오래전부터 iptraf-ng를 써왔고 여전히 약간 더 낫다고 느낌
혹시 데모 영상에서 내가 놓친 기능이 있을까?- 고마움! Snitch는 트래픽 모니터링보다는 ss/netstat 대체에 가까움
트래픽 모니터링 기능은 계획 중이지만 아직 구현되지 않음
- 고마움! Snitch는 트래픽 모니터링보다는 ss/netstat 대체에 가까움
- 이름은 마음에 안 들지만, TUI로 연결 상태를 모니터링하는 건 정말 잘 어울림
- 고마움. 혹시 이름의 어떤 부분이 마음에 안 드는지 궁금함
- Go로 설치하려 했는데 아래 오류가 발생함
go install github.com/karol-broda/snitch@latest go: github.com/karol-broda/snitch@latest: version constraints conflict: module declares its path as: snitch but was required as: github.com/karol-broda/snitch- 모듈 선언을 URL 없이 이름만 써서 생긴 문제였음. 몇 시간 전에 수정됨
Go가module barename을 허용하는 게 신기함. 개인 프로젝트에서도 결국 URL을 쓰게 되는데, 좋지 않은 패턴이라고 생각함 - 수정은 됐지만 아직 릴리스에는 반영되지 않음
커밋 링크 - 이제 수정하고 릴리스까지 완료했음.
@latest로 빌드하면 잘 동작할 것임
- 모듈 선언을 URL 없이 이름만 써서 생긴 문제였음. 몇 시간 전에 수정됨
- 이런 도구들이 숙련된 공격자에게 얼마나 유용할지 항상 궁금했음
예를 들어, 악성코드가 일정 시간 대기하거나 사용자가 네트워크 활동 중일 때만 C&C와 통신하도록 설계하면 탐지가 어려울 것 같음- 최소한 이런 도구들은 /proc을 직접 파싱하지 않는 게 좋음
LD_PRELOAD 루트킷은 libc 함수 출력을 조작해 활동을 숨기기 때문임
ss는 그나마 조금 더 신뢰할 수 있고, Snitch는 Go로 작성되어 libc를 사용하지 않으니 LD_PRELOAD 루트킷에도 강할 가능성이 있음
다만 이런 도구들은 악성 트래픽 탐지용이 아니라 로컬 디버깅용임
참고 자료: decloaker, arxiv 논문, ACM 논문, proc 구조 설명 - 맞음. Snitch는 보안 탐지용이 아니라 로컬 디버깅/점검용임
숙련된 공격자는 어차피 정상 트래픽에 섞여서 동작할 수 있음 - 이런 도구들은 적대적 환경용이 아님
실제 공격자 대응용 네트워크 도구들도 완벽하지 않음 (검색어: bro vantage point problem)
- 최소한 이런 도구들은 /proc을 직접 파싱하지 않는 게 좋음
- 각 소켓/프로세스별로 현재 및 누적 전송 속도를 보여주는 기능이 있으면 좋겠음
지금은 jnettop을 쓰지만 UI가 마음에 안 듦- 그 기능은 향후 버전에서 추가 예정임