네트워크 패킷, 캡처 tcpdump
서버관리를 하다보면, 서버에 부하가 되는 서비스를 돌리고 있지 않음에도
부하가 걸리면서, 문제가 생길때에 네트워크 문제를 생각을 해볼 수 있으며
해당 명령어를 통해 네트워크 트래픽을 모니터링하고 패킷을 캡처하여 파악해 볼 수 있습니다.
tcpdump란?
– tcpdump은 네트워크 패킷을 캡처하고 분석하는 명령줄 기반의 유틸리티입니다.
주로 리눅스 및 유닉스 기반 시스템에서 사용되며, tcpdump를 사용하면 네트워크 트래픽을 모니터링하고 패킷을 캡처하여 분석할 수 있습니다.
tcpdump를 사용하려면 일반적으로 root 또는 sudo 권한이 필요합니다.
기본적으로 tcpdump는 모든 네트워크 인터페이스에서 패킷을 캡처하며, 특정 인터페이스나 필터링 옵션을 사용하여 원하는 패킷만 캡처할 수도 있습니다.
원하는 조건의 명령어 입력으로 네트워크 패킷 로그를 출력하여 볼 수 있습니다.
Command Line에서 바로 실행하여 볼 수 있고, txt 파일로 저장하여 볼 수도 있습니다.
윈도우에서는 보통 wireshark를 사용합니다.
리눅스 또는 유닉스에서 tcpdump로 패킷 캡쳐한 내용을 파일로 저장하여
윈도우 wireshark로 읽어서 분석할 수 있습니다.
tcpdump의 기본 구문은 다음과 같습니다.
tcpdump [옵션] [필터]
자주 사용하는 명령 옵션입니다.
-i {interface name}
패킷 캡쳐할 interface를 지정하는 옵션입니다. (필수 지정)
linux에서 ifconfig 명령어를 통해 interface list를 확인한 후, interface를 직접 지정할 수 있습니다.
어느 interface 인지 모를 경우 {interface_name} 자리에 “any”로 지정하여 모든 interface로 오고가는 패킷을 모두 캡쳐할 수도 있습니다.
ost {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) 정보도 함께 지정할 수 있습니다.
-nn
패킷 출력 시, ip address를 hostname으로 출력하지 말고, port를 잘 알려진 protocol로 출력하지 않는 옵션입니다.
[hostname] -nn 옵션을 주지 않으면 10.120.1.40 이라는 ip address가 아닌 “vm-centos7” 이라는 서버의 hostname으로 출력합니다.
-vv (브이+브이)
패킷을 더 상세하게 출력하는 옵션입니다.
잘 알려진 http protocol의 경우 header & body 메세지를 포함하여 출력해줍니다.
-w {filename} (filename의 확장자는 pcap)
패킷 내용을 화면에 출력하지 않고 raw packet 그대로 file에 write하는 옵션입니다.
화면에 출력되는 내용만으로 패킷의 내용을 확인하기 어렵거나 용량이 큰 패킷의 경우 filename.pcap 파일로 저장한 후, wireshark 등을 통해 파일을 열어 더 상세히 분석하는데 활용할 수 있습니다.
tcpdump의 명령어 예를 들어보겠습니다
# tcpdump -i eth0 => 여러 네트워크 인터페이스를 사용하는 경우 한 인터페이스만 지정하여 볼 수 있으며
해당 명령어는 eth0 인터페이스 만을 볼 수 있습니다.
# tcpdump -w tcpdump.log => bin 형식으로 결과를 파일로 저장합니다.
# tcpdump -r tcpdump.log => 저장한 파일을 읽습니다.
# tcpdump -nni eth0 -c 10 => eth0으로 들어오는 패킷 10개만 보여줍니다.
# tcpdump -nni eth0 tcp port 80 => tcp 80번 포트로 통신하는 패킷을 보여줍니다.
# tcpdump -nni eth0 dst 192.168.0.10 => destination ip가 192.168.0.10인 패킷을 보여줍니다.
# tcpdump -nni eth0 src 192.168.0.10 => source ip 가 192.168.0.10인 패킷을 보여줍니다.
# and 옵션을 통해 여러가지 조건을 조합하여 사용할 수 있습니다.
# tcpdump -nni eth0 udp and host 192.168.0.10 = 192.168.0.10 호스트의 udp 패킷만 보여줍니다.
# tcpdump -w tcpdump.log -nni eth0 dst 192.168.0.10 and tcp and port 514 => 목적지 ip가 192.168.0.10인 곳으,로 512포트를 사용하는 tcp 패킷을 tcpdump.log 파일에 저장합니다.
참고 링크 : https://mkil.tistory.com/482