Tshark 에서 패킷 필드 추출하기

WiresharkBeginner
지금 연습하기

소개

이 랩에서는 Wireshark 의 명령줄 도구인 tshark를 사용하여 네트워크 트래픽에서 특정 패킷 필드를 추출하는 방법을 배우게 됩니다. 소스 IP (ip.src) 및 TCP 포트 (tcp.port) 와 같은 일반적인 필드를 선택하는 연습을 하고, -T fields 및 사용자 지정 구분 기호를 사용하여 출력 형식을 마스터하게 됩니다.

이 연습에서는 패킷 캡처, -e 플래그를 사용한 필드 추출, CSV 형식으로의 데이터 내보내기를 안내합니다. -E separator=,를 사용한 구분 기호 구성 및 출력 리디렉션과 같은 기술을 사용하여 가독성과 분석을 향상시키기 위한 출력 구조화 방법을 배우게 됩니다.

-e ip.src -e tcp.port 로 필드 선택하기

이 단계에서는 Wireshark 의 명령줄 도구인 tshark를 사용하여 네트워크 패킷 캡처에서 특정 필드를 추출하는 방법을 배우게 됩니다. 네트워크 패킷에는 다양한 정보가 포함되어 있으며, 분석을 위해 특정 필드만 살펴봐야 하는 경우가 많습니다. 여기서는 두 가지 중요한 필드에 중점을 둡니다. 패킷의 출처를 알려주는 소스 IP 주소 (ip.src) 와 사용 중인 특정 서비스 또는 애플리케이션을 식별하는 TCP 포트 번호 (tcp.port) 입니다.

먼저, 작업할 샘플 네트워크 트래픽이 필요합니다. 다음 명령은 캡처할 수 있는 간단한 웹 트래픽을 생성합니다.

curl -s http://example.com > /dev/null

이제 tshark를 사용하여 이 트래픽을 캡처해 보겠습니다. 아래 명령은 10 개의 패킷을 캡처하여 sample.pcap이라는 파일에 저장합니다. .pcap 형식은 네트워크 트래픽 캡처를 저장하는 데 표준으로 사용됩니다.

tshark -c 10 -w sample.pcap

캡처 파일이 준비되었으므로 이제 관심 있는 필드만 추출할 수 있습니다. 다음 명령은 캡처 파일을 읽고 소스 IP 주소와 TCP 포트만 출력합니다.

tshark -r sample.pcap -T fields -e ip.src -e tcp.port

이 명령의 각 부분이 수행하는 작업을 자세히 살펴보겠습니다.

  • -r sample.pcaptshark에게 캡처 파일에서 읽도록 지시합니다.
  • -T fields는 출력을 필드 형식으로 지정합니다 (XML 또는 JSON 과 같은 다른 형식과 반대).
  • -e ip.src는 소스 IP 주소 필드를 선택합니다.
  • -e tcp.port는 TCP 포트 필드를 선택합니다.

출력은 탭으로 구분된 값으로 표시되며, 각 줄은 패킷을 나타내고 먼저 소스 IP 를 표시한 다음 포트 번호를 표시합니다.

192.168.1.1    443
192.168.1.2    80

이 작업을 더 쉽게 하기 위해 출력을 파일에 저장할 수 있습니다. 이는 대규모 캡처를 처리하거나 데이터를 추가로 처리하려는 경우 특히 유용합니다.

tshark -r sample.pcap -T fields -e ip.src -e tcp.port > temp.txt
cat temp.txt

> 기호는 출력을 파일로 리디렉션하고, cat을 사용하면 해당 파일의 내용을 볼 수 있습니다. 이 접근 방식을 사용하면 나중에 참조하거나 다른 도구로 분석할 수 있는 필터링된 데이터의 영구적인 기록을 얻을 수 있습니다.

-T fields 로 출력 필드 설정하기

이 단계에서는 필요한 특정 패킷 필드만 표시하도록 tshark의 출력을 사용자 지정하는 방법을 살펴보겠습니다. -T fields 옵션은 기본 패킷 표시를 처리하고 분석하기 쉬운 구조화된 형식으로 변환합니다.

필드 사양 없이 처음 tshark를 실행하면 각 패킷에 대한 포괄적이지만 때로는 압도적인 보기가 표시됩니다.

tshark -r sample.pcap -c 3

이 기본 보기에는 사용 가능한 모든 패킷 세부 정보가 포함됩니다. 그러나 집중적인 분석을 위해서는 종종 몇 가지 주요 정보만 필요합니다. 여기서 필드 추출이 시작됩니다. 다음 명령은 특정 필드를 선택하는 방법을 보여줍니다.

tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port

이 명령의 각 부분이 수행하는 작업을 자세히 살펴보겠습니다.

  • -T fields는 기본 패킷 요약 대신 필드 기반 출력을 원한다고 tshark에 알립니다.
  • -e frame.number는 캡처 파일에서 패킷의 위치를 추출합니다.
  • -e ip.src는 패킷의 출처 (소스 IP) 를 보여줍니다.
  • -e ip.dst는 패킷의 목적지 (대상 IP) 를 보여줍니다.
  • -e tcp.port는 사용 중인 네트워크 포트를 보여줍니다.

결과는 다음과 같은 깔끔한 탭으로 구분된 출력입니다.

1    192.168.1.1    192.168.1.2    443
2    192.168.1.2    192.168.1.1    80

이 형식은 데이터를 추가로 처리하거나 다른 도구로 가져와야 할 때 특히 유용합니다. 사용 가능한 필드가 무엇인지 확실하지 않거나 필드 이름을 확인해야 하는 경우 전체 목록을 검색할 수 있습니다.

