tcp 패킷에서 패킷데이타를 분석하는 방법

이우중의 이미지

제목이 적당한 것인지 잘 모르겠습니다.
libpcap을 이용하여 패킷을 잡아내었습니다.
간단한 예는 다음과 같습니다.

22:27.179429 166.104.xxx.xxx. > 211.39.xxx.xxx
version: 4
header_len: 5
tos: 0
total_len: 40
id: 48898
flags: 2
fragment_offset: 0
ttl: 128
protocol: tcp
header checksum: 22346
data:
0df700f0774fa8e4f211f11250040000

위에서 data 부분은 binary를 hex로 변환하여 출력한 결과 입니다.

실제로 위의 패킷은 웹브라우져로 웹 사이트를 접속하였을때의 패킷입니다.

여기에서 data에 해당하는 부분을 어떻게 하면 http 프로토콜 메시지로 변환 시킬수 있을까요

혹시 이런쪽으로 프로그래밍 해보신분 있으시다면 조언좀 부탁드립니다.

charsyam의 이미지

ip부분만을 뽑아내신것 같습니다. 아마도 그 data 부분에 tcp 헤더가

있고, tcp 헤더 를 뽑아내고 나면, 그냥 데이터로 바꾸면

HTTP 프로토콜 일껍니다. 그럼 고운 하루...

=========================
CharSyam ^^ --- 고운 하루
=========================

alsong의 이미지

TCP처리가 끝난(recv가 받아낸-RAW_SOCKET은 아니겠죠 --; 딴지 거시지 말기를 ^^;- )데이터까지 받아 내셨다면....
그냥 hex(위의 데이터가)를 ascii코드로 출력하면 형태가 보일것 같군요.
HTTP가 ASCII코드로 되어 있는것 같더군요
다른형태의 프로토콜이라면 스펙을 봐야 겠죠

데이터를 못받고 IP헤더만 떼낸 상태라면 이건 다른 고려할 사항이 생길것 같습니다.
가령 받은 데이터가 오류라면 프로토콜이 깨어지겠죠....
그러니까 CRC체크를 한후 정상이면 TCP헤더를 뜯어네고 받아 네야겠죠...
그외 추가적으로 생각나는건 없네요...
세세하게 잘몰라서 이경우는 스펙을 좀 보셔야 될것 같군요.

그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.

arbell의 이미지

안녕하세요. 아벨입니다.

libpcap 를 이용하여 패킷을 캡쳐하셨다면.
data 부분은 아마도 tcp 헤더를 포함한 데이터 일것입니다.

tcp 헤더 다음부분을 포인트 한다음..
HTTP 프로토콜 스택을 적용시켜 보세요

http 프로토콜 스택은 인터넷에 널려있으니...
구조체 만들어서 맵핑하시면 될것입니다.

그럼~ 항상 좋은일 가득하세요~!

ps - http 의 데이터 부분은 파서가 따로 있는지 모르겠지만....
없다면, 만드셔서 표현을 하셔야 할것 같습니다.

아름다움이란... 열정

charsyam의 이미지

HTTP 프로토콜은 텍스트 형태이기 때문에,

그냥 TCP 헤더만 뽑아내시면 볼 수 있을 겁니다.

그럼 고운 하루

=========================
CharSyam ^^ --- 고운 하루
=========================

이우중의 이미지

고맙습니다.
TCP 헤더를 뽑아내서 활용하고 TCP 패킷의 데이타 부분을 뽑아내니 되는군요..
:-)

댓글 달기

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