[리눅스] tcpdump 명령어

tcpdump 명령

tcpdump는 네트워크 패킷을 캡처하는 명령 기반 유틸리티입니다. tcpdump를 사용하면 네트워크를 통해 전송되는 데이터를 실시간으로 모니터링하고 패킷을 캡처 및 분석할 수 있습니다.

tcpdump 기본 구문

tcpdump (options) (expression)

options는 tcpdump에 대한 옵션을 지정하고 expression은 필터 표현식을 지정합니다.

  • host : 지정된 호스트의 IP 주소로만 패킷을 캡처합니다.
  • port : 지정된 포트 번호로 전송된 패킷만 캡처합니다.
  • tcp : TCP 패킷만 캡처합니다.
  • udp : UDP 패킷만 캡처합니다.

1. 기본 사용법

기본적으로 tcpdump를 실행하면 시스템의 첫 번째 네트워크 인터페이스(eth0)에서 수신 대기합니다. 다음 명령은 tcpdump를 실행하여 네트워크를 통해 전송되는 패킷을 모니터링합니다.

sudo tcpdump

위의 명령이 실행되면 tcpdump는 모든 패킷을 캡처하고 패킷을 터미널로 덤프합니다.

2. 인터페이스 지정

tcpdump를 실행할 때 -i 옵션을 사용하여 모니터링할 네트워크 인터페이스를 지정할 수 있습니다. 다음은 eth1 인터페이스에서 패킷을 모니터링하는 명령입니다.

sudo tcpdump -i eth1

3. 수집할 패킷 수 입력

모든 패킷을 무기한 캡처하기 위해 tcpdump를 실행하면 많은 디스크 공간이 필요합니다. 따라서 -c 옵션으로 캡처할 패킷 수를 지정할 수 있습니다. 다음은 tcpdump를 실행하여 10개의 패킷을 캡처하는 명령입니다.

sudo tcpdump -c 10

4. 포트 번호 할당

tcpdump를 사용하여 특정 포트 번호로 전송된 패킷만 캡처하려는 경우 -port 옵션으로 포트 번호를 지정할 수 있습니다. 다음 명령은 포트 80으로 전송된 패킷만 캡처합니다.

sudo tcpdump port 80
sudo tcpdump host 192.168.0.1 and port 80 and tcp
sudo tcpdump not (host 192.168.0.1 and port 80 and tcp)

cap.sh 스크립트

vim cap.sh
#!/bin/bash

tcpdump -c 10000 -s 1560 -vvv -x -nn -i enp0s3 port 53 -w $HOSTNAME-`date \+\%Y\%m\%m%H%M%S`.cap
#tcpdump -c 10000 -s 1560 -vvv -x -nn "port 80" -w $HOSTNAME-`date \+\%Y\%m\%m%H%M%S`.cap
#tcpdump -c 10000 -s 1560 -vvv -x -nn -i bond1 dst host 192.168.0.100 -w $HOSTNAME-`date \+\%Y\%m\%m%H%M%S`.cap
chmod +x cap.sh

tcpdump -qns 0 -X -r mgmt01.4wxyz.com-20170609-10451496972734.pcap