TShark는 Wireshark의 command-line network protocol analyzer다. 실시간 packet을 캡처하거나 capture file을 읽고, Wireshark dissector와 display filter를 이용해 protocol과 field를 분석한다.
Wireshark package에 TShark가 포함된다.
sudo apt update sudo apt install wireshark
설치 과정에서 일반 사용자의 packet capture 허용 여부를 선택할 수 있다. 권한 정책을 확인한 뒤 최소 사용자만 capture group에 추가한다.
CLI 도구만 필요하면 Fedora의 wireshark-cli package를 설치한다.
sudo dnf install wireshark-cli
Wireshark GUI가 함께 필요하면 배포판의 wireshark package를 추가한다.
Homebrew의 wireshark formula는 GUI 없이 command-line utilities를 설치한다.
brew install wireshark
일반 사용자가 capture interface를 사용할 수 없으면 필요한 경우에만 별도 ChmodBPF package를 검토한다.
brew install --cask wireshark-chmodbpf
공식 Wireshark installer package를 winget으로 설치한다. TShark component가 설치 대상에 포함되어 있는지 installer selection을 확인한다.
winget install --exact --id WiresharkFoundation.Wireshark
새 terminal을 열고 설치 경로가 PATH에 포함되어 있는지 확인한다.
tshark --version
tshark -D tshark -i eth0 -f 'tcp port 443' tshark -r capture.pcapng -Y 'http.request' tshark -i any -a duration:60 -w capture.pcapng
tshark [OPTIONS] [FILTER]-D: capture 가능한 interface 목록을 출력한다.-i INTERFACE: live capture interface 또는 interface 번호를 지정한다.-f CAPTURE_FILTER: pcap/BPF capture filter를 적용한다.-Y DISPLAY_FILTER: Wireshark display filter를 적용한다.-r INFILE: 저장된 capture file을 읽는다.-w OUTFILE: raw packet을 capture file에 저장한다. 기본 형식은 pcapng다.-c COUNT: 지정한 packet 수를 처리한 뒤 종료한다.-a CONDITION: duration, filesize, files 등의 자동 종료 조건을 지정한다.-b CONDITION: 여러 capture file을 사용하는 ring buffer 조건을 지정한다.-V: 모든 protocol field의 상세 tree를 출력한다.-O PROTOCOLS: 지정한 protocol만 상세 tree로 출력한다.-T FORMAT: fields, json, ek, pdml, psml 등의 출력 형식을 지정한다.-e FIELD: -T fields에서 출력할 field를 추가한다. 여러 번 사용할 수 있다.-E FIELD_OPTION: header, separator, quote, occurrence 등 field 출력 형식을 조정한다.-z STATISTIC: protocol hierarchy, conversations, endpoint, I/O 통계 등을 생성한다.-q: 일반 packet 출력을 억제한다. -z 통계만 볼 때 유용하다.-G REPORT_TYPE: protocol, fields 등 내부 glossary를 출력한다.
-f는 packet을 수집하기 전에 pcap/BPF filter를 적용한다. busy interface에서 불필요한 packet을 일찍 버리므로 live capture 부하와 file 크기를 줄이는 데 적합하다.
tshark -i eth0 -f 'host 192.0.2.10 and tcp port 443'
-Y는 Wireshark dissector가 해석한 protocol과 field를 기준으로 표시할 packet을 고른다. capture file 분석이나 세밀한 protocol 조건에 적합하다.
tshark -r capture.pcapng -Y 'http.request.method == "POST"' tshark -r capture.pcapng -Y 'dns.flags.response == 0'
-w로 raw packet을 저장할 때 display filter로 저장 대상을 거르는 방식은 지원되지 않는다. 저장 범위를 줄이려면 -f를 사용하거나 먼저 캡처한 뒤 -r, -Y, -w로 별도 file을 만든다.
tshark -D
tshark -i eth0 -f 'udp port 53' -a duration:60 -w dns.pcapng tshark -i eth0 -c 100 -w sample.pcapng
tshark -r capture.pcapng tshark -r capture.pcapng -Y 'tcp.analysis.retransmission' tshark -r capture.pcapng -Y 'tls.handshake.type == 1'
tshark -r capture.pcapng -Y 'dns.qry.name' \ -T fields \ -E header=y \ -E separator=, \ -E quote=d \ -e frame.time_epoch \ -e ip.src \ -e dns.qry.name
field 이름은 다음 명령과 공식 Display Filter Reference에서 확인한다.
tshark -G fields
tshark -r capture.pcapng -Y 'http.request' -T json > http-requests.json
-w는 raw capture file을 만들고 > redirect는 사람이 읽는 decoded output을 저장한다는 차이에 주의한다.
tshark -r capture.pcapng -q -z io,phs tshark -r capture.pcapng -q -z conv,tcp tshark -r capture.pcapng -q -z endpoints,ip tshark -r capture.pcapng -q -z io,stat,1
tshark -i eth0 -f 'tcp port 443' \ -b duration:300 \ -b files:12 \ -w tls-ring.pcapng
tshark -D로 interface를 확인한다.wireshark-chmodbpf를 검토한다.-f에는 pcap/BPF capture filter, -Y에는 Wireshark display filter를 사용했는지 확인한다.tshark -G fields 또는 Display Filter Reference에서 현재 버전의 이름을 확인한다.busy interface에서는 복잡한 live display filter보다 capture filter로 입력량을 먼저 줄인다. capture duration, file rotation, buffer 크기와 storage 처리량을 함께 점검한다.
-T fields와 -E option을 명시해 header, separator, quoting을 고정한다.