패킷 재조합에 관해서..

shs0917의 이미지

패킷을 캡쳐하고 프로토콜별로 나누기는 했는데요..

단편화된 패킷을 재조합 하려면 어떤 과정을 거쳐야 하는지

궁금하군요.. 임시로 들어온 패킷을 저장하고 id나 기타 등등의

패킷헤더 정보에 따라서 다시 재조합해야 하나요??

어디서 부터 해야 할지 막막하네요.. 답변 부탁 드립니다.

불량청년의 이미지

안녕하세요? 날씨가 참~ 쌀쌀하네요. ㅜㅜ;

Quote:
패킷을 캡쳐하고 프로토콜별로 나누기는 했는데요..

혹시 수신받은 TCP세그먼트의 DATA를 합치는것을 말씀하시는 건가요?

Quote:
단편화된 패킷을 재조합 하려면 어떤 과정을 거쳐야 하는지

궁금하군요..

TCP/IP 소프트웨어가 해줍니다. 현재 어떠한 환경에서 프로그래밍을 하시는

지요? 캡쳐 라이브러리를 사용하는건가요? 아니면 로우소켓으로 직접 구현을

하시는 건가요?

Quote:
임시로 들어온 패킷을 저장하고 id나 기타 등등의

패킷헤더 정보에 따라서 다시 재조합해야 하나요??

예 TCP/IP에선 비슷한 방식으로 조합합니다. 순서번호가 필요한 이유죠.

음... 제가 좀 이해가 안가는 부분이 많이 있는데요. 이더넷의 패킷을 캡쳐해서

캡쳐한 패킷의 데이터(즉, TCP세그먼트의 DATA)부분만 모아서 하나의

데이터를 만들고 싶다고 이해했는데, 맞는지요?

H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!

shs0917의 이미지

제가 질문이 너무 두서가 없었군요.. 죄송합니다..

먼저 답변 감사 드리구요...

리눅스 환경에서 pcap을 이용해서 캡쳐를 했는데요..

TCP의 데이터부를 재조합 하려는 겁니다.

침입 탐지를 하기 위해서는 단편화된 패킷을 순서대로 재조합을

해야 하는데.. 그 재조합 부분을 어떻게 구현해야 할지 막막해서..

참고할만한 소스나 문서 같은것두 좋구요.. 아니면..

전체적인 흐름 같은걸 알고 싶네요..

컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러

불량청년의 이미지

pcap 라이브러리를 쓰신다면 제공하는 API중에 파일로 저장하는

함수가 있을껍니다. 그걸 이용해 보시던지, 위에 질문에서 말씀하셨듯이

DATA부분을 추출했다면 연결 리스트나 벡터같은 자료구조에 저장하고

사용해도 될꺼 같네요. 그리고 여기 가셔서 소스분석도 해보심 도움이

될꺼 같네요.

참고싸이트 : http://djstop.kldp.net/

H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!

zingle의 이미지

TCP같은 경우에는 seq값과 ack값, 그리고 데이터 길이를 이용해서 예측하는 next_seq 등을 이용하셔야 합니다.

그러나 실제로 모든 데이터를 그렇게 합치는 것은 매우 어렵습니다.
테스트 환경이면 모르지만, 왠만한 네트워크에서는 세션의 수가 많아지는데,
이에 관한 모든 데이터를 메모리에 가지고 있다가 합쳐줄려면 메모리가 무지 많아야 겠죠.

대충 그 부하는 ethereal에서 트래픽을 캡처하신 다음에 패킷들을 순서대로 정리해서 보여주는 과정을 보시면 됩니다.
그리고 tool 메뉴에서 follow tcp stream인가 하는 plugin을 실행시켜 보시면
데이터만 추출해서 합치는게 어느 정도 부하가 걸리는지 대충 짐작하실 수 있을 겁니다.

댓글 달기

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