본문 바로가기
Engineering/Network

[tcpdump] 네트워크 패킷 캡쳐하기 (자주 사용하는 옵션 정리)

by 알탱2 2021. 7. 25.
반응형

 첫 직장이 미디어 파일을 송출하는 서버를 개발하는 회사였고, 솔루션이 정상 구동되기 위해 네트워크 구성은 아주 중요한 요소였다. 각 고객마다 복잡한 룰에 의해 관리되고 있는 통신망에 설치를 하다 보니 네트워크에 대한 이해와 테스트는 가장 기본적이고 중요한 항목이었다. 네트워크 전문가는 아니라 모든 문제를 직접 해결할 수는 없지만, 간단히 확인할 수 있는 정보 수집만으로도 문제가 되는 원인을 찾거나 발생하는 지점을 좁혀 문제 해결의 실마리를 찾는데 도움이 될 수 있었다.

 업무를 하며 알게된 Network 관련 명령어 사용법 또는 경험했던 원인 분석 과정 들에 대해 생각나는 것들을 하나씩 정리해 보려고 한다. 그 중 가장 첫번째는 tcpdump 명령어 사용법이다. 현재도 신규 개발된 연동기반 서버를 검증 하거나,  client 검증을 위해 dummy-tool을 개발할 때 자주 활용하고 있다.

 

 tcpdump는 Linux 환경에서 Client와 Server가 주고받는 네트워크 패킷을 TCP Layer에서 캡쳐하여 메세지를 확인할 수 있는 명령어(& 소프트웨어)이다. raw 레벨의 패킷을 파일로 저장할 수 있으며, 잘 알려진 http 등의 메세지는 특정 옵션들을 통해 바로 확인도 가능하다.

 

* tcpdump : tcpdump는 명령 줄에서 실행하는 일반적인 패킷 가로채기 소프트웨어이다. 사용자가 TCP/IP뿐 아니라, 컴퓨터에 부착된 네트워크를 통해 송수신되는 기타 패킷을 가로채고 표시할 수 있게 도와 준다. BSD 허가서를 통해 배포되는 tcpdump는 자유 소프트웨어이다. (출처 : 위키백과)

 


* 보다 더 자세한 사용법과 명령 옵션에 대해서는 "man tcpdump" 를 통해 확인 가능함

 

예제로 확인하는 기본 캡쳐 방법

구성도

기본 명령어 (필자가 자주 사용하는 옵션으로 Client 에서 실행함)

tcpdump -i eth0 port 80 -nn -vv -s0

결과 확인

(Message#1)과 (Message#2)를 주고받기 위한 TCP Packet가 모두 캡쳐됨.

(Message#1)과 (Message#2)를 제외한 앞 뒤에 주고 받은 TCP Packet에 대한 의미는 "TCP 3way handshaking" 참고

 

 

자주 사용하는 명령 옵션 및 예제

-i {interface name}

패킷 캡쳐할 interface를 지정하는 옵션. (필수 지정)

linux에서 ifconfig 명령어를 통해 interface list를 확인한 후, interface를 직접 지정할 수 있음.

어느 interface 인지 모를 경우 {interface_name} 자리에 "any"로 지정하여 모든 interface로 오고가는 패킷을 모두 캡쳐할 수도 있음.

 

예시)

  • tcpdump -i eth0 -nn
  • tcpdump -i ens1 -nn
  • tcpdump -i any -nn
    : 특정 interface가 아니라 lo(loopback)를 포함한 모든 interface로 오고가는 패킷을 캡쳐

 

host {host name or ip} and port {port number}

패킷 중 특정 host 또는 특정 port로 오고가는 패킷만 필터링(filtering)하여 캡쳐할 수 있는 옵션.

지정하지 않을 경우 모든 host와 모든 port로 오고가는 모든 패킷이 캡쳐됨.

host와 port를 모두 지정할 수 도 있고, host 또는 port 중 하나만 지정할 수 도 있음. 만약 port만 지정할 경우 host는 구분하지 않고 port만으로 필터링된 결과를 캡쳐하게 됨.

host와 port를 지정 시, 전송 방향까지 지정하여 src(source), dst(destination) 정보도 함께 지정할 수 있음.

 

예시) 

  • tcpdump -i any -nn host 10.120.0.11 and port 80
    : 패킷의 송신(source) 또는 수신(destination)지의 host가 10.120.0.11이면서 port가 80인 패킷
    : 위 예제에서 Message #1,#2 모두 해당
  • tcpdump -i any -nn host 10.120.0.11
    : 위 예제에서 Message #1,#2 모두 해당되며, 그 외에도 양 서버간 오고가는 모든 Message도 함께 캡쳐됨
  • tcpdump -i any -nn port 80
    : 위 예제에서 Message #1,#2 모두 해당되며, 그 외에도 Client 서버와 80 port로 패킷을 주고받는 모든 서버와의 Message도 함께 캡쳐됨
  • tcpdump -i any -nn dst host 10.120.1.40 and src port 80
    : 위 예제에서 Message #2만 캡쳐됨. 수신지의 host가 10.120.1.40이며, 송신지의 port가 80인 패킷을 의미함

 

