tcpdump는 네트워크 패킷을 캡처하고 분석하는 데 사용되는 강력한 도구입니다. 다양한 옵션을 사용하여 세부적인 네트워크 트래픽을 분석할 수 있습니다. 아래에서 tcpdump의 기본 사용법과 다양한 옵션에 대해 자세히 설명하겠습니다.
기본 패킷 캡처
tcpdump
기본적으로 tcpdump는 시스템의 첫 번째 네트워크 인터페이스에서 패킷을 캡처하고 출력합니다.
특정 인터페이스에서 패킷 캡처
tcpdump -i <인터페이스>
예를 들어, eth0 인터페이스에서 패킷을 캡처하려면:
tcpdump -i eth0
인터페이스 목록을 확인하려면 -D 옵션을 사용할 수 있습니다:
tcpdump -D
패킷 출력 제한
기본적으로 tcpdump는 화면에 출력합니다. 출력의 양을 제한하려면 -c 옵션을 사용합니다:
tcpdump -c 10
위 명령은 10개의 패킷만 캡처하고 종료합니다.
패킷 출력 포맷 변경
패킷의 출력을 더 읽기 쉬운 형식으로 변경하려면 -v, -vv, -vvv 옵션을 사용할 수 있습니다:
tcpdump -v
tcpdump -vv
tcpdump -vvv
패킷 필터링
패킷을 필터링하여 특정 트래픽만 캡처할 수 있습니다. 예를 들어, 특정 포트에서의 트래픽만 캡처하려면:
tcpdump port 80
특정 IP 주소와 포트를 필터링하려면:
tcpdump src 192.168.1.1 and port 80
tcpdump dst 192.168.1.1 and port 80
src는 소스 IP 주소, dst는 목적지 IP 주소를 의미합니다. and, or, not 연산자를 사용하여 복잡한 필터링도 가능합니다.
패킷 내용 출력
패킷의 상세한 내용을 출력하려면 -X 또는 -XX 옵션을 사용합니다:
tcpdump -X
tcpdump -XX
-X는 패킷의 데이터 부분을 16진수와 ASCII 형식으로 출력하고, -XX는 패킷의 전체 데이터 부분을 16진수로 출력합니다.
패킷 저장
패킷을 파일에 저장하려면 -w 옵션을 사용합니다:
tcpdump -w capture.pcap
저장된 파일은 tcpdump 외에도 Wireshark와 같은 패킷 분석 도구에서 열 수 있습니다.
파일에서 패킷 읽기
저장된 패킷 파일을 읽으려면 -r 옵션을 사용합니다:
tcpdump -r capture.pcap
특정 프로토콜 필터링
특정 프로토콜을 필터링할 수 있습니다:
TCP 패킷만 캡처:
tcpdump tcp
UDP 패킷만 캡처:
tcpdump udp
ICMP 패킷만 캡처:
tcpdump icmp
특정 네트워크 범위 필터링
특정 서브넷의 패킷만 캡처하려면:
tcpdump net 192.168.1.0/24
출력 포맷 변경
-n 옵션을 사용하면 호스트 이름을 IP 주소로 출력할 수 있습니다 (DNS 조회를 방지합니다):
tcpdump -n
-nn 옵션은 포트 번호와 프로토콜 이름을 숫자 형식으로 출력합니다.
특정 패킷 길이 필터링
패킷 길이에 따라 필터링할 수 있습니다:
tcpdump less 100
tcpdump greater 1000
less는 지정된 길이보다 짧은 패킷을, greater는 지정된 길이보다 긴 패킷을 캡처합니다.
패킷 헤더 필터링
패킷의 헤더를 필터링하려면 -e 옵션을 사용하여 패킷의 링크 계층 헤더를 출력할 수 있습니다:
tcpdump -e
-e는 이더넷 헤더를 출력합니다.
HTTP 트래픽 캡처
tcpdump -i eth0 port 80
192.168.1.0/24 네트워크의 모든 트래픽 캡처
tcpdump -i eth0 net 192.168.1.0/24
특정 IP 주소로부터의 모든 트래픽 캡처
tcpdump -i eth0 src 10.0.0.1
포트 22(SSH)에서의 트래픽 저장
tcpdump -i eth0 port 22 -w ssh_traffic.pcap
파일에서 패킷 읽기 및 표시
tcpdump -r ssh_traffic.pcap
tcpdump의 -nn 옵션은 패킷 출력 시 호스트 이름과 서비스 이름을 숫자 형태로만 출력하게 만드는 옵션입니다. 이 옵션을 사용하면 다음과 같은 효과를 얻을 수 있습니다:
호스트 이름 대신 IP 주소 출력: -nn 옵션을 사용하면 패킷의 출발지와 목적지 IP 주소를 DNS 조회 없이 숫자로만 표시합니다. 기본적으로 tcpdump는 IP 주소를 호스트 이름으로 변환하여 출력할 수 있습니다. -nn 옵션을 사용하면 이 변환 과정을 건너뛰고 원래 IP 주소 그대로 출력합니다.
포트 번호 대신 서비스 이름 출력: -nn 옵션을 사용하면 포트 번호를 서비스 이름으로 변환하지 않고, 원래의 포트 번호를 그대로 표시합니다. 예를 들어, 포트 80은 기본적으로 "http"로 표시되지만, -nn 옵션을 사용하면 "80"으로 표시됩니다.
-nn 사용 전:
tcpdump -i eth0
출력 예시:
14:20:59.978527 IP myserver.local.ftp > 192.168.1.2.56789: Flags [P.], seq 1234:5678, ack 5678, win 1024, length 123
여기서 myserver.local과 ftp는 호스트 이름과 서비스 이름으로 변환된 것입니다.
-nn 사용 후:
tcpdump -nn -i eth0
출력 예시:
14:20:59.978527 IP 192.168.1.1.21 > 192.168.1.2.56789: Flags [P.], seq 1234:5678, ack 5678, win 1024, length 123
여기서 IP 주소와 포트 번호가 숫자 형태로 그대로 표시됩니다.
이 옵션은 네트워크 문제를 디버깅할 때, IP 주소와 포트 번호를 정확히 확인해야 할 때 유용합니다.