2010년 12월 7일 화요일

패킷 정보가 제대로 안보인다고 ?

패킷 덤프를 하다보면 정보가 제대로 출력이 되지 않는 경우가 있다. 이런 경우는,
해당 프로토콜을 알 수 없거나 또는 출력할 정보가 없는 것이다.

tcpdump 로 덤프하다 보면 아래와 같이 빈 공백으로 나오는 것이 있다. 이것은 단지 하나의 예이다.

# tcpdump -r test.pcap | more
reading from file test.pcap, link-type EN10MB (Ethernet)
17:24:22.251252
17:24:32.255374
17:24:32.953486 IP 192.3.3.14.netbios-dgm > 192.3.255.255.netbios-dgm: NBT UDP PACKET(138)

보통은 간단한 요약 정보가 표시되는데 상위 2줄은 공백으로 비워 있다.  아니, 왜 정보가 제대로 출력되지
않는 것일까? 좀더 세부적으로 보기 위해 -X 옵션을 사용해 보자!

# tcpdump -r test.pcap -X | more
reading from file test.pcap, link-type EN10MB (Ethernet)
17:24:22.251252
        0x0000:  0000 0100 0000 0000 0000 0000 0000 0000  ................
        0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................
        0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............
17:24:32.255374
        0x0000:  0000 0100 0000 0000 0000 0000 0000 0000  ................
        0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................
        0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............

보이는 것이라고는 0x00 만이 반복된다. 도대체 이것이 무엇이던가?
-XX 옵션을 사용해 링크레이어 정보까지 확인해 보자.

17:24:22.251252
        0x0000:  0009 xx3f 1b8f 0009 xx3f 1b8f 9000 0000  ..|?....|?......
        0x0010:  0100 0000 0000 0000 0000 0000 0000 0000  ................
        0x0020:  0000 0000 0000 0000 0000 0000 0000 0000  ................
        0x0030:  0000 0000 0000 0000 0000 0000            ............
17:24:32.255374
        0x0000:  0009 xx3f 1b8f 0009 xx3f 1b8f 9000 0000  ..|?....|?......
        0x0010:  0100 0000 0000 0000 0000 0000 0000 0000  ................
        0x0020:  0000 0000 0000 0000 0000 0000 0000 0000  ................
        0x0030:  0000 0000 0000 0000 0000 0000            ............

이더넷 헤더에 익숙한 사용자라면 딱 보고 알 수 있겠지만, 일단 이더넷 헤더 구조를 보면 아래와 같다:

Destination MAC address

Source MAC address

Type/Length

User Data


MAC 주소는 각각 6 바이트 이다. 그럼 타입을 보면 0x9000 인걸 알 수 있다. 0x9000 타입은 무엇일까?
이더넷 타입은 미리 정의된 것이 있으며, 아래 주소에서 각 타입을 살펴볼 수 있다.

 36864   9000        -      -     Loopback                 [XEROX]
9000 은 루프백으로 표시되어 있다. 좀더 쉽게 보기위해서는 와이어샤크를 통해 보면
쉽게 알 수 있다. 즉, 루프 프로토콜이었는데, 와이어샤크에서는 파싱하여 보여줄 수 있었지만,
tcpdump 에서는 나타나지 않은 것이다.

또는 tshark 로 아래와 같이도 확인해 볼 수 있다.

# tshark -r test.pcap  -V | more
Frame 1 (60 bytes on wire, 60 bytes captured)
    Arrival Time: Dec  3, 2010 17:24:22.251252000
    [Time delta from previous captured frame: 0.000000000 seconds]
    [Time delta from previous displayed frame: 0.000000000 seconds]
    [Time since reference or first frame: 0.000000000 seconds]
    Frame Number: 1
    Frame Length: 60 bytes
    Capture Length: 60 bytes
    [Frame is marked: False]
    [Protocols in frame: eth:loop:data]
Ethernet II, Src:
(생략...)
    Type: Loopback (0x9000)
Configuration Test Protocol (loopback)
    skipCount: 0
    Relevant function:
    Function: Reply (1)
    Receipt number: 0
Data (40 bytes)

0000  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0020  00 00 00 00 00 00 00 00                           ........
    Data: 000000000000000000000000000000000000000000000000...

패킷 분석 프로그램에 따라 처리하여 보여줄 수 있는 것도 있고, 아닌것도 있다. 여기 예에서는
이더넷 타입이 루프 타입인걸 소개한 것으로, 이 루프 타입은 Layer 2 상에서 'ping' 과 같은
형태로 보면 된다.

패킷 분석을 진행하다 보면 모르는 프로토콜 형태, 타입을 보다 이게 무엇이지 하고
분석 시간이 지연되는 경우가 크다. 그 만큼 분석에는 많은 경험이 있어야 정확히 무엇을 분석해 내야 할지
판단할 수도 있다. 물론, 상황에 따라 다 다르다.

어찌되었든 이런 경우도 있다는 것을 참고하기 바란다.

댓글 1개:

  1. pcap파일 파싱하는 파이썬 툴을 직접 제작해보려고 여러가지 정보를 알아보고 있는데
    주로 패킷인사이드에서 많이 얻어가네요..
    좋은 정보 포스팅해주셔서 정말 감사합니다.
    복 받으실 거에요..^^

    답글삭제