괜찮은_프리웨어2024. 1. 11. 08:49

 

tshark에서 화면에 출력할 형식을 지정하는 방법이다. 예를 들어 test.pcap 파일에 대해 작업을 할 때 아래와 같이 입력하면 각 패킷에 대하여 IP주소쌍 등 몇가지 정보를 확인할 수 있다.

tshark -r test.pcap

tshark의 GUI 버전인 와이어샤크(wireshark)에서 파일을 열었을 때 화면에 보이는 형식이 있듯이, tshark에도 기본 표시 형식이 있는데 이것을 바꾸는 것이다. 예를 들어 발신 IP주소, 수신 IP주소, 프로토콜, 패킷 길이 형식으로 출력하고 싶다면 아래와 같이 할 수 있다.

# 발신 IP주소(%us), 수신 IP주소(%ud), 프로토콜(%p), 패킷 길이(%L) 출력
tshark -o 'gui.column.format:"src","%us","dst","%ud","proto","%p","length","%L"' -r test.pcap
  10.0.2.15 → 192.168.3.13 TCP 54
  ...
 
"%" 기호로 시작되는 항목이 표시할 값이다. 예를 들어 %p는 프로토콜 정보를 나타낸다. 위의 예시에서 "src", "dst" 등 컬럼 이름은 실제로 출력되진 않으므로 크게 의미는 없고 적당히 지정하면 되겠다.

표시할 수 있는 값들의 종류는 아래의 명령으로 확인할 수 있다.

tshark -G column-formats

위의 예시에서 발신 IP주소와 수신 IP주소 사이에 있는 화살표를 제거하고 각 항목을 공백으로 구분하고자 한다면 awk와 조합해서 아래와 같이 할 수도 있겠다.

tshark -o 'gui.column.format:"src","%us","dst","%ud","proto","%p","length","%L"' -r test.pcap | awk '{ print $1 " " $3 " " $4 " " $5 }'
10.0.2.15 192.168.3.13 TCP 54
...

이와는 별도로 패킷의 특정 정보(field)를 골라서 출력하는 방법도 있는데, 관련 내용은 이전 게시물을 참고하자. 여기로


awk를 활용하면 좀 더 복잡하지만 재미 있는 작업을 해 볼 수도 있다. 위의 예시에서 같은 IP주소쌍과 프로토콜 종류에 따른 패킷 길이의 합(즉, 통신량)을 구해보자. 이와 비슷한 방식의 awk 활용 예시는 여기에

우선 위와 같은 형식으로 출력하여 test.pcap.temp 파일에 저장한다.

tshark -o 'gui.column.format:"src","%us","dst","%ud","proto","%p","length","%L"' -r test.pcap > test.pcap.temp

test.pcap.temp 파일의 내용은 아래와 같을 것이다.

cat test.pcap.temp
10.0.2.15 192.168.3.13 TCP 54
...

이제 awk에서 "[발신 IP주소] [수신IP주소] [프로토콜]" 형식을 인덱스로 사용하는 배열을 만들어서(awk의 배열은 문자열도 인덱스로 사용할 수 있으므로) 같은 인덱스에 대해 패킷 길이값을 더한다. 그리고 맨 마지막에 그 값을 출력해 주면 되겠다.

cat test.pkt.txt | awk '{x[$1" "$2" "$3]+=$4} END {for (i in x) print i " " x[i]}'
10.0.2.15 192.168.3.13 TCP 162
...

728x90
Posted by 반달가면