2011년 4월 12일 화요일

암호화된 VoIP 트래픽의 문장 50% 를 인지할 수 있을까?

구글, MIT, 노스캐롤리나 대학, 존스홉킨스 대학에서 다양한 비트레이트 코덱으로 암호화된 VoIP 트래픽에서 문장을 탐지할 수 있는 방법에 대해서 논문을 발표한 것이 있다.

http://portal.acm.org/citation.cfm?doid=1880022.1880029

일단 주제부터가 관심을 끄는데, 암호화된 음성 데이터에서 문장을 인식할 수 있다는 것은, VoIP 통신 내용을 감청할 수 있다는 뜻이 되기도 한다. 이 논문의 결론부터 보면 암호화된 트래픽에서 평균 정확도는 50% 가까이 되며, 특정한 문구에서는 90% 이상이 될만큼 인지할 수 있다고 한다.
이 논문에서는 사람의 음성이나 녹음된 단어와 같이 사전에 샘플링된 데이터를 이용하지 않고, 그들이 고안해낸 기술적 방법으로 음성을 인식했다고 한다.  그렇다고 VoIP 트래픽 데이터를 다 감청한다는 뜻은 아니다. 어디까지나 학술적으로 발표된 내용이며, 다양한 환경에 따라 제약이 있기 마련이다. 우선, 이 음성 대상도 미국인들의 음성에 기준으로 되어 있다. :-)

ACM 에서는 해당 자료에 접근하기 위해서는 구매를 해야 하는데,  IEEE S&P 2008 에서 발표된 문서를 다음 사이트에서 살펴볼 수 있다. 그냥 참고수준에서 한번 살펴보면 좋을것 같다. VoIP 서비스를 하고 있는 기업이라면.

http://cs.unc.edu/~fabian/papers/oakland08.pdf

와이어샤크에는 VoIP 관련한 메뉴를 볼 수 있는데, 테스트 준비가 되면 VoIP 관련한 내용도 언급해 보도록 하겠다.

[참고]
1. Hidden Markov model
http://en.wikipedia.org/wiki/Hidden_Markov_model

2011년 4월 11일 월요일

월드 IPv6 데이(World IPv6 Day)를 통한 글로벌 IPv6 사전 테스트

2011년 6월8일, ISOC(Internet Society)의 리드하에 IPv6 연결 테스트가 있다. 이름하여 월드 IPv6 데이 이다. 여기에는 구글, 페이스북, 야후, 아카마이 등이 메이저로 참여하며, 24시간은 IPv6 연동 테스트를 진행한다. IPv4 주소 부족에 따라 IPv6 로의 성공적인 전환을 위해 준비하는 것이다. 각 기업들마다 IPv6 전환 준비를 위해 테스트를 진행하겠지만, 이번과 같이 글로벌하게 테스트는 진행된 적이 없기 때문에, 이번 월드 IPv6 데이가 IPv6 전환 준비에 많은 도움이 될 것이다.

이와 관련 추가적인 사항은 다음 사이트를 방문해 보면 된다

http://isoc.org/wp/worldipv6day/

이번 행사에 참여를 원하면 참가신청을 내면 되고, 현재 참여하겠다는 기관의 목록에는 한국기업은 보이지 않는 것으로 보인다. 몇몇 일본 기업도 눈에 띄는데, 뛰어난 네트워크 인프라를 가지고 있는 한국기업은 왜 하나도 보이지 않는 것인가?

http://isoc.org/wp/worldipv6day/participants/

2011년이 IPv4 고갈시점이고, IPv6 전환점의 큰 해가 될텐데.. 한국 기업들 충분히 준비하고 있는가요? NAT 나 기타 방법으로 계속 버티면 되겠지 하는 생각하는건 아니겠죠.

[참고]
1. World IPv6 day
http://test-ipv6.com/ipv6day.html

2011년 4월 9일 토요일

리눅스 20주년을 정말 축하해요 ^.^

