본문 바로가기
IT

리눅스 Tcpdump 사용법

by 미니송 2017. 9. 22.

리눅스 Tcpdump 사용법


이번 포스팅은 리눅스 tcpdump 사용법에 대해 하겠습니다. tcpdump는 명령 줄에서 실행하는 일반적인 패킷 캡쳐 소프트웨어입니다. 패킷 sniffing이라고 하는데 패킷을 훔쳐볼 수 있는 것입니다.


패킷 캡쳐 프로그램을 사용할 때는 항상 주의하시기 바랍니다. 테스트용으로 테스트한다고 하여도 개인 또는 기업의 네트워크에 무단으로 침입하여 패킷 캡쳐를 하는 것은 법적 제재를 받을 수 있습니다. 불이익은 사용자 개인에게 돌아갑니다.


사용자가 TCP/IP뿐 아니라 컴퓨터에 부착된 네트워크를 통해 송수신되는 기타 패킷을 가로채고 표시할 수 있게 도와 줍니다. BSD 허가서를 통해 배포되는 tcpdump는 자유 소프트웨어입니다.


tcpdump는 리눅스, 솔라리스, BSD, OS X, HP-UX, AIX 따위의 대부분의 유닉스 계열 운영 체제에서 동작하며 여기서 libpcap 라이브러리를 사용하여 패킷을 획득합니다. 윈도우용 tcpdump 이식판으로는 WinDump가 있으며, 이는 libpcap의 윈도 이식판인 WinPcap을 이용합니다. 이러한 엔진을 이용한 Wireshark(구 이더리얼)이 있습니다.


윈도우에서 이용할 목적이라면 와이어샤크를 사용하는게 더 편할 수 있으며 와이어샤크에 대해 한 포스팅에 대해 읽어본다면 도움이 될 것입니다.


2017/09/11 - [IT] - Wireshark(와이어샤크) 기본 사용방법



같은 엔진을 사용해서 패킷을 캡쳐하기 때문에 동작은 같다고 보시면 됩니다. 하지만 tcpdump는 그래픽 환경이 지원되지 않습니다. 따라서 보기 불편한 감도 있으며 보는데 적응해야 합니다.


스크린 캡쳐한 환경은 Vmware Centos 7 64bit환경과 라즈베리파이3에 라즈비안이 설치되어 있는 환경입니다.

 

tcpdump 설치법

대부분은 tcpdump를 설치하지 않아도 기본적으로 설치되어 있을 것입니다. 따라서 tcpdump가 설치되어 있는지 확인하는 방법은 명령어를 실행해 보는 것입니다. tcpdump 명령어를 실행하였을 때 실행되지 않으면 tcpdump가 설치되어 있지 않은 것입니다.

tcpdump --help 명령어를 쳐봅니다.


치고 난 후 -bash: tcpdump: command not found라는 명령어가 나온다면 설치되어 있지 않은 것입니다. 따라서 tcpdump를 설치해 주셔야 합니다.

yum install tcpdump 명령어를 통해서 설치해주도록 합니다.

 

tcpdump 사용법

tcpdump 사용법은 터미널 창에 tcpdump명령어를 치면 됩니다. 어려울 것은 없으나 자신이 보고 싶은 인터페이스를 지정하는 등 기본적인 사용법이 있습니다. 원하는 인터페이스나 포트를 지정해야 하며 텍스트 환경에서 진행되므로 패킷을 잡으면 바로 올라오면서 뜨는 것을 볼 수 있습니다.

명령어는 다음과 같습니다. man tcpdump를 이용해서 tcpdump의 사용법을 볼 수 있습니다.



tcpdump 명령어 옵션 정리


-A

Ascii의 약자입니다. 패킷의 내용을 화면에 ASCII로 보여줍니다.


-B

buffer_size의 약자입니다. 운영 체제가 캡처 하는 버퍼 크기를 buffer_size로 바꿉니다.


-c

count의 약자로 주어진 수의 패킷을 받은 후 종료합니다.


-C

캡쳐한 패킷을 저장파일로 만들기 전에 파일이 file_size보다 큰지 체크합니다. 만약 그렇다면, 현재 저장파일을 닫고 새로 하나를 열게 됩니다. 저장된 파일의 이름은 -w 기호를 이용해 1부터 시작해 하나씩 늘어납니다.


