일전에 mergecap 을 통해 패킷파일을 합치는 방법에 대해서 포스팅을 하였다.
[참고] 여러개의 패킷파일 하나로 합치기 (using mergecap)
이외에 와이어샤크 GUI 화면을 통해서도 쉽게 패킷파일을 합칠수 가 있다. 메뉴에서 File -> Merge 를 선택하면 아래와 같은 화면이 나타난다. 기존 선택한 패킷파일 외 다른 Merge 할 패킷 파일을 선택하는 것이다.
선택할 옵션이 3가지 나타나는데 Prepend 는 패킷파일의 앞쪽에 Chronologically 는 시간 순서대 별로 Append 는 뒤쪽에 패킷파일을 이어 붙인다. Merge 전 패킷파일은 이미 저장되어 있는 상태여야 하고 위 옵션을 통해 쉽게 통합할 수 있다.
좀더 GUI 를 효과적으로 이용할 수 있는 방법은 마우스를 이용해 파일을 Drag&Drop 하는 것이다. 한개의 패킷파일을 선택하여 사용하는 경우 해당 파일이 대체되어 오픈되지만, 여러개의 패킷파일을 동시에 Drag&Drop 하는 경우 Merge 를 하려고 시도할 것이다.
명령어를 이용하는 것 보다는 GUI 의 장점을 이용할 수 있는 방법으로, 좀더 편하게 사용이 가능하다.
2012년 9월 12일 수요일
2012년 8월 24일 금요일
여러개의 패킷파일 하나로 합치기 (using mergecap)
블로그에서 패킷분할과 관련해서는 몇 가지 포스팅 된 글이 있는데, 여러 패킷을 한개로 합치는 것은 지금 찾아보니 소개한 적이 없었다. 이미 와이어샤크에 기능이 포함되어 있었는데 말이다.
여러개의 패킷을 한개로 합치는 방법은 와이어샤크에서 제공해주는 'mergecap' 을 이용하는 것이 편리하다. 기본 사용방법은 다음과 같다:
기본적으로 패킷파일들이 하나로 합쳐질 때는 패킷 프레임의 시간에 기준하여 합쳐지게 된다. 이러한 방법이 아니라 끝에다 이어붙이기를 할 수도 있는데, -a 옵션을 사용하면 된다. 첫번째 입력으로 주어진 파일 뒤쪽에 두번째 주어진 패킷파일이 이어진다.
패킷 덤프를 할 경우에도 snaplen 길이를 정의하여 패킷의 얼마만큼을 볼 것인지 정의할 수 있었다. 합치는 경우에도 -s 로 snaplen 을 정의하여 지정된 바이트 만큼으로 패킷을 잘라낸다.
합쳐질 패킷파일의 캡슐화 타입을 정의할 수 있다. -T 옵션 다음에 정의해 주면 되고, 인자값 없이 -T 만 사용하면 캡슐화로 사용가능한 목록을 살펴볼 수 있다. 기본적으로는 처음 입력으로 들어오는 패킷파일의 타입을 사용하게 된다.
캡슐화에 대해 궁금한 분들은 다음 포스팅을 참고해 보기 바란다.
"패킷을 보다 자주 접하는 캡슐화(Encapsulation)는 무엇이지?"
http://www.packetinside.com/2011/03/encapsulation.html
와이어샤크에서 제공해주는 mergecap 파일외 파이썬으로 제작된 FLAG(Forensic and Log Analysis GUI)에서 제공해주는 mergecap.py 파일을 이용해 볼 수도 있다.
http://code.google.com/p/pyflag/source/browse/utilities/mergecap.py
여러개의 패킷을 한개로 합치는 방법은 와이어샤크에서 제공해주는 'mergecap' 을 이용하는 것이 편리하다. 기본 사용방법은 다음과 같다:
Usage: mergecap [options] -w <outfile>|- <infile> ...
Output:
-a concatenate rather than merge files.
default is to merge based on frame timestamps.
-s <snaplen> truncate packets to <snaplen> bytes of data.
-w <outfile>|- set the output filename to <outfile> or '-' for stdout.
-F <capture type> set the output file type; default is libpcap.
an empty "-F" option will list the file types.
-T <encap type> set the output file encapsulation type;
default is the same as the first input file.
an empty "-T" option will list the encapsulation types.
Miscellaneous:
-h display this help and exit.
-v verbose output.
mergecap 을 이용해 -w 로 합쳐질 파일 이름을 지정해 주고, 그 뒤로 합칠 패킷파일들을 나열해 주면 된다. -v 옵션은 추가적인 동작 정보를 제공해 준다.
$ mergecap -v -w output.pcap input1.pcap input2.pcap
패킷 파일 이어붙이기
$ mergecap -v -w output.pcap input1.pcap input2.pcap -a
특정 길이로 한정해서 합치기
$ mergecap -v -w output.pcap input1.pcap input2.pcap -s 1000
캡슐화 타입 정의하기
$ mergecap -v -w output.pcap -T ether input1.pcap input2.pcap
캡슐화에 대해 궁금한 분들은 다음 포스팅을 참고해 보기 바란다.
"패킷을 보다 자주 접하는 캡슐화(Encapsulation)는 무엇이지?"
http://www.packetinside.com/2011/03/encapsulation.html
와이어샤크에서 제공해주는 mergecap 파일외 파이썬으로 제작된 FLAG(Forensic and Log Analysis GUI)에서 제공해주는 mergecap.py 파일을 이용해 볼 수도 있다.
http://code.google.com/p/pyflag/source/browse/utilities/mergecap.py
2010년 7월 16일 금요일
윈도우에서 마우스한번으로 패킷파일(PCAP)을 빠르고 쉽게 분할하여 보자!
이전 포스팅에서 패킷파일을 자르기 위한 방법을 몇 가지 소개하였다. 유닉스 기반에서는 주로 콘솔 기반에서 사용하다 보니 명령어를 하나 호출하여 사용하면 금방 되지만 GUI 환경으로 주로 사용하는 윈도우에서는 패킷 파일 한번 자르려면 도스창을 열어야 하고 귀챦은 점이 있다. 간단한 방법을 통해 한번에 이 문제를 해결할 수 있는 방법을 소개하고자 한다.
[과거 PCAP 분할과 관련된 글]
- 2010/05/05 Rigel TCP, UDP 세션별로 패킷(PCAP) 파일 분할하기
- 2010/01/27 Rigel 100 기가 가 넘는 패킷 파일이라고 ?
- 2010/01/19 Rigel pcap-util 을 이용한 또 다른 패킷 분할 방법
- 2010/01/18 Rigel 분석할 패킷 데이터 크기가 큰 경우는 이렇게 하자!
어떤 방법이 가장 쉬울까 하고 생각해 보았더니, 오른쪽 마우스를 클릭했을때 메뉴로 등록하는 것이 가장 빠른 방법 같았다. 오른쪽 마우스를 클릭했을때 나타나는 메뉴는 레지스트리를 수정하는 것만으로도 쉽게 만들 수 있으므로, 가장 최적의 방법이다.
우선, 여기서는 와이어샤크에 기본으로 포함되어 있는 editcap.exe 를 사용할 것이다. 그러므로 어느 경로에서나 실행될 수 있도록 패스 경로에 넣어두는 것이 필요하다. 어느 경로에서나 editcap 을 실행할 수 있다면 일단 기본 준비는 완료되었다. 그 다음은 레지스트리를 수정하는 것이다.
1. regedit 를 실행
2. HKEY_CLASSES_ROOT\*\Shell 아래에 내가 원하는 것을 만들어 넣으면 메뉴로 쉽게 추가가 가능하다.
그리고 다음의 명령어를 실행하는 것이다.
editcap.exe -c 300000 %1 %1_split.pcap
-c 옵션은 패킷 파일당 30만개씩을 넣는 것이고, %1 은 받아들이는 인자명이다. 즉, 이 명령어를 실행하면 패킷파일을 30만개씩 나누라는 것이다. 자 그럼 레지스트리에 등록하는 것으로 끝이난다. 막상 레지스트리 찾아서 입력하려고 하면 귀챦다. 그래서 아래와 같이 자동으로 입력될 수 있도록 만들어 보았다.
;
; "Spliting Network Packet File(PCAP) - SplitCap"
; Are you looking for packet information? please visit following site.
; http://packetinside.com
; written by Rigel
[version]
signature="$CHICAGO$"
[SplitCapInstall]
AddReg = SplitCap.Reg
[DefaultInstall]
AddReg = SplitCap.Reg
[SplitCap.Reg]
HKCR,*\Shell\SplitCap,,,"%SplitCapName%"
HKCR,*\Shell\SplitCap\command,,,"cmd.exe /c editcap.exe -c 300000 %1 %1_split.pcap"
[Strings]
SplitCapName="SplitCap"
; "Spliting Network Packet File(PCAP) - SplitCap"
; Are you looking for packet information? please visit following site.
; http://packetinside.com
; written by Rigel
[version]
signature="$CHICAGO$"
[SplitCapInstall]
AddReg = SplitCap.Reg
[DefaultInstall]
AddReg = SplitCap.Reg
[SplitCap.Reg]
HKCR,*\Shell\SplitCap,,,"%SplitCapName%"
HKCR,*\Shell\SplitCap\command,,,"cmd.exe /c editcap.exe -c 300000 %1 %1_split.pcap"
[Strings]
SplitCapName="SplitCap"
위 내용을 splitcap.inf 파일로 저장하자. (또는 splitcap.inf 다운로드) 그리고 저장한 splitcap.inf 에서 오른쪽을 클릭하면 Install 또는 설치 라는 메뉴를 볼 수 있다. 선택을 해주면 자동으로 레지스트리에 삽입이 된다.
입력된 내용은 아래와 같다:

