[TCPDUMP] Tcpdump 설치 및 사용하기
by Choi HyeSun
TCPDUMP란?
-
명령 줄에서 실행하는 일반적인 패킷 가로채기 소프트웨어
-
사용자가 TCP/IP뿐 아니라, 컴퓨터에 부착된 네트워크를 통해 송수신되는 기타 패킷을 가로채고 표시할 수 있게 도와줌
-
다음 내용들을 확인할 수 있음
-
특정 이더넷을 거쳐가는 모든 패킷의 헤드를 캡쳐
-
특정 이더넷을 거쳐가는 패킷 전체를 캡쳐
-
이 시스템과 원격지의 대상호스트 사이에 송수신되는 패킷 헤더 또는 패킷 전체 캡쳐
-
이 시스템과 원격지 대상 호스트 간의 모든 패킷들 가운데 특정 포트번호(혹은, 특정 서비스)로 송수신되는 패킷 헤더 혹은 패킷 전체를 캡쳐
-
패킷을 캡쳐하여 특정 파일에 저장할 수 있으며 저장된 파일 내용 확인은 –r 옵션을 사용
-
설치
사용법
-
tcpdump [ -AdDefIKlLnNOpqRStuUvxX ][ -B buffer_size ][ -c count ][ -C file_size ][ -G rotate_seconds ][ -F file ][ -i interface ][ -m module ][ -M secret ][ -r file ][ -s snaplen ][ -T type ][ -w file ][ -W filecount ][ -E spi@ipaddr algo:secret,… ][ -y datalinktype ][ -z postrotate-command ][ -Z user ]
-
옵션
-
-A : 패킷의 내용을 화면에 ASCII로 보여줌
-
-B : 운영 체제가 캡쳐하는 버퍼 크기를 buffer_size로 바꿈
-
-c : 주어진 수의 패킷을 받은 후 종료
-
-C : 방금 받은 패킷을 저장파일로 만들기 전에 파일이 file_size보다 큰지 체크
만약 크다면, 현재 저장파일을 닫고 새로 하나를 엶.
저장된 파일의 이름은 –w 기호를 이용해 1부터 시작해 하나씩 늘어남.(1,048,576 바이트가 아니라 1,000,000,000바이트이다.) -
-d : 컴파일된 packet-matching code를 사람이 읽을 수 있는 표준형으로 바꾼 후 멈춤
-
-dd : packet-matching code를 C 프로그램의 일부로 표현
-
-ddd : packet-matching 코드를 십진수로 표현
-
-D : tcpdump가 패킷을 잡을 수 있는 시스템 상에 가능한 네트워크 인터페이스 목록을 출력
각각의 네트워크 인터페이스에는 번호와 인터페이스 이름이 매겨져 있어야 하고 그에 해당하는 설명이 덧붙여져 있어야 함
이 기능은 tcpdump가 오래된 버전일 경우에 지원되지 않을 수 있음 -
-e : 링크 레벨 헤더를 각각 덤프라인에 출력
-
-f : 외부 IPv4 주소를 되도록 심볼(상징적)이 아닌 숫자로서 표현
-
-F : 파일을 필터식(filter expression)으로 입력
추가적으로 명령창에 입력된 식은 무시 -
-G : 이 옵션을 지정하면 덤프 파일을 -w 옵션으로 매 초마다 회전해 회전된 덤프파일을 저장
저장된 파일은 -w 옵션으로 strftime으로 시간 정보가 정의 되어 이름에 포함되어야 함
만약 시간 형식이 저장되지 않으면 매번 새로운 파일은 원래 있던 파일에 덮어 씌워짐
만약 -C 옵션과 함께 쓰인다면 이름은 ‘file'형식으로 저장 -
-i : 인터페이스를 정함
정해지지 않았으면 tcpdump는 시스템 인터페이스 목록에서 가장 낮은 숫자를 선택 -
-I : 인터페이스를 “monitor mode”로 놓음
이는 IEEE 802.11 와이파이 인터페이스에서만 작동되고 몇몇 운영 체제에서만 지원
-
TCPDUMP 예제
-
tcpdump -i eth0
→ 인터페이스 eth0 을 보여줌 -
tcpdump -w tcpdump.log
→ 결과를 파일로 저장, txt 가 아닌 bin 형식으로 저장됨 -
tcpdump -r tcpdump.log
→ 저장한 파일을 읽음 -
tcpdump -i eth0 -c 10
→ 카운터 10개만 보여줌 -
tcpdump -i eth0 tcp port 80
→ tcp 80 포트로 통신하는 패킷 보여줌 -
tcpdump -i eth0 tcp port 80
→ tcp 80 포트로 통신하는 패킷 보여줌 -
tcpdump -i eth0 src 192.168.0.1
→ source ip가 192.168.0.1인 패킷 보여줌 -
tcpdump -i eth0 dst 192.168.0.1
→ dest ip가 192.168.0.1인 패킷 보여줌 -
and 옵션으로 여러가지 조건의 조합 가능
- tcpdump -i eth0 src 192.168.0.1 and tcp port 80
→ source ip가 192.168.0.1이면서 tcp port 80인 패킷 보여줌
- tcpdump -i eth0 src 192.168.0.1 and tcp port 80
-
tcpdump -i eth0 dst 192.168.0.1
→ dst ip가 192.168.0.1인 패킷 보여줌 -
tcpdump host 192.168.0.1
→ host를 지정하면, 이 ip로 들어오거나 나가는 양방향 패킷 모두 보여줌 -
tcpdump src 192.168.0.1
→ host 중에서 src가 192.168.0.1인 것만 지정 -
tcpdump dst 192.168.0.1
→ host 중에서 dst가 192.168.0.1인 것만 지정 -
tcpdump net 192.168.0.1/24
→ CIDR 포맷으로 지정할 수 있음 -
tcpdump tcp
→ TCP 인것만 -
tcpdump udp
→ UDP 인것만 -
tcpdump port 3389
→ 포트 양뱡항으로 3389인 것. -
tcpdump src port 3389
→src 포트가 3389인 것. -
tcpdump dst port 3389
→dst 포트가 3389인 것. -
combine : and ( && ) , or ( || ) , not ( ! ) 으로 여러가지를 조합해서 사용 가능
-
tcpdump udp and src port 53
→ UDP이고 src 포트가 53인 것 -
tcpdump src x.x.x.x and not dst port 22
→ src ip가 x.x.x.x 이고 dst 포트가 22가 아닌 것
-
-
grouping : ( )
- tcpdump ‘src x.x.x.x and ( dst port 3389 or 22 )’
→ src ip가 x.x.x.x이고 ( dst 포트가 3389 또는 22 )인 것
→ 여기서는 ‘ ‘ 가 반드시 있어야 함
- tcpdump ‘src x.x.x.x and ( dst port 3389 or 22 )’
-
개인적으로 자주 쓰는 조합
-
tcpdump -l -i eth0 -A -s 0 ‘ip src ip주소’ -w 파일명.pcap
-
tcpdump -l -i any -A -s 0 ‘tcp dst port 포트번호’ -w 파일명.pcap
-
tcpdump -l -i eth1 host 도메인 -w 파일명.pcap
-
tcpdump -l -i any -A -s 0 ‘ip src ip주소1 or dst ip주소2’ -w 파일명.pcap
-
Subscribe via RSS