-d

컴파일된 packet-matching code를 사람이 읽을 수 있는 표준형으로 바꾼 후 멈춥니다.


-dd

packet-matching 코드를 C 프로그램의 일부로 표현합니다.


-ddd

packet-matching 코드를 십진수로 표현합니다.


-D

tcpdump가 패킷을 잡을 수 있는 시스템 상에 가능한 네트워크 인터페이스 목록을 출력해 줍니다. 각각의 네트워크 인터페이스에는 번호와 인터페이스 이름이 매겨져 있어야 하고 그에 해당하는 설명이 덧붙여져 있어야 합니다. 이 인터페이스는 밑에 있는 -i옵션을 통해 지정해줄 수 있습니다.


-e

링크 레벨 헤더를 각각 덤프라인에 출력합니다.


-f

외부 IPv4 주소를 되도록 심볼(상징적)이 아닌 숫자로서 표현합니다.


-F

파일을 필터식(filter expression)으로 입력한다. 추가적으로 명령창에 입력된 식은 무시됩니다.


-G

이 옵션을 지정하면 덤프 파일을 -w 옵션으로 매 초마다 회전해 회전된 덤프파일을 저장합니다. 저장된 파일은 -w 옵션으로 strftime으로 시간 정보가 정의 되어 이름에 포함되어야 합니다. 만약 시간 형식이 저장되지 않으면 매번 새로운 파일은 원래 있던 파일에 덮어 씌워 진다. 만약 -C 옵션과 함께 쓰인다면 이름은 'file<count>'형식으로 저장됩니다.


-i

가장 중요한 옵션입니다. 캡쳐할 수 있는 인터페이스를 지정할 수 있습니다. 정해지지 않았으면 tcpdump는 시스템 인터페이스 목록에서 가장 낮은 숫자를 골라 캡쳐하게 됩니다.


-I

인터페이스를 "monitor mode"로 놓습니다. 이는 IEEE 802.11 와이파이 인터페이스에서만 작동되고 몇몇 운영 체제에서만 지원됩니다.

 

-n

호스트의 주소를 이름으로 바꾸지 않습니다. 이 명령어를 사용하지 않으면 IP주소가 나오지 않고 호스트의 주소로 표현이 됩니다.


-nn

프로토콜과 포트번호를 이름으로 바꾸지 않습니다. 이 옵션을 사용하지 않으면 포트번호와 프로토콜이 숫자로 나오지 않고 이름으로 나오게 됩니다.


-p

인터페이스는 promiscuous모드로 동작시키지 않습니다.


-S

TCP시퀀스 넘버를 상대값이 아닌 절대값으로 나타냅니다.

 

tcpdump는 정규표현식을 사용할 수 있으며 and or같은 연산자도 사용할 수 있습니다.

명령어의 형식대로 작성해보도록 하겠습니다.


tcpdump -D를 이용하여 가능한 인터페이스를 봐도 되지만 ifconfig명령어를 이용하여서 자신이 스니핑할 인터페이스를 지정하는 것도 가능합니다.

만약 포로토콜과 포트번호를 이름으로 바꾸지 않고 보고 싶으며, 원하는 인터페이스인 ens33인터페이스를 캡쳐하고 싶다면


tcpdump -nn -i ens33 와 같이 실행하면 됩니다.



주의점은 다음과 같이 실행하면 현재 ens33(인터페이스 이름)에 있는 인터페이스의 모든 패킷을 캡쳐하기 때문에 빠르게 잡히는 것을 볼 수 있습니다. 따라서 원하는 패킷을 볼 수 없습니다. 그렇기 때문에 원하는 주소나 포트를 지정해주는 것이 좋습니다.


만약 HTTP의 패킷을 보고 싶다면 tcpdump -nn -i ens33 port 80이라고 지정해두면 80포트를 사용하는 패킷을 잡을 수 있습니다.



또한 파일로 저장하여 볼 수 있는 방식도 있습니다. 파일로 저장해서 보는 방법은 나중에 다시 포스팅하도록 하겠습니다.

댓글