-nn

패킷 출력 시, ip address를 hostname으로 출력하지 말고, port를 잘 알려진 protocol로 출력하지 않는 옵션.

[hostname] -nn 옵션을 주지 않으면 10.120.1.40 이라는 ip address가 아닌 "vm-centos7" 이라는 서버의 hostname으로 출력함

[port] -nn 옵션을 주지 않으면 80 이라는 port가 아닌 80 port의 잘 알려진 protocol "http"라는 이름으로 출력함

 

예시)

  • -nn 옵션을 포함했을때 : tcpdump -i eth0 port 80 -nn -vv
  • -nn 옵션을 포함하지 않았을 때 : tcpdump -i eth0 port 80 -vv

 

-vv (더블유 아니고 브이+브이)

패킷을 더 상세하게 출력하는 옵션.

잘 알려진 http protocol의 경우 header & body 메세지를 포함하여 출력해 줌.

 

예시)

  • -vv 옵션을 포함했을 때 : tcpdump -i eth0 port 80 -nn -vv
  • -vv 옵션을 포함하지 않았을 때 : tcpdump -i eth0 port 80 -nn

 

-w {filename} (filename의 확장자는 pcap)

패킷 내용을 화면에 출력하지 않고 raw packet 그대로 file에 write하는 옵션.

화면에 출력되는 내용만으로 패킷의 내용을 확인하기 어렵거나 용량이 큰 패킷의 경우 filename.pcap 파일로 저장한 후, wireshark 등을 통해 파일을 열어 더 상세히 분석하는데 활용할 수 있음.

 

예시)

  • tcpdump -i any -nn host 10.120.0.11 and port 80 -w test.pcap

 

 

-C {max packet size(MB)}

pcap 덤프 파일 1개의 용량이 너무 큰 경우 wireshark 에서 열리지 않는 이슈가 있으며, 파일 handling 하기도 어려울 수 있어 최대 파일 크기를 지정하는 옵션.

옵션으로 설정한 최대 파일 크기를 넘는 경우 파일이 분리되어 생성됨. 

파일을 저장하는 옵션인 -w 옵션과 함께 사용.

상세 사용 방법은 아래 포스트 참고.

https://jinane.tistory.com/120

 

 

[tcpdump] 덤프 파일 사이즈가 커서 wireshark로 열리지 않는 경우를 대비하여 pcap 파일 분할하여 저장

개요 제품 검증을 하다보면 tcpdump 를 사용하여 network packet을 캡쳐하고, 그 데이터를 활용하여 결과 확인을 하는 등에 활용하곤 한다. 최근 담당했던 제품에 request / response packet size가 워낙 크다보

jinane.tistory.com

 

 

 

 

반응형

댓글