tshark -G fields | grep -E 'ip.src|ip.dst|tcp.port'

이 명령은 분석에 포함할 수 있는 IP 주소 및 TCP 포트와 관련된 모든 필드를 찾는 데 도움이 됩니다.

-E separator=,를 사용하여 쉼표 구분자 사용하기

이 단계에서는 tshark 출력의 필드 구분자를 탭에서 쉼표로 변경하는 방법을 배우겠습니다. 이 수정은 데이터를 Excel 과 같은 스프레드시트 응용 프로그램으로 가져오거나 CSV (Comma-Separated Values, 쉼표로 구분된 값) 형식을 예상하는 도구로 분석해야 할 때 특히 유용합니다.

먼저, 탭으로 구분된 출력을 생성하는 이전에 사용했던 기본 명령을 다시 살펴보겠습니다. 이를 통해 무엇을 변경하는지 이해하는 데 도움이 됩니다.

tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port -c 3

이 출력을 CSV 형식으로 변환하려면 -E 옵션을 separator=,와 함께 사용합니다. 이렇게 하면 tshark가 필드 사이에 탭 대신 쉼표를 사용하도록 지시합니다.

tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port -E separator=, -c 3

이 명령의 각 부분이 수행하는 작업을 자세히 살펴보겠습니다.

  • -E separator=,는 구분자를 쉼표로 변경하는 핵심 추가 사항입니다.
  • 다른 모든 옵션 (-r, -T fields, -e fields, -c) 은 이전과 정확히 동일하게 작동합니다.
  • 옵션의 순서는 모두 존재하는 한 중요하지 않습니다.

이 명령을 실행하면 다음과 같이 형식이 지정된 출력이 표시됩니다.

1,192.168.1.1,192.168.1.2,443
2,192.168.1.2,192.168.1.1,80
3,192.168.1.3,192.168.1.4,22

구분자가 실제로 쉼표로 변경되었는지 확인하려면 (특히 탭과 공백을 시각적으로 구분할 수 없는 경우 유용함), 출력을 특수 문자를 표시하는 od -c로 파이프할 수 있습니다.

tshark -r sample.pcap -T fields -e frame.number -e ip.src -E separator=, -c 1 | od -c

이 확인 단계는 출력이 CSV 리더에 의해 올바르게 해석되도록 하는 데 도움이 되며, 이는 다른 도구에서 분석을 위해 데이터를 준비할 때 중요합니다.

> fields.csv 로 파일 내보내기

이 단계에서는 추출된 패킷 데이터를 CSV (Comma-Separated Values, 쉼표로 구분된 값) 파일로 저장하는 방법을 배우겠습니다. CSV 는 표 형식 데이터를 일반 텍스트로 저장하는 간단한 파일 형식으로, 스프레드시트 응용 프로그램 또는 데이터 처리 도구에서 분석하는 데 적합합니다. 패킷 데이터를 파일에 저장하면 나중에 공유, 분석 또는 처리할 수 있는 영구적인 기록을 만들 수 있습니다.

지금까지 배운 모든 것을 결합하여 여러 패킷 필드를 추출하고 파일에 저장하는 단일 명령을 살펴보겠습니다.

tshark -r sample.pcap -T fields -e frame.number -e ip.src -e ip.dst -e tcp.port -E separator=, > fields.csv

각 부분의 기능은 다음과 같습니다.

  • -r sample.pcap는 패킷 캡처 파일을 읽습니다.
  • -T fields는 Tshark 에 필드 출력을 원한다고 알립니다.
  • -e 플래그는 추출할 필드 (패킷 번호, 소스 IP, 대상 IP 및 포트) 를 지정합니다.
  • -E separator=,는 쉼표를 필드 구분자로 설정합니다.
  • > fields.csv는 출력을 화면에 표시하는 대신 파일로 리디렉션합니다.

이 명령을 실행한 후 파일이 제대로 생성되었는지 확인해 보겠습니다.

ls -l fields.csv
head fields.csv

ls -l 명령은 파일 세부 정보를 표시하고, head는 처음 몇 줄을 표시합니다. 출력은 다음과 유사해야 합니다.

1,192.168.1.1,192.168.1.2,443
2,192.168.1.2,192.168.1.1,80
3,192.168.1.3,192.168.1.4,22

이 데이터를 더 이해하기 쉽게 만들기 위해 열 머리글을 추가할 수 있습니다. 머리글이 있는 새 파일을 만들고 데이터를 결합하는 방법은 다음과 같습니다.

echo "Packet,Source,Destination,Port" > headers.csv
cat headers.csv fields.csv > final.csv
mv final.csv fields.csv

이렇게 하면 설명적인 머리글이 맨 위에 있는 새 버전의 CSV 파일이 생성되어 스프레드시트 응용 프로그램에서 데이터를 훨씬 쉽게 사용할 수 있습니다.

요약

이 랩에서는 Wireshark 의 명령줄 도구인 tshark를 사용하여 특정 패킷 필드를 추출하는 방법을 배웠습니다. 연습에서는 -e 플래그로 필드를 선택하고, -T fields로 출력을 형식화하고, 분석을 위해 결과를 파일에 저장하는 방법을 다루었습니다.

또한 frame.number, ip.src, tcp.port와 같은 여러 필드를 구조화된 출력으로 결합하는 연습도 했습니다. 이러한 기술을 통해 원시 패킷 데이터를 네트워크 문제 해결에 적합한 구성된 형식으로 효율적으로 변환할 수 있습니다.