※ 잘못된 레지스트리의 사용은 시스템에 영향을 줄 수 있으므로, splitcap.inf 의 사용 및 직접 레지스트리 수정에 의한 어떤 영향도 필자는 책임을 질 수 없다.
레지스트리에 삽입이 되면 이제 분할 할 패킷파일에서 오른쪽 마우스 클릭하여 선택하는 것만으로 쉽게 파일을 자를 수 있다.

위 예에서 300 메가 되는 파일에서 SplitCap 을 선택하였더니 , 아래와 같이 한번에 파일이 분할 되었다.

대략 23 메가 정도의 크기로 잘라졌는데, 이 정도면 PC 에서 읽어 들이는데도 문제 없을 것이다. 분명 300 메가 단일 파일을 읽는 것보다는 좋을 것이다. 앞서 -c 로 지정된 값은 여러분들이 사용하는 컴퓨터의 사용에 따라 적절하게 조정하면 된다.
이 정도면 윈도우에서 불편했던 패킷파일 자르기가 어느정도 해결이 되지 않을까?
From Rigel
P.S 이 글을 거의 다 써 놓은 시점에서 브라우저가 깨지는 바람에 썻던 글을 모두 날리고 다시 쓴 글이다. 똑같은 내용을 다시 쓰려니 어찌나 맘이 아프던지. 앞으로는 자주 저장하거나 특단의 방법을 마련해야 할 것 같다 ^^
2010년 1월 19일 화요일
pcap-util 을 이용한 또 다른 패킷 분할 방법
패킷파일이 큰 경우 Editcap 과 tcpslice 를 이용하여 패킷을 분할하는 방법에 대해서 알아보았는데, 추가로 다른 유용한 툴 한가지를 더 소개하고자 한다. 펄(Perl)로 만들어진 것으로, 사용법도 간단하고 오히려 쉽게 사용할 수 있는 부분이 있는거 같아 유용할 것이다.
파일은 다음의 경로에서 받을 수 있다.
일단, pcap-util 을 실행해 보면 옵션은 크게 split, time, filter 로 나뉘어져 있다.
tmp# ./pcap-util
This utility will take a pcap file from a packet capture program like tcpdump
and split it into smaller parts to aid analysis. There are three options.
1. You can split the file into several smaller ones of x bytes in length
2. You can extract packets that fall within a specified time period
3. You can extract packets that match a libpcap filter string.
Split into smaller files
------------------------
./pcap-util split <infile> <outfile prefix> <size in MB>
Extract packets from time period
--------------------------------
./pcap-util time <infile> <outfile> <Start time> <End time>
Extract packets using libpcap filter language
---------------------------------------------
./pcap-util filter <infile> <outfile> "libpcap filter string"
** Time format should be YYYY-MM-DD:hh:mm:ss **
/tmp# ./pcap-util split rigel.pcap output.pcap 1 Writing file output.pcap.0.tcpdump Writing file output.pcap.1.tcpdump Writing file output.pcap.2.tcpdump Writing file output.pcap.3.tcpdump Writing file output.pcap.4.tcpdump Writing file output.pcap.5.tcpdump Writing file output.pcap.6.tcpdump Writing file output.pcap.7.tcpdump Writing file output.pcap.8.tcpdump ====> Done <==== /tmp# ls -l total 93368 -rw-r--r-- 1 root root 1023460 2010-01-19 08:54 output.pcap.0.tcpdump -rw-r--r-- 1 root root 1023472 2010-01-19 08:54 output.pcap.1.tcpdump -rw-r--r-- 1 root root 1023490 2010-01-19 08:54 output.pcap.2.tcpdump -rw-r--r-- 1 root root 1023466 2010-01-19 08:54 output.pcap.3.tcpdump -rw-r--r-- 1 root root 1023498 2010-01-19 08:54 output.pcap.4.tcpdump -rw-r--r-- 1 root root 1023676 2010-01-19 08:54 output.pcap.5.tcpdump -rw-r--r-- 1 root root 1023570 2010-01-19 08:54 output.pcap.6.tcpdump -rw-r--r-- 1 root root 1023559 2010-01-19 08:54 output.pcap.7.tcpdump -rw-r--r-- 1 root root 83061 2010-01-19 08:54 output.pcap.8.tcpdump -rwxr-xr-x 1 root root 8736 2009-08-30 18:16 pcap-util -rw-r--r-- 1 root root 8271060 2010-01-18 09:25 rigel.pcap타임은 "YYYY-MM-DD:hh:mm:ss" 와 같은 포맷으로 시간을 지정하여 사용하면 된다. filter 는 걸러진 파일에 대해서만 추출하여 저장한다. 아래 예제는 cl.exe.pcap 에서 TCP 이며 목적지 포트가 80 번 인것을 대상으로 output.pcap 에 저장하고 있다.
/tmp# ./pcap-util filter cl.exe.pcap output.pcap "tcp and dst port 80" Writing packets matching "tcp and dst port 80" to output.pcap ====> Done <==== /tmp# ls -l total 88948 -rw-r--r-- 1 root root 2334504 2010-01-19 09:01 cl.exe.pcap -rw-r--r-- 1 root root 1442126 2010-01-19 09:02 output.pcapcl.exe.pcap 이 2.3 메가 정도 였는데, 80 번포트로 걸러낸 것은 1.4 메가 정도 나온다. 이 외에 유용한 것이 있으면 알려주세요.
2010년 1월 18일 월요일
분석할 패킷 데이터 크기가 큰 경우는 이렇게 하자!
요새는 고속의 네트워크로 연결되어 있고, 전송되는 데이터의 크기도 커지고 많아지다 보니 패킷 데이터 캡쳐시 패킷 파일 크기 또한 상당히 커지게 된다. 50M 이상의 크기를 읽어 들이기 시작하면 컴퓨터의 메모리 또한 많이 차지하고 분석하기에도 여간 불편해 지는 것이 아니다.
필터를 한번 적용하거나, 기타 작업을 수행할 때 속도가 느려지는 것은 당연하다.
이럴때는 분석할 패킷을 분할하여 하는 것이 효과적이다. 몇 십,몇 백메가가 되는 파일을 한번에 읽어들이면 속이 타는 것은 분석가들의 마음일 뿐이다. 어떤 방법들이 있는지 한번 알아보도록 하자.
우리가 흔히 유닉스 환경에서 사용하던 split 명령을 기억할 것이다. 이름에서 느껴지는 것과 같이 split 는 파일을 분할해 주는 것이다. 아래 화면은 -l 옵션을 사용해 1000 라인 단위로 inside.pcap 파일을 분할 하였고, 분할된 패킷은 xaa, xab, xac ... 와 같이 차례대로 분리 되었다.
# split -l 1000 inside.pcap
-rw-r--r-- 1 packet packet 39451913 2010-01-18 08:53 inside.pcap
-rw-r--r-- 1 packet packet 312239 2010-01-18 08:54 xaa
-rw-r--r-- 1 packet packet 140544 2010-01-18 08:54 xab
-rw-r--r-- 1 packet packet 218156 2010-01-18 08:54 xac
-rw-r--r-- 1 packet packet 302413 2010-01-18 08:54 xad
-rw-r--r-- 1 packet packet 127430 2010-01-18 08:54 xae
그런데, 이 split 는 우리가 사용하기에 문제가 있다. 정말 그대로 라인별로 잘라서 분할 시켜 주기 때문에, 첫번째 파일인 xaa 는 읽어 들일 수 있지만 두번째 파일인 xab 부터는 읽어들이려고 해도 에러가 발생한다. 이유인 즉, pcap 의 형식인 헤더가 xaa 만 있고 그 후에는 없기 때문이다. split 가 pcap 파일을 인식하고 분할된 파일에 pcap 헤더를 구성해서 만들어주지 않기 때문이다.
그럼 어떻게 해야 할까 ? 사용하기 편한 방법으로는 와이어샤크에 포함되어 있는 editcap 을 추천해 보고자 한다. 패킷 분석에 와이어샤크를 많이 사용하기도 하고, 기본으로 함께 설치되어 있는 파일이니 얼마나 편한가. 유닉스 뿐만 아니라 윈도우에서도 사용이 가능하다는 것도 장점이다.
다음 몇 가지 예제를 통해 사용방법에 대해 설명하겠다.
예제1) input.cap 파일에서 처음부터 100 개까지의 패킷을 output.cap 에 저장
#editcap -r input.cap output.cap 1-100
예제2) input.pcap 에서 output.pcap 파일에 10000 개의 패킷을 저장
# editcap -c 10000 input.pcap output.pcap
# ls
input.pcap output.pcap-00011 output.pcap-00024 output.pcap-00037
t.pcap output.pcap-00012 output.pcap-00025 output.pcap-00038
output.pcap-00000 output.pcap-00013 output.pcap-00026 output.pcap-00039
output.pcap-00001 output.pcap-00014 output.pcap-00027 output.pcap-00040
output.pcap-00002 output.pcap-00015 output.pcap-00028 output.pcap-00041
output.pcap-00003 output.pcap-00016 output.pcap-00029 output.pcap-00042
output.pcap-00004 output.pcap-00017 output.pcap-00030 output.pcap-00043
output.pcap-00005 output.pcap-00018 output.pcap-00031 output.pcap-00044
output.pcap-00006 output.pcap-00019 output.pcap-00032 output.pcap-00045
output.pcap-00007 output.pcap-00020 output.pcap-00033 output.pcap-00046
output.pcap-00008 output.pcap-00021 output.pcap-00034 output.pcap-00047
output.pcap-00009 output.pcap-00022 output.pcap-00035 output.pcap-00048
output.pcap-00010 output.pcap-00023 output.pcap-00036
만약 input.pcap 이 10,000 개 이상인 경우는 10,000 개 단위로 output.pcap 뒤에 숫자가 붙어 만들어 진다.
예제3) -i 옵션을 통해 초 단위로 패킷을 나눈다.
#editcap -i 60 input.pcap output.pcap
예제4) 특정 시간범위를 지정하여 패킷 추출
# editcap -v -A "2010-01-15 14:00:00" -B "2010-01-15 15:00:00" input.cap output.cap
-v 는 verbose 로 좀더 자세한 정보를 출력해 준다. -A 와 -B 로 시작과 끝을 지정한다.
예제5) 여러개의 범위를 지정하여 패킷 추출 하기
# editcap input.cap output.cap 1-100 500-600
1-100 번 까지 그리고 500-600 번 까지의 패킷을 output.cap 에 저장한다.
예제6) -r 옵션의 차이를 정확히 이해하자
1, 10, 200-300, 500-700 을 제외하고 output.cap 에 저장한다.
# editcap input.cap output.cap 1 10 200-300 500-700
1, 10, 200-300, 500-700 만 선택하여 output.cap 에 저장한다.
# editcap -r input.cap output.cap 1 10 200-300 500-700
이외 또 사용 가능한 것으로는 tcpslice 가 있다. 우선 이것도 시작과 끝 시간을 정할 수 있으며, 아래와 같이 +200 으로 시작 시간을 초로 지정할 수 있다. -R 옵션은 타임스탬프(timestamp)로 패킷 파일의 시작과 마지막 시간을 보여주며, -r 은 우리가 보기 쉬운 시간으로 -t 는 y,m,d,h 와 같은 형태로 보여주게 된다.
inside:/tmp# tcpslice -R +200 +300 1.cap 1.cap 1263374793.063785 1263375147.306405 inside:/tmp# tcpslice -r +200 +300 1.cap 1.cap Wed Jan 13 18:26:33 2010 Wed Jan 13 18:32:27 2010 inside:/tmp# tcpslice -t +200 +300 1.cap 1.cap 2010y01m13d18h26m33s063785u 2010y01m13d18h32m27s306405u
위 시간을 보면 2010년1월13일 18시26분33초 부터 시작하고 있다. 아래는 2010년1월13일 18시30분 부터 18시32분까지 패킷을 1.cap 에서 추출하여 output.cap 에 저장하는 명령어이다.
inside:/tmp# tcpslice -w output.cap 2010y01m13d18h30m 2010y01m13d18h32m 1.cap
저장된 output.cap 파일을 tcpdump 로 살펴보면 첫 시작이 1월13일 18시30분 부터인 것을 알 수 있다.
inside:/tmp# tcpdump -tttt -r output.cap | more reading from file output.cap, link-type EN10MB (Ethernet) 2010-01-13 18:30:02.223030 IP 111.x.x.9.1302 > 58.140.x.64.search: S 3807417969:3807417969(0) win 655352010-01-13 18:30:02.223068 IP 58.140.x.64.search > 111.x.x.9.1302: S 3325899008:3325899008(0) ack 3807417970 win 2920
Editcap 과 tcpslice 를 알았으니, 이제 큰 패킷 파일이라도 두려워하지 말자!
참고로, 저장할 때부터 큰 파일로 만들지 말고, 패킷 캡쳐 시에 저장옵션을 통해 분리하면 이렇게 분리하는 작업을 거치지 않아 편리하다. 참고) 패킷 파일의 크기, 개수등 저장 옵션을 지정해 보자
피드 구독하기:
글 (Atom)

splitcap.inf