네트워크 응답 raw 데이터 파싱하기 (null 바이트 표현 문제)


안녕하세요. 저는 지금 인터넷 익스플로러의 Active X를 통해서만 설치할 수 있는 뷰어가 다루는 데이터를 파싱하려고 합니다. 와이어샤크를 통해서 웹 상의 뷰어가 데이터를 로드하기 직전에 네트워크 패킷을 캡쳐한 뒤 이 raw hex 데이터들을 분석해서 원하는 데이터만 뽑아오려고 합니다. 그리고 이 로직을 안드로이드 코드로 구현하여서 모바일 환경에서도 볼 수 있게 할 것입니다.

제가 알고 있던 네트워크 패킷 데이터들의 대부분은 먼저 short나 int의 크기로 전달될 데이터의 크기를 써준 뒤 딱 그 바이트 만큼의 데이터를 써줘서 알맞게 읽어오게 한다고 알고 있습니다.

그런데 이 데이터들은 제가 보기엔 뒤죽박죽이네요. 어떤 데이터는 [크기][데이터][00] 의 형식이고 또 어떤 데이터는 [크기][데이터] 의 형식입니다.

이미지

게다가 가끔 null이 표현 될 때도 있는데 이 값은 01로 표현하더군요. 제가 아직 배경지식이 부족하여 짧은 식견으로 보기에 이 데이터를 뷰어가 어떻게 제대로 파싱해낼 수 있는지 의심이 갑니다. 이런 데이터 스트림의 파싱 규칙, 혹은 읽는 방법의 팁을 알고싶습니다. 도와주세요!

  • 2016년 08월 22일에 작성됨

조회수 125


1 답변


유추를 해보자면,

  • 처음 나온 00 07: big-endian 형식의 2byte int이며 뒤의 문자열의 길이(2021700\x00) - 1을 나타내는 것 같습니다.
  • 뒤에 나온 00 12: 그 다음 나올 데이터(한글로 보이네요. "융합보안학과\x00"를 utf-8로 인코딩한 값입니다.)의 길이 - 1같습니다.
  • 뒤에 나온 00 04: 뒤에 나올 문자열의 길이("2013\x00") - 1같습니다.

이런 식으로 계속해서 문자열 길이 + 문자열이 나열된 것으로 보입니다. 해당 문자열을 추출해서 활용하는 것이 합법적일지 모르겠습니다. 걱정되는군요!

  • 2016년 09월 17일에 작성됨
    해킹 대회와 웹 프로그래밍을 좋아함

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close