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

조회수 3068회

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

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

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

이미지

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

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 유추를 해보자면,

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

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

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)