리눅스가 올해로 20주년을 맞이했다. 리눅스 파운데이션은 이와 관련 다양한 행사도 준비하고 있다. 예를 들면, 비디오 컨테스트로 누구나 응모할 수 있다. 당첨자는 벤쿠버에서 열리는 LinuxCon 에서 발표된다.
아래 이미지는 리눅스 20년간의 주요한 내용을 담아 정리된 것이다.


1991년은 Linux Torvalds 가 포스팅 한 메시지 "Hello Everybody Out there..." 와 함게 처음으로 리눅스 코드를 배포한 해이다. 1993년에는 슬랙웨어가 주요 배포판으로 퍼져나갔는데, 나 또한 그 당시의 슬랙웨어를 기억한다. 배포되는 리눅스 중에서는 슬랙웨어가 유명했었다. 1996년에는 Linus 가 아쿠아리움에 방문하면서 리눅스의 마스코트로 펭귄을 선택했다는 사실. 1999년은 레드햇이 퍼블릭하게 배포되었으며, 2010년은 리눅스 기반의 안드로이드가 나타난다.

리눅스 20주년을 정말 축하하며, 앞으로 펭귄의 활약을 더 기대해 보고 싶다. :-)

[참고]
1. 리눅스파운데이션
http://www.linuxfoundation.org/20th/

2011년 4월 7일 목요일

마이크로소프트 666,624 개의 IP 주소를 사들이는가?

여기서도 자주 언급하였지만, IPv4 주소가 이제 고갈된다는 것은 잘 알고 있을 것이다. 최근 마이크로소프트사가 파산 신청을 한 노텔로부터 IPv4 주소를 사들인다고 하였다. 이 주소가 자그마치 666,624 개의 IP 주소이다. 지금과 같이 IPv4 주소가 부족한 시점에서는 엄청나게 많은 IP 주소이다.

주소를 사들이는데 소요되는 비용은 750만 달러이며, IP 한개의 가치가 11.25 달러 정도가 된다.
아직 이번 딜과 관련해서 최종적으로 승인은 나지 않은 상태이며, 이와 관련한 다양한 의견들이 인터넷 커뮤티니 사이에서 나오고 있다.

워낙에 IPv4 주소 부족 고갈로 문제를 겪고 있다 보니 이슈화 되고 있는 것이다. IP 주소가 펑펑 남는 시점이라면, 마이크로소프트사가 사지도 않았을 것이고, 큰 이슈가 되지도 않았을 것이다. 왜? 이렇게 엄청난 주소를 사들이는 것일까? IP 주소를 판매하려 한다는 얘기도 있고, 얼마남지 않은 IP 주소를 확보하려는 것이라고도 하고 다양한 이야기들이 있다. 다만, 마이크로소프트사가 IP 주소를 판매하려는 목적으로 사들이는 것으로 보이지는 않는다.

이번 이슈로 인해, 앞으로 IPv4 주소가 블랙마켓에서 실제 지금보다 더 높은 가격으로 거래가 되지 않을까 하는 우려도 생기고 있다. 주소 하나가 $11 이라면 도메인 1년 유지 비용 정도와 비슷한데. 이 보다 더 많은 비용을 지불하고 IP 주소를 얻어야 하는 것인가?

IPv6 로 전환되면 문제도 안될텐데, 현실적으로 IPv4 고갈이 다가오지만 IPv6 환경으로 빠르게 바뀌기는 쉽지 않아 보인다.

[참고]
1. 인포월드 기사
http://www.infoworld.com/d/networking/microsoft-offers-75-million-ipv4-addresses-745

2011년 4월 4일 월요일

와이어샤크로 USB 디바이스를 모니터링 할 수 있다는 사실!

컴퓨터와 USB 사이의 통신 내용도 패킷을 캡쳐하는 것과 같이 볼 수 없을까? 이에 대한 대답은 '있다' 이다. 그것도 우리가 블로그에서 많이 언급하고 친근한 프로그램 중에 하나인 와이어샤크로 할 수 있다.

