Rawshark 이름만으로 추정해 보면, 로우 데이터를 본다는 의미로 추정된다. 이름과 같이 그 의미가 맞다. 로우 libpcap 데이터를 덤프 및 간단한 분석을 수행할 수 있는 기능을 가지고 있다.
우선, Rawshark 의 도움말을 살펴보면 아래와 같은 옵션 사용이 가능하다:
# rawshark -h
Rawshark 1.2.11
Dump and analyze network traffic.
See http://www.wireshark.org for more information.
Copyright 1998-2010 Gerald Combs <gerald@wireshark.org> and contributors.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Usage: rawshark [options] ...
Input file:
-r <infile> set the pipe or file name to read from
Processing:
-R <read filter> packet filter in Wireshark display filter syntax
-F <field> field to display
-s skip PCAP header on input
-n disable all name resolution (def: all enabled)
-N <name resolve flags> enable specific name resolution(s): "mntC"
-d <encap:dlt>|<proto:protoname>
packet encapsulation or protocol
Output:
-S format string for fields (%D - name, %S - stringval, %N numval)
-t ad|a|r|d|dd|e output format of time stamps (def: r: rel. to first)
-l flush output after each packet
Miscellaneous:
-h display this help and exit
-v display version info and exit
-o <name>:<value> ... override preference setting
Rawshark 1.2.11
Dump and analyze network traffic.
See http://www.wireshark.org for more information.
Copyright 1998-2010 Gerald Combs <gerald@wireshark.org> and contributors.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Usage: rawshark [options] ...
Input file:
-r <infile> set the pipe or file name to read from
Processing:
-R <read filter> packet filter in Wireshark display filter syntax
-F <field> field to display
-s skip PCAP header on input
-n disable all name resolution (def: all enabled)
-N <name resolve flags> enable specific name resolution(s): "mntC"
-d <encap:dlt>|<proto:protoname>
packet encapsulation or protocol
Output:
-S format string for fields (%D - name, %S - stringval, %N numval)
-t ad|a|r|d|dd|e output format of time stamps (def: r: rel. to first)
-l flush output after each packet
Miscellaneous:
-h display this help and exit
-v display version info and exit
-o <name>:<value> ... override preference setting
Rawshark 는 Tshark 와 달리 입력되는 데이터에 대한 정의가 필요하다. 그래서 무작정 실행해 보면 아래와 같은 로그를 보게된다.
# cat test.pcap | rawshark
rawshark: No valid payload dissector specified.
일반적인 형태의 사용과 약간 다르다 보니 혼돈이 오기도 하는데, 정상적으로 실행하기 위해서는 -d 와 -r 옵션을 사용해서 지정해 주어야 한다. 그리고 출력을 원하는 데이터가 있다면 -F 옵션으로 지정해 주어야 한다. Rawshark 는 기본적으로 다음과 같은 입력 레코드가 들어오는 것으로 판단한다. 많이 보던 레코드 형태일텐데, libpcap 에서 사용하는 pcap_pkthdr 구조와 데이터이다.
struct rawshark_rec_s {
uint32_t ts_sec; /* Time stamp (seconds) */
uint32_t ts_usec; /* Time stamp (microseconds) */
uint32_t caplen; /* Length of the packet buffer */
uint32_t len; /* "On the wire" length of the packet */
uint8_t data[caplen]; /* Packet data */
};
libpcap 구조 관련해서는 다음 글을 읽어 보면 도움이 된다.
1) PCAP 파일을 파헤쳐 보자 - 그 첫번째 이야기
2) PCAP 파일을 파헤쳐 보자 - 그 두번째 이야기
일단 실행해보면 다음과 같은 형태로 출력이 가능하다.
# cat test.pcap | rawshark -d encap:EN10MB -r- -s -F ip.dst -F http.host
0 FT_IPv4 BASE_NONE - 1 FT_STRING BASE_NONE -
1 1="[FF02::C" -
2 -
3 -
4 0="168.126.63.1" -
5 0="192.168.0.240" -
6 0="168.126.63.1" -
7 0="192.168.0.240" -
8 0="72.14.213.99" -
9 0="192.168.0.240" -
10 0="72.14.213.99" -
11 1="www.goog" 0="72.14.213.99" -
12 0="192.168.0.240" -
0 FT_IPv4 BASE_NONE - 1 FT_STRING BASE_NONE -
1 1="[FF02::C" -
2 -
3 -
4 0="168.126.63.1" -
5 0="192.168.0.240" -
6 0="168.126.63.1" -
7 0="192.168.0.240" -
8 0="72.14.213.99" -
9 0="192.168.0.240" -
10 0="72.14.213.99" -
11 1="www.goog" 0="72.14.213.99" -
12 0="192.168.0.240" -
일반적인 tcpdump 나 tshark 와 달리 실행방법이 약간은 복잡해 보인다. rawshark 는 입력을 스트림으로 받아 들이기 때문에 앞에서, cat 을 이용했다. 즉, test.pcap 의 내용이 cat 을 통해 읽어 들이고 이 출력을 rawshark 로 넘긴 것이다. 그러므로 -r 옵션으로 - 를 사용하였다. 앞서 rawshark 를 제대로 사용하기 위해서는 -d 와 -r 을 옵션을 사용한다고 하였는데, -d 를 통해 이 데이터가 어떤 것인지 지정해 주었다. 앞에 encap 이라고 되어 있는것은 캡슐화를 뜻하는 것으로 뒤에 EN10MB 는 이더넷 데이터를 뜻한다. 즉, 이 패킷 데이터는 우리가 흔히 사용하는 이더넷 데이터 이라는 것을 지정해 준 것이다. 이런 데이터로는 PPP, FDDI, IEEE802_11 등이 있다. 데이터 타입은 아래 참고의 URL 을 살펴보기 바란다.
여기서 캡슐화라는 것이 나왔는데, 이 캡슐화에 대한 설명은 이미 앞서 포스팅을 해 놓았으므로 읽어보길 바란다.
[링크] 패킷을 보다 자주 접하는 캡슐화(Encapsulation)는 무엇이지?
그리고 -s 는 입력으로 표준 pcap 파일임을 뜻하고, -F 옵션으로 출력할 내용을 지정할 수 있는데, 와이어샤크에서 사용하던 필터를 그대로 사용하면 되므로 어렵지 않게 쓸수 있다. 출력 되어 나오는 것을 보면 아주 심플하다. 다양한 분석기능이 갖춰진 wireshark 와는 다르게 말이다. 말 그대로 로우 데이터를 덤프해서 분석하기 위한 용도이므로 이점은 기억해 두자. 맨앞에 숫자는 패킷의 넘버를 뜻하는 것이고, 그 뒤로 숫자 1 또는 0 이 보인다. 출력 필터로 지정한 것에 대한 필드의 매치 여부를 나타내는 것으로 1이면 매치가 되었다는 것이다. 11번을 보면 HTTP 호스트 정보가 매칭되어서 1 로 표시된것을 볼 수 있다.
마지막으로 앞서 cat 을 통해 출력 시켰는데, 이외에도 tcpdump 를 통해서도 할 수 있고, wireshark 를 통해서도 할 수 있다. 출력을 rawshark 로 넘겨줄수만 있으면 된다.
# tcpdump -r test.pcap -n -w - | rawshark -d encap:EN10MB -r- -s -F ip.dst -F http.host
다음은 eth1 인터페이스를 실시간으로 rawshark 로 넘기는 것이다. 이때 rawshark 옵션으로 -l 옵션을 추가로 사용하였다. 바로바로 실시간으로 데이터가 넘어오기 때문에 바로 Flush 시키도록 한 것이다.
# tcpdump -i eth1 -s 1514 -w - | rawshark -d encap:EN10MB -l -r- -s -F ip.dst -F http.host
[참고]
1. Libpcap 데이터 링크레이어 타입
http://www.tcpdump.org/pcap3_man.html
2. Rawshark 공식 메뉴얼
http://www.wireshark.org/docs/man-pages/rawshark.html
3. 패킷인사이드 libpcap 관련 태그 보기
http://www.packetinside.com/search/label/libpcap
댓글 없음:
댓글 쓰기