WinpCap을 이용해서 WireShark를 만드는데...TCP 패킷 다

bm4875의 이미지

현재 패킷의 이더넷 헤더, IP ,헤더, TCP헤더까지 추출하는데 성공 했습니다.
문제는 응용계층의 헤더를 뽑아내고 평문을 구해야 하는데
저는 응용계층의 HTTP헤더만 뽑아내면 끝나는 게임 입니다.
그래서 HTTP헤더 까지 뽑아낸 상황이구요.
그런데 문제가 TCP 헤더 다음의 헤더가 HTTP가 붙은 헤더인지.
TCP 패킷의 연장선상인지 구분하기가 모호합니다.

방법이 없을까요?

busker의 이미지

TCP 패킷의 연장선상인지 구분하고 싶다는 생각 자체가 틀렸구요.
length에 관련된 필드의 값(데이터그램의 길이를 나타내는 값은 IP 헤더에 있음)을 얻어와서 그만큼의 바이트만 처리하면 됩니다.

참 쉽죠?

익명 사용자의 이미지

busker님 말대로 처리하면 TCP+HTTP 패킷 같은 경우에는 헤더내용을 추출하기가 쉽습니다.

지금 제가 고민하고 있는건 추출한 패킷이 'TCP+데이터'의 형태를 띠는지 'TCP+HTTP'인지 확실히 구분하는 기준을 잘모르겠어서 질문을 드린겁니다. ㅠ

gilgil의 이미지

IP header + TCP header + TCP Data
로 구성이 될 대, TCP Data의 위치 및 TCP Data 길이는 다음과 같이 구현할 수 있습니다.

bool SnoopTCP::isData(IP_HDR* ipHdr, TCP_HDR* tcpHdr, char** tcpData, int* tcpDataLen)
{
  int   tcpHdrLen   = tcpHdr->th_off * 4;
  char* _tcpData    = (char*)(tcpHdr) + tcpHdrLen;
  int   _tcpDataLen = ntohs(ipHdr->ip_len) - sizeof(IP_HDR) - tcpHdrLen;
 
  if (_tcpDataLen > 0)
  {
    if (tcpData != NULL)
      *tcpData = _tcpData;
    if (tcpDataLen != NULL)
      *tcpDataLen = _tcpDataLen;
    return true;
  }
  return false;
}

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.