content-incoding: gzip 형식의 http 패킷을 봐야하는데요

arena01의 이미지

네트워크 장비를 지나가는 http packet의 분석을 위해서
gzip으로 압축된 packet을 packet단위로 uncompress해야 합니다.
시도해본 방법은
직접 #include inflate.c를 하고 output 버퍼 만들고
필요한 작업들을 한 뒤 gunzip()함수를 호출하는 방법이었는데,
data가 커서 packet이 연결되어 날아오는 경우에는 각 packet
끝부분의 code가 완벽하지 않기때문에, gunzip에서 에러를
리턴하거나 무한루프를 도는것 같습니다. error가 나와도
내부 window라는 버퍼에서 uncompress한곳까지만 출력하는
방법도 써 보았는데, 어떤 패킷에서는 gunzip 내부에서
무한루프를 돌게되어 장비가 죽기때문에 다른 방법이 필요합니다.
gzip 알고리즘을 공부해서 패킷 끝부분에 end of byte code를
넣어주면 될것 같은데 너무 복잡해보여서 그렇게 까지 안하고
packet별로 uncompress할수 있는 방법은 없을까요?
답변 부탁드리겠습니다.
참조할만한 자료라도 부탁드립니다.

익명 사용자의 이미지

arena01 wrote:
네트워크 장비를 지나가는 http packet의 분석을 위해서
gzip으로 압축된 packet을 packet단위로 uncompress해야 합니다.
시도해본 방법은
직접 #include inflate.c를 하고 output 버퍼 만들고
필요한 작업들을 한 뒤 gunzip()함수를 호출하는 방법이었는데,
data가 커서 packet이 연결되어 날아오는 경우에는 각 packet
끝부분의 code가 완벽하지 않기때문에, gunzip에서 에러를
리턴하거나 무한루프를 도는것 같습니다. error가 나와도
내부 window라는 버퍼에서 uncompress한곳까지만 출력하는
방법도 써 보았는데, 어떤 패킷에서는 gunzip 내부에서
무한루프를 돌게되어 장비가 죽기때문에 다른 방법이 필요합니다.
gzip 알고리즘을 공부해서 패킷 끝부분에 end of byte code를
넣어주면 될것 같은데 너무 복잡해보여서 그렇게 까지 안하고
packet별로 uncompress할수 있는 방법은 없을까요?
답변 부탁드리겠습니다.
참조할만한 자료라도 부탁드립니다.

그런데 원래 http는 문서전송을 위해 만든겁니다.
그래서 http로 바이너리파일 전송하는건 좀 문제가 잇ㅇ르수 있습니다.
익명 사용자의 이미지

gzip 알고리즘 자체 특성상 fragmented 된 packet boundary단위로 정확히 끊어서 풀어 보여줄 수는 없습니다. reassemble하셔야 할듯... // http로 body에 바이너리 전송은 아무런 문제는 없습니다만... 경우에따라선 mime을 해석하는건 OTL...

arena01의 이미지

답글 감사합니다.
그런데 ethereal 같은 프로그램을 보면
packet 단위로 풀어서 data를 보여주고 있더라구요.
현 상황에서 reassemble하는건 불가능한데...
무슨 방법이 없을까요 ㅜㅜ
packet 뒷부분 data는 일부 유실되어도 상관 없습니다.
앞부분 data만 필요하거든요..

익명 사용자의 이미지

* reassemble이 불가능한 상황이라면 해당 작업(gzip압축 파일, mime파일, 기타 선행데이터에 의해 뒤의 데이터값이 영향을 받는 구조의 파일)은 불가합니다.
* 이런 알고리즘들이 대체로 all or not이라서...
* 만드시는 제품의 스펙 변경을 권고합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.