자, 그럼 어떻게 USB 트래픽 정보를 볼 수 있을까? 우선 운영체제에서 볼 수 있도록 지원해 주어야 하는데, USB 로우 트래픽 데이터를 패킷 형태로 변환하여 일반적인 네트워크 인터페이스와 같이 인식되어 볼 수 있다. 여기서는 리눅스를 기반으로 하여 설명을 할 것이다. 우선 커널 상에서 DEBUG 파일 시스템이라든지, USB 모니터링 모듈등을 지원해 주어야 한다. 그러므로, 다음과 같은 옵션이 설정되어 커널이 컴파일 되어 있어야 한다.

CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_FS=y
CONFIG_USB_MON=y

USBMON 모듈은 커널 2.6.11 이후에 포함되어 있으며, 최근의 배포판 리눅스에서는 크게 다른 설정 없이 아래의 명령어를 사용할 수 있을 것이다. 일단, lsmod 명령어를 통해 usb 관련한 모듈은 무엇이 올라가 있는지 살펴보았다.

# lsmod | grep usb
rt2800usb              28691  0
rt2x00usb               6829  1 rt2800usb
rt2x00lib              21810  2 rt2800usb,rt2x00usb
mac80211              137340  2 rt2x00usb,rt2x00lib
crc_ccitt               1323  2 rt2870sta,rt2800usb
usb_storage            39625  1
scsi_mod              122149  5 usb_storage,sg,sr_mod,sd_mod,libata
usbcore               122034  6 rt2870sta,rt2800usb,rt2x00usb,usb_storage,ehci_hcd
nls_base                6377  11 isofs,udf,hfsplus,hfs,ntfs,jfs,nls_utf8,nls_cp437,vfat,fat,usbcore

usbmon 은 보이지 않는다. usbmon 모듈은 modprobe 를 통해서 쉽게 모듈을 로드할 수 있다.

# modprobe usbmon

모듈을 올린 후 살펴보니 usbmon 모듈이 올라가 있는 것이 보인다.

# lsmod | grep usb
usbmon                 15322  0
rt2800usb              28691  0
rt2x00usb               6829  1 rt2800usb
rt2x00lib              21810  2 rt2800usb,rt2x00usb
mac80211              137340  2 rt2x00usb,rt2x00lib
crc_ccitt               1323  2 rt2870sta,rt2800usb
usb_storage            39625  1
scsi_mod              122149  5 usb_storage,sg,sr_mod,sd_mod,libata
usbcore               122034  7 usbmon,rt2870sta,rt2800usb,rt2x00usb,usb_storage,ehci_hcd
nls_base                6377  11 isofs,udf,hfsplus,hfs,ntfs,jfs,nls_utf8,nls_cp437,vfat,fat,usbcore

그 다음 DebugFS 파일시스템 타입으로 아래와 같이 마운트 해 주면 된다.

