tcpdump 란
유닉스 계열 OS에서 조건식에 만족하는 네트워크를 통해 송수신 되는 패킷 정보를 표시해 주는 프로그램이다.
tcpdump 사용 방법과 다양한 옵션
- CLI 상에서 tcpdump 명령을 입력해서 사용한다.
- 다양한 옵션이 존재하고 조건부 부분에 표현 방식과 범위를 정해 다양한 형식으로 표현할 수 있다.
# tcpdump [옵션] [조건부]
Options
1. -i (특정 인터페이스에서 패킷 캡처)
Command screen은 사용자가 중단할 때까지 실행되고 단순히 tcpdump 명령을 실행하면 모든 인터페이스에서 캡처하지만 -i 옵션을 사용하면 원하는 인터페이스에서만 캡처한다.
2. -c (N개의 패킷만 캡처)
-c 옵션을 사용하면 지정된 수의 패킷을 캡처 할 수 있다. 아래 예제에서는 6개의 패킷만 캡처한다.
3. -A (캡처된 패킷을 ASCII로 표시)
- -A 옵션은 패킷 데이터의 ASCII 문자열로 해석하여 출력한다.
- 일반적으로 tcpdump 명령어는 패킷 데이터를 16진수(hexadecimal)로 출력하게 되어 있다.
- -A 옵션을 사용하면, 패킷 데이터를 ASCII 문자열로 해석하여 출력한다.
- 이는 특정 프로토콜에 대한 분석이나 디버깅 작업을 할 때, 패킷 데이터를 쉽게 이해하고 분석할 수 있도록 도와준다.
- 다만, -A 옵션은 패킷 데이터가 매우 많은 경우, 출력 결과가 매우 길어지기 때문에 주의해서 사용해야 한다.
- 패킷 데이터가 많은 경우에는 -A 옵션 대신 -X 옵션을 사용하여 hexdump와 ASCII 문자열을 함께 출력하는 것이 좋다.
4. -AA
- -AA 옵션은 ASCII로 해석된 패킷 데이터를 출력한다.
- -A 옵션은 ASCII로 해석된 패킷 데이터를 출력하지만, -AA 옵션은 이스케이프 문자를 해석하여 보기 쉽게 출력한다.
- 이렇게 해석된 패킷 데이터는 헤더 및 데이터 영역의 모든 정보를 제공하며, 패킷 분석에 도움이 된다.
- 그러나 -AA 옵션은 패킷 데이터가 매우 많은 경우 출력이 불가능할 정도로 많은 양의 정보가 출력될 수 있기 때문에, 주의해서 사용해야 한다.
5. -D (사용 가능한 인터페이스 표시)
- -D 옵션은 사용 가능한 네트워크 인터페이스를 나열한다.
- 보통 tcpdump 명령어를 실행하면 디폴트 인터페이스로 패킷 캡처가 실행된다.
- 하지만 -D 옵션을 사용하면 해당 호스트에 연결된 모든 인터페이스 리스트를 확인할 수 있다.
- 이때 출력되는 인터페이스 리스트는 해당 호스트에서 사용 가능한 네트워크 인터페이스의 목록을 나열한다.
6. -x
- -x 옵션은 출력되는 패킷 데이터를 16진수(hexadecimal) 형식으로 보여주는 옵션이다.
- 이 옵션을 사용하면 패킷의 내용을 더 자세하게 확인할 수 있다.
- 보통 tcpdump는 패킷을 아스키 코드로 출력하는데, -x 옵션을 사용하면 패킷의 실제 16진수 데이터를 출력해준다. 이 때 16진수 데이터는 각 바이트를 2자리씩 끝어서 출력된다.
- 예를 들어, “hello”라는 문자열의 경우 ASCII 코드로는 다음과 같이 나타낼 수 있다.
0x68 0x65 0x6c 0x6c 0x6f
-x 옵션을 사용하면 위의 데이터가 다음과 같이 출력된다.
0000 68 65 6c 6c 6f hello
따라서 -x 옵션은 패킷의 실제 데이터를 확인할 때 유용하다.
7. -X
- -X 옵션은 패킷 내부의 데이터를 16진수와 ASCII 문자로 출력하는 옵션이다.
- 이 옵션을 사용하면 패킷 데이터를 좀 더 자세하게 확인할 수 있다.
- 기본적으로 -X 옵션은 패킷 헤더와 함께 패킷의 데이터를 출력하며, -v 옵션을 함께 사용하면 패킷의 자세한 정보를 함께 출력한다.
-
- v 옵션은 패킷의 출발지, 목적지, 포트 번호 등의 정보를 출력해주며, -vv 옵션을 사용하면 더 자세한 정볼르 출력할 수 있다.
- 예를 들어 다음과 같은 명령어를 사용하면 패킷의 헤더와 데이터, 그리고 자세한 정보를 모두 출력할 수 있다.
tcpdump -Xvv
8. -XX
- -XX 옵션은 -x 옵션과 유사하지만, 추가로 ASCII 문자열 표현을 더 자세하게 표시한다.
- -x 옵션과 마찬가지로 패킷을 16진수와 ASCII 문자열로 표시하지만, -x 옵션에서는 ASCII 문자열이 출력되는 위치에서 ‘.’으로 표시되는 반면, -XX 옵션에서는 ASCII 문자열의 각 문자가 직접 표시된다.
- 이는 ASCII 문자열이 포함된 패킷을 더 자세하게 분석하고 디버깅하는 데 도움이 된다.
- 예를 들어, -XX 옵션을 사용하여 HTTP GET 요청 패킷을 캡처하면, 16진수와 ASCII 문자열을 모두 표시할 뿐만 아니라 ASCII 문자열의 각 문자를 볼 수 있다.
9. -w (패킷을 캡처하고 파일로 저장)
- -w 옵션은 packet을 저장하는데 사용된다.
- 즉, packet을 dump하여 파일로 저장할 수 있다.
- 이 옵션을 사용하면 tcpdump가 패킷 캡처를 중지하고 대신 지정된 파일 이름으로 패킷 캡처를 저장한다.
- 저장된 파일은 나중에 분석하거나 다른 도구를 사용하여 캡처 데이터를 읽을 수 있다.
- 아래 명령어는 eth0 인터페이스를 사용하여 캡처된 모든 패킷을 capture.pcap 파일로 저장한다.
$ tcpdump -i eth0 -w capture.pcap
10. -r (캡처된 패킷 파일 읽기)
- -r 옵션은 tcpdump를 사용하여 저장된 패킷 파일을 읽어들이는 옵션이다.
- 이 옵션을 사용하면 기존에 저장된 패킷 파일에서 패킷을 읽어들여 분석할 수 있다.
tcpdump -r packets.pcap
11. -n (IP 주소 패킷 캡처)
- -n 옵션은 호스트 이름을 IP 주소로 표시하는 것을 강제한다.
- 이를 통해 DNS 조회를 수행하지 않고도 트래픽을 보다 빠르게 캡처할 수 있다.
- 예를 들어, -n 옵션을 사용하지 않으면, tcpdump는 캡처된 패킷에서 발견되는 모든 IP 주소에 대한 DNS 조회를 시도할 것이다. 이는 패킷 캡처 속도를 늦출 수 있다.
- 따라서 -n 옵션을 사용하여 DNS 조회를 생략하면 패킷 캡처 속도가 향상된다.
tcpdump -n -i eth0
- 위 예제에서, -n은 DNS 조회를 생략하고 eth0는 인터페이스 이름이다.
- 따라서 eth0 인터페이스에서 패킷을 캡처하면서, 모든 IP 주소를 DNS 조회하지 않고 IP 주소 그대로 표시한다.
12. tcp (TCP 패킷만 캡처)
TCP 포트를 기반으로 패킷을 캡처한다.
13. port (특정 포트에서 패킷 캡처)
14. src (출발지 IP에서 패킷 캡처)
15. dst (목적지 IP에서 패킷 캡처)
16. -s
- -s 옵션은 스냅숏 길이(Snaplen)를 지정하는 옵션이다.
- 스냅숏 길이는 캡처할 데이터의 크기를 결정하는 파라미터로, 캡처할 패킷의 전체 길이 중에서 설정한 스냅숀 길이만큼 캡처하게 된다.
- 스냅숏 길이를 짧게 설정하면 캡처되는 데이터가 작아지므로 메모리 사용량이 줄어들어 더 많은 패킷을 캡처할 수 있다.
- 하지만, 설정한 길이보다 긴 패킷은 잘리게 되므로 전체적인 데이터를 볼 수 없게 된다.
- 스냅숏 길이를 길게 설정하면 캡처되는 데이터가 많아지므로 자세한 정보를 볼 수 있게 된다.
- 하지만, 설정한 길이보다 긴 패킷은 모두 캡처되지 않을 수 있다.
- -s 옵션 뒤에 설정하는 값은 바이트 단위의 길이 값이다.
- 예를 들어, -s 100 옵션을 주면 최대 100바이트만큼의 데이터만 캡처된다.
- 만약 -s 0 옵션을 주면 모든 패킷을 전체 길이만큼 캡처하게 된다.
- 기본값은 65535 바이트이다.
17. host
- host 옵션은 특정 호스트를 기준으로 패킷을 필터링하는 옵션이다.
- host 옵션 뒤에는 IP 주소나 호스트명을 입력한다.
- 예를 들어, 다음과 같은 명령어는 91.212.102.12 호스트에서 오는 패킷만 출력한다.
- host 옵션은 src, dst와 함께 사용할 수 있다.
- host 옵션의 기본값은 src와 dst를 모두 포함하는 것이다.
- 예를 들어, 다음과 같은 명령어는 163.152.8.201 에서 128.100.1.22로 가는 패킷만 출력한다.
18. icmp (icmp 패킷만 캡처)
tcpdump icmp
19. -e (이더켓 헤더 정보도 함께 출력)
- -e 옵션은 패킷 정보 출력 시 이더넷 헤더 정보도 함께 출력하도록 설정하는 옵션이다.
- 이더넷 헤더 정보는 목적지 MAC 주소, 출발지 MAC 주소, 프로토콜 등을 포함하고 있다.
- 이러한 이더넷 헤더 정보는 패킷의 출발지와 목적지 등을 파악하는 데 유용하다.
- 위의 출력 결과에서 첫 번째 컬럼에는 패킷이 수신된 시각이 출력되고, 두 번째 컬럼에는 출발지 MAC 주소, 세 번째 컬럼에는 목적지 MAC 주소가 출력된다.
- 그리고 ethertype은 IP 패킷을 의미하며, 이어지는 내용에서는 IP 헤더 정보와 TCP 헤더 정보등이 출력된다.
20. -p (무작위 모드 비활성화)
- -p 옵션은 promiscuous mode(무작위 모드)를 비활성화하는 옵션이다.
- 무작위 모드는 네트워크 인터페이스가 모든 패킷을 캡처하는 모드이면, 이 옵션이 활성화되어 있으면 해당 인터페이스의 모든 트래픽을 캡처한다.
- 하지만, -p 옵션을 사용하면 네트워크 인터페이스가 유니캐스트 패킷만 수신하도록 설정한다.
- 이것은 보안상의 이유로 사용할 수 있다.
- 예를 들어, 로컬 머신에서 동작하는 애플리케이션을 디버깅할 때, 애플리케이션이 수신하는 모든 패킷을 캡처하는 것은 보안 문제를 유발할 수 있으므로 -p 옵션을 사용하여 무작위 모드를 비활성화하고, 수신되는 패킷 중 유니캐스트 패킷만 캡처하도록 설정할 수 있다.
표현 방식
and | && |
or | || |
not | ! |
범위 방식
네트워크 | network, mask |
출발지 | src |
목적지 | dst |
포트 | port |
도메인 | host |
References
[1] tcpdump man page : https://www.tcpdump.org/manpages/tcpdump.1.html