tshark 사용법 완전 정리 (설치부터 URL/IP 필터링까지)
tshark
는 Wireshark의 CLI(커맨드라인) 버전으로, 서버나 원격 환경에서 GUI 없이도 패킷 캡처, 필터링, 추출, 통계 분석을 할 수 있는 강력한 도구입니다. 이번 글에서는 설치부터 기본 개념, 주요 옵션, 실전 예제, 그리고 URL/IP 기반 모니터링까지 한 번에 정리합니다.
[ 1. 설치 방법 ]
Ubuntu / Debian
sudo apt update
sudo apt install -y tshark
sudo dpkg-reconfigure wireshark-common
sudo usermod -aG wireshark $USER
Rocky / Alma / RHEL
sudo dnf install -y wireshark-cli
sudo usermod -aG wireshark $USER
macOS (Homebrew)
brew install wireshark
Windows
winget install WiresharkFoundation.Wireshark
또는 Chocolatey
choco install wireshark -y
※ Wireshark 설치 시 tshark도 함께 포함됩니다.
[ 2. 기본 개념 ]
-
캡처 필터(-f) : 패킷을 캡처하는 순간 필터링 (BPF 문법)
-
디스플레이 필터(-Y) : 캡처된 패킷을 출력할 때 필터링 (Wireshark 문법)
-
입출력(-i/-w/-r) : 인터페이스에서 캡처(-i), 파일로 저장(-w), 파일에서 읽기(-r)
[ 3. 주요 옵션 치트시트 ]
-D : 인터페이스 목록 보기
-i <iface> : 캡처 인터페이스 선택
-c <N> : N개 패킷만 캡처
-a duration:<초> : 지정 시간 후 종료
-b files:<N> : 링버퍼 파일 개수 지정
-b duration:<초> : 회전 주기
-f "<BPF>" : 캡처 필터 (예: "tcp port 80")
-Y "<display filter>" : 디스플레이 필터 (예: "http.request")
-w <file> : pcap 파일 저장
-r <file> : 파일에서 읽기
-T fields/json : 출력 포맷 지정
-e <field> : 출력할 필드 지정
-q -z <stat> : 통계 출력 (엔드포인트, 대화, I/O 등)
[ 4. 빠른 시작 ]
tshark -D
tshark -i eth0 -c 100
tshark -i any -a duration:30 -w out.pcapng
[ 5. 상황별 실전 예제 ]
(1) HTTP 요청 추출
tshark -r traffic.pcapng -Y "http.request"
-T fields -e ip.src -e http.host -e http.request.method -e http.request.uri
(2) TLS SNI 확인
tshark -r tls.pcapng -Y "tls.handshake.extensions_server_name"
-T fields -e ip.dst -e tls.handshake.extensions_server_name
(3) DNS 요청
tshark -r dns.pcapng -Y "dns.flags.response==0"
-T fields -e ip.src -e dns.qry.name
(4) TCP 대화/재전송 통계
tshark -r app.pcapng -q -z conv,tcp
(5) 링버퍼 캡처
tshark -i eth0 -b duration:60 -b files:10 -w ring.pcapng
[ 6. URL 및 IP 기준 트래픽 모니터링 ]
(1) 캡처 필터 (BPF, IP/도메인 기반)
도메인 기반 캡처 (자동으로 IP로 변환됨)
tshark -i eth0 -f "host www.example.com"
IP 기반 캡처
tshark -i eth0 -f "host 192.168.1.100"
특정 포트와 함께 (예: HTTPS)
tshark -i eth0 -f "host 192.168.1.100 and tcp port 443"
(2) HTTP Host 헤더 기반
tshark -i any -Y "http.host contains "example.com"" -l
-T fields -e ip.src -e http.request.method -e http.host -e http.request.uri
(3) HTTPS (TLS SNI) 기반
tshark -i any -Y "tls.handshake.extensions_server_name contains "example.com"" -l
-T fields -e ip.src -e ip.dst -e tls.handshake.extensions_server_name
(4) DNS 요청 기반
tshark -i any -Y "dns.qry.name contains "example.com"" -l
-T fields -e ip.src -e dns.qry.name
(5) 통합 모니터링 예제 (도메인/IP 혼합)
tshark -i any -l
-Y "http.host contains "google.com" || tls.handshake.extensions_server_name contains "google.com" || dns.qry.name contains "google.com" || ip.addr == 142.250.72.14"
-T fields -e frame.time -e ip.src -e ip.dst -e http.host -e tls.handshake.extensions_server_name -e dns.qry.name
※ 위 예제는 google.com 도메인과 142.250.72.14 IP 트래픽을 동시에 추적합니다.
[ 7. 통계 활용 예시 ]
tshark -r file.pcapng -q -z endpoints,ip
tshark -r file.pcapng -q -z conv,tcp
tshark -r file.pcapng -q -z io,stat,1
[ 8. 권한 및 보안 주의사항 ]
-
루트 권한 없이 캡처하려면 wireshark 그룹에 사용자 추가 또는 dumpcap capabilities 부여 필요
-
캡처 파일에는 민감한 데이터가 포함될 수 있으므로 접근 권한 관리 필수
-
HTTPS 복호화 시 SSLKEYLOGFILE 사용 가능하지만 반드시 법적·정책적 범위 내에서 사용
[ 9. 정리 ]
-
캡처는 BPF 필터(-f "host example.com", -f "host 192.168.1.100")로 좁게
-
분석은 디스플레이 필터(http.host, tls.sni, dns.qry.name, ip.addr)로 정밀하게
-
장시간은 링버퍼(-b)로 안전하게
-
출력은 -T fields/json으로 가공해 로그/통계 시스템과 연동