# mount -t debugfs / /sys/kernel/debug
# mount
[생략]
/dev/sdb1 on /media/usb0 type vfat (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
/ on /sys/kernel/debug type debugfs (rw)

앞서 설명한 것과 같이 네트워크 인터페이스로 인식을 시켜준다고 하였다. 그럼, tshark 의 -D 옵션을 통해 사용가능한 인터페이스 리스트를 확인할 수 있다.

# tshark -D
1. eth0
2. usbmon1 (USB bus number 1)
3. usbmon2 (USB bus number 2)
4. any (Pseudo-device that captures on all interfaces)
5. lo

기존에는 보이지 않던 usbmon1 과 usbmon2 이 보인다. 그렇다 그럼 이제 이 인터페이스로만 지정해서 패킷 덤프를 해 보면 USB 트래픽을 볼 수 있다는 것이된다. 그런데, 2번과 3번중 어떤것이 올바른 인터페이스일까? 그냥 쉽게는 2번,3번 한번씩 패킷덤프도 해 볼 수 있지만, lsusb 명령어로 usb 정보를 들여다 보자.

# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 026: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub

위 화면은 USB 를 연결하기 전이고 다음은 USB 를 연결한 후의 화면이다. 보는 것과 같이 Bus 002 에 새로운 디바이스가 잡혀있는것을 볼 수 있다.

# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 026: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 002 Device 028: ID 090c:1000 Feiya Technology Corp. Flash Drive

그러면, USB 버스 2번이니 위에서 살펴본 인터페이스중 3번인 usbmon2 를 관찰하면 되겠다는 것을 알 수 있다. lsusb 외 usb-devices 명령어를 이용해서도 확인할 수 있다.

# usb-devices
T:  Bus=02 Lev=03 Prnt=26 Port=02 Cnt=01 Dev#= 28 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=090c ProdID=1000 Rev=11.00
S:  Manufacturer=LG Electronics
S:  Product=XTICK
S:  SerialNumber=AA04012700015188
C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=300mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

tshark 를 통해서 USB 패킷 데이터를 덤프해 보자. -i 옵션을 통해 인터페이스 번호를 지정해 주었다. 와, USB 트래픽 정보가 잡힌다. 참고로, 와이어샤크 1.2.X 버전 이상을 사용하여야 한다.

# tshark -i 3
Running as user "root" and group "root". This could be dangerous.
Capturing on USB bus number 2
  0.000000         host -> 28.0         USB GET DESCRIPTOR Request DEVICE
  0.000407         28.0 -> host         USB GET DESCRIPTOR Response DEVICE
  0.000422         host -> 26.0         USB GET DESCRIPTOR Request DEVICE
  0.000575         26.0 -> host         USB GET DESCRIPTOR Response DEVICE
  0.000615         host -> 2.0          USB GET DESCRIPTOR Request DEVICE
  0.000658          2.0 -> host         USB GET DESCRIPTOR Response DEVICE
  0.000677         host -> 1.0          USB GET DESCRIPTOR Request DEVICE
  0.000677          1.0 -> host         USB GET DESCRIPTOR Response DEVICE

GUI 버전의 와이어샤크에서는 어떻게 나올까? 다음 그림과 같이 GUI 화면에서도 문제없이 깔끔하게 트래픽 정보가 출력된다.  데이터 영역부분도 보인다.



그러면, 여기서 살짝 의문이 생긴다. 와이어샤크로만 데이터를 덤프할 수 있는 것인가 ? 그렇지는 않다. 네트워크 인터페이스로 잡힌 것이기 때문에 tcpdump 프로그램을 통해서도 볼 수 있다. USB 트래픽 데이터를 파싱해서 보여줄 수 있는 것이면 된다.

# tcpdump -i 3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on usbmon2, link-type USB_LINUX_MMAPPED (USB with padded Linux header), capture size 65535 bytes
09:11:09.835197 CONTROL SUBMIT to 2:28:0
09:11:09.835623 CONTROL COMPLETE from 2:28:0
09:11:09.835647 CONTROL SUBMIT to 2:26:0
09:11:09.835720 CONTROL COMPLETE from 2:26:0
09:11:09.835740 CONTROL SUBMIT to 2:2:0
09:11:09.835845 CONTROL COMPLETE from 2:2:0
09:11:09.835859 CONTROL SUBMIT to 2:1:0
09:11:09.835859 CONTROL COMPLETE from 2:1:0
09:11:12.002810 BULK SUBMIT to 2:28:2
09:11:12.002955 BULK COMPLETE from 2:28:2
09:11:12.002963 BULK SUBMIT to 2:28:1

이 외에도 더 로우 방법으로 확인할 수 있는 방법이 있는데, 직접 디버그파일 시스템을 cat 를 통해 볼 수도 있다. 아래와 같이 말이다.

# cat /sys/kernel/debug/usb/usbmon/2u
ffff88021d618540 1982035431 S Bo:2:028:2 -115 31 = 55534243 a8010000 00000000 00000600 00000000 00000000 00000000 000000
ffff88021d618540 1982035468 C Bo:2:028:2 0 31 >
ffff88021d618540 1982035549 S Bi:2:028:1 -115 13 <
ffff88021d618540 1982035856 C Bi:2:028:1 0 13 = 55534253 a8010000 00000000 00
ffff88021d618540 1982035895 S Bo:2:028:2 -115 31 = 55534243 a9010000 00000000 00000600 00000000 00000000 00000000 000000
ffff88021d618540 1982035963 C Bo:2:028:2 0 31 >
ffff88021d618540 1982035969 S Bi:2:028:1 -115 13 <
ffff88021d618540 1982036213 C Bi:2:028:1 0 13 = 55534253 a9010000 00000000 00
ffff88021d618540 1984037715 S Bo:2:028:2 -115 31 = 55534243 aa010000 00000000 00000600 00000000 00000000 00000000 000000
ffff88021d618540 1984037787 C Bo:2:028:2 0 31 >
ffff88021d618540 1984037793 S Bi:2:028:1 -115 13 <
ffff88021d618540 1984038035 C Bi:2:028:1 0 13 = 55534253 aa010000 00000000 00
ffff88021d618540 1984038056 S Bo:2:028:2 -115 31 = 55534243 ab010000 00000000 00000600 00000000 00000000 00000000 000000
ffff88021d618540 1984038192 C Bo:2:028:2 0 31 >
ffff88021d618540 1984038195 S Bi:2:028:1 -115 13 <
ffff88021d618540 1984038410 C Bi:2:028:1 0 13 = 55534253 ab010000 00000000 00

USB 트래픽을 관찰할 일이 있다면, 와이어샤크를 통한 이 방법이 좋은 방법중에 하나가 될 것이다.  윈도우에서는 와이어샤크를 통해 바로 USB  트래픽을 관찰할 수 없다. 리눅스의 가상 머신에 윈도우를 올려서 사용될 수 있는 방법이 아래 [참고] 를 보면 소개되어 있긴 하다.

추후 시간적 여유가 된다면 윈도우 기반에서도 테스트 해 본 후 결과를 공유하도록 하겠다.

[참고]
1. 와이어샤크 USB 캡쳐
http://wiki.wireshark.org/CaptureSetup/USB

2011년 4월 3일 일요일

패킷인사이드를 다이나믹뷰로 더욱 생동감 있게 즐겨보세요!

패킷인사이드를 더욱 쉽게 볼 수 있는 다섯가지 뷰를 소개해 드립니다. 시간 구성별로나, 사진 스냅샷과 같은 형태 또는 사이드바와 같이 총 5가지 뷰로 블로그를 볼 수 있습니다.

Flipcard: http://packetinside.com/view/flipcard
Mosaic: http://packetinside.com/view/mosaic
Sidebar: http://packetinside.com/view/sidebar
Snapshot: http://packetinside.com/view/snapshot
Timeslide: http://packetinside.com/view/timeslide

말로 표현방법을 설명하는 것보다는, 직접 사용해 보시고 편한 것으로 사용해 보시면 됩니다. 기존 페이지 출력보다는 좀더 많은 블로그 내용을 빠르게 접근할 수 있는 방법이 될 것입니다. 다만, 이 뷰를 제대로 이용하기 위해서는 인터넷 익스플로러 8 이상, 파이워폭스 3.5 이상, 크롬, 사파리 브라우저등을 이용해야 합니다. 아래 화면과 같이 제대로 표시되지 않는다면, 오래된 버전의 브라우저를 사용하고 있다는 뜻이 되기도 합니다.

 
 

우측 메뉴에 '다이나믹 뷰' 를 통해서도 언제나 쉽게 접근할 수 있습니다.

From Rigel

2011년 4월 1일 금요일

와이어샤크의 또 다른 유틸리티, Rawshark 의 사용을 알아보자

와이어샤크를 설치하면 같이 배포되는 프로그램으로 Rawshark 가 있다. 주로 GUI 기반에서 사용한다면, wireshark 만을 실행해서 사용하기 때문 다른 유틸리티는 그냥 지나치는 경우가 많다.
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 는 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" -

일반적인 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