2013년 9월 3일 화요일

차세대 패킷 포맷, Pcap-NG 를 알고싶다 _ 세번째 이야기

두번째 이야기에서 다루지 못한 2개의 블럭에 대한 설명입니다. Pcap-NG 를 설명하는데 생각보다 많은 시간이 필요하다 보니 먼저 작성한 내용을 공개하면서 어느덧 세번째 이야기 까지 왔습니다. 앞으로 네번째 이야기까지 다루면 Pcap-NG 소개는 끝입니다. :-)

5-5. NRB(Name Resolution Block)


이 블럭은 패킷 캡쳐를 하는 순간의 IP 주소와 연관된 도메인 이름을 지원해주는 역할을 합니다. 패킷캡쳐 파일안에 DNS Resolving 과 관련한 데이터들이 파일의 시작부분쯤에 위치하고 하고 있으며, Resolving 이 많은 경우 해당 블럭의 크기도 커지게 됩니다. 이 블럭의 장점은 Resolving 을 하면서 발생될 수 있는 Delay 를 줄여주며 캡쳐한 시점의 Resolving 정보를 가지고 있다는 것입니다. 예를들어, 캡쳐할 당시의 aaa.com 의 주소가 1.1.1.1 이었는데 분석할 당시에는 2.2.2.2 가 되어 있을수도 있습니다. 이런점에서 보면 유용하게 사용될 수 있는 부분이 있고, DNS 요청이 패킷파일에 많이 담겨있는 경우 Resolving 을 피할수도 있어 네트워크가 연결되어 있지 않더라도 정보를 얻을 수 있게됩니다.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------------------------------------------------------+
 0 |                    Block Type = 0x00000004                    |
   +---------------------------------------------------------------+
 4 |                      Block Total Length                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 8 |      Record Type              |         Record Length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 /                       Record Value                            /
   /          /* variable length, aligned to 32 bits */            /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   .                                                               .
   .                  . . . other records . . .                    .
   .                                                               .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Record Type == end_of_recs   |  Record Length == 00          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   /                                                               /
   /                      Options (variable)                       /
   /                                                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Block Total Length                       |
   +---------------------------------------------------------------+


블럭은 위와 같은 포맷으로 구성되어 있으며 블럭타입은 0x00000004 로 정의되어 있습니다. 블럭 타입 다음에 블럭에 대한 전체 길이가 나오고 각 레코드 정보가 나오게 되는데 레코드 타입은 아래와 같습니다.

레코드 타입 이름코드번호설명
nres_endofrecord0Name Resolution Record 가 끝남을 알려준다.
nres_ip4record1IPv4 주소에 해당하는 DNS 레코드 정보
nres_ip6record2IPv6 주소에 해당하는 DNS 레코드 정보

각 레코드 값은 32비트로 구성되어 있으며 레코드 길이에 해당 도메인 이름의 실제 길이가 들어가게 됩니다. 마지막으로 옵션이 추가적으로 올 수 있는데, 옵션은 다음과 같습니다.

옵션 이름코드번호설명
ns_dnsname2이름 변환에 사용된 DNS 서버 이름 (UTF-8문자열)
ns_dnsIP4addr3DNS 서버의 IPv4 주소
ns_dnsIP6addr4DNS 서버의 IPv6 주소


5-6. ISB(Interface Statistics Block)


캡쳐에 사용된 인터페이스의 통계정보를 가지고 있습니다. 통계정보라 함은 인터페이스를 통해 받은 패킷 개수, 유실된 패킷개수등이 있습니다. 해당 블록에 정의된 Interface ID 값에 해당하는 인터페이스 정보를 기록하고, 통계정보를 담아야 하기에 보통 파일의 끝부분에 위치하게 되는 블럭입니다. 하지만, 같은 인터페이스에 여러번 반복되어 해당 블럭이 나타날수는 있습니다.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------------------------------------------------------+
 0 |                   Block Type = 0x00000005                     |
   +---------------------------------------------------------------+
 4 |                      Block Total Length                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 8 |                         Interface ID                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 |                        Timestamp (High)                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16 |                        Timestamp (Low)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
20 /                                                               /
   /                      Options (variable)                       /
   /                                                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Block Total Length                       |
   +---------------------------------------------------------------+


블럭타입은 0x00000005 를 사용하고 있고, 바로 다음 블럭의 전체길이가 나타납니다.그리고 통계정보를 담을 인터페이스 ID 번호가 위치합니다. 이 ID 는 IDB(Interface Description Block)에서 정의된 인터페이스중에 하나가 됩니다. 그 다음으로 EPB(Enhanced Packet Block)와 같은 타임스탬프가 정보가 나오며, 옵션에는 아래와 같은 정보가 들어가게 됩니다.


옵션 이름코드번호설명
isb_starttime2캡쳐가 시작된 시간으로, 4바이트 2개 블럭으로 시간이 저장된다.
isb_endtime3캡쳐가 끝난 시간으로, 4바이트 2개 블럭으로 시간이 저장된다.
isb_ifrecv4패킷 캡쳐가 시작된 이후로 물리적 인터페이스에서 받은 패킷 개수
isb_ifdrop5패킷 캡쳐가 시작된 이후로 컴퓨터 자원의 부족으로 유실된 패킷 개수
isb_filteraccept6패킷 캡쳐가 시작된 이후로 필터에 의해서 받은 패킷 개수
isb_osdrop7패킷 캡쳐가 시작된 이후로 운영체제에 의해서 유실된 패킷 개수
isb_usrdeliv8패킷 캡쳐가 시작된 이후로 사용자에게 전달된 패킷 개수



댓글 없음:

댓글 쓰기