무조건 많이 패킷을 저장한다고 해서 얻을 수 있는 것이 많아진다고도 볼 수 없습니다. 패킷을 덤프하는 범위와 목적 그리고 환경적 요인에 따라 이것은 다 달라지기 때문에 어떻게 하시라고 딱 정해드리기는 어렵습니다. 다만 다음과 같은 부분을 고려한다면 패킷파일의 크기를 줄일 수 있으리라 생각됩니다.
1. 패킷 파일 저장시 범위를 명확히 하기
특정IP , 포트번호와 같이 무엇인가 범위를 잡을 수 있는 것이 있다면 범위 지정이 필요합니다.
2. 얼마나 오랜시간동안 저장할 것인가?
패킷 분석 목적에 따라서 달라지지만 얼마동안 저장하느냐에 따라 패킷크기가 크게 달라집니다. 무조건 오래하는 것이 좋은것은 아닙니다. 우선 짧은 시간 패킷을 저장해 보고 대략 패킷파일이 늘어나는 속도와 그 내용을 한번 보고서 시간을 결정하는 것도 좋습니다. 패킷덤프할 시간이 결정되면 파일의 적정크기도 판단하셔서 특정 크기 이상이 되면 다른 파일로 저장되도록 하는 것이 분석시에 편리합니다. 물론 하나의 파일로 모으는 경우가 필요할 경우도 있을것 같습니다. 만약 파일을 저장시에 분할한다면 와이어샤크에서는 패킷 덤프시 옵션을 지정할 수 가 있고, 큰 패킷로 저장을 하였다면 추후에 Split 를 하여 적정 크기로 만들어 분석을 할 수 있습니다. 패킷 분할과 관련해서는 블로그에서 검색해 보시면 몇 가지 방법들이 나옵니다.
3. 패킷저장 포맷 - Pcap vs Pcap-ng
오랜시간동안 패킷을 저장한다면 저장 포맷도 고려해볼 필요가 있습니다. 와이어샤크 최근 버전에서는 기본 포맷이 pcap 에서 pcap-ng 로 변경이 되었습니다. 비교적 최신 버전의 와이어샤크를 사용하신다면 본인도 모르게 패킷파일이 pcap-ng 로 저장되고 있는 것입니다. 가끔 전달받는 패킷의 포맷을 보면 과거보다 확실히 pcap-ng 포맷이 증가된걸 느낄 수 있습니다. pcap-ng 포맷은 pcap 보다 포맷구조가 더 유연해 졌으며 저장되는 내용도 더 많습니다. 최근 포스팅한 pcap-ng 포맷 구조 글을 참고해 보시면 이유를 아실 수 있습니다. 이러한 이유로 부가적인 정보가 더 기록이 되기 때문에 특별히 pcap-ng 포맷이 필요하지 않다면 용량적인 측면에서도 pcap 포맷으로 저장하는 것이 더 유리합니다.
다음의 경우를 한번 살펴보겠습니다. test.pcap 파일은 pcap-ng 포맷파일입니다.
$ file test.pcap
test.pcap: pcap-ng capture file - version 1.0
이 test.pcap 파일은 대략 크기가 2.6 기가 정도가 되는데 pcap 포맷으로 변경하여 한번 비교해 보도록 하겠습니다.
아래와 같이 pcap 포맷으로 변경하여 보면 약 300 메가 정도의 차이를 보입니다.
-rwxr-xr-x 1 root root 2.6G Dec 12 16:09 test.pcap
-rw-rw-r-- 1 root root 2.3G Dec 20 18:00 convert.pcap
만약 여러분이 상당히 오랜시간 패킷파일을 저장한다면 저장되는 패킷 포맷 방식에 따라 파일 크기가 커질 수 있다는 점입니다.
4. 패킷을 다 들여다 볼 것인가?
보통 패킷 덤프시 큰 용량을 차지하는 부분이 패킷의 페이로드 부분입니다. 헤더만 놓고 본다면 그 자체는 크지 않지만 데이터가 들어가면 이게 큰 부분을 차지합니다. 전체 패킷을 다 볼 필요가 없고 일부만 저장해도 된다고 할 경우에는 snaplen 크기를 지정하여 제한할 수가 있습니다. tcpdump 를 사용한다면 -s 를 통해 이 크기를 제한할 수 있습니다. 만약 -s 100 이 된다고 가정하면 패킷당 100 바이트 까지만 저장이 된다는 것이죠. 그렇다면 헤더 정보와 일부 페이로드만이 약간 포함될 것입니다. 물론 데이터를 전체 못 본다는 것은 있지만 여러분들의 필요에 따라 제한하여 저장해도 괜챦다면 이 방법은 패킷파일 크기를 줄이는데 큰 도움을 줄 것입니다.
와이어샤크에서는 캡쳐옵션에서 Limit each packet to "xxx" bytes 옵션을 통해 조정할 수 있습니다.
5. 압축으로 크기를 줄이자
패킷파일은 압축을 할 경우 용량 절약을 크게 볼 수 있는 경우가 많습니다. 저장해서 일정기간 동안 보관해야 하는 경우라면 압축을 해서 보관하는 것이 좋습니다. 물론, 패킷파일이 큰 경우에는 압축을 하고 해제하는데 많은 시간이 소요될 수 있다는 점도 알아두세요!
이상으로 패킷파일 크기를 줄이기 위한 몇 가지 방법을 적어 보았습니다. 패킷파일 저장시 한번쯤 참고해 보셨으면 합니다.
From Rigel
안녕하세요, 궁금한게 있어서 댓글을 달아봅니다.
답글삭제전 지금 Java를 이용해서 Server와 Client 사이의 데이터를 주고 받는 과정에서
pcap을 이용해서 패킷을 내려 받는것까진 api를 이용해서 내려 받았는데,,
그럼 내려 받은 패킷중에서, 내가 원하는 패킷만은 어떻게 받을수 있는지,,음 그런부분이 감이 잡히질 않아서, 이렇게 여쭤 보게 되었습니다. 조언 부탁드리겠습니다.
패킷 덤프는 다 하셨다는 말씀이시죠? 필요한 패킷이 명확하다면 패킷덤프전에 필터를 이용해 제한을 걸어 데이터를 내려 받는게 좋습니다. 데이터를 받은 상태에서는 즉, 이미 덤프된 파일이라면 파일을 읽어들이면서 찾고자 하는 패킷을 찾으면서 걸러내야 합니다. 자바를 이용하고 계시지만 libpcap 기반으로 패킷캡쳐가 많이 이뤄지고 있으니 libpcap tutorial 문서를 참고해 보시면 이해하시는데 도움이 될 것 같습니다. 또는 여기에 기술되어 있는 Scapy 를 이용한 문서를 보셔도 어떤 흐름인지 감을 잡을 수 있으실것 같습니다. 추후에 libpcap 을 이용한 글도 소개해 보도록 하겠습니다
삭제