tcph 의 syn , syn_ack 등 값을 변경 하고 싶습니다.

fivestar의 이미지

tcphdr 에서 syn이나 syn_ack등을 수정해서 패킷을 보내려고 합니다..

그런데 패킷을 캡쳐해보면 예를들어 ack의 값이 2568이지만 헥사값을 보면 d6 c5 48 6d 와 같이 되어있는데

이게 패킷을 캡쳐할때 마다 ack의 값이 2568이지만 헥사값이 달라지는 것으로 봐서는 해당 패킷 세션 상에서의 기준 값이 있는것 인가요?

만약 제가 패킷을 만들어서 ack를 1234로 하고 싶다면 tcphdr 안의 멤버값에 어떻게 값을 넣어주어야 하는건가요?

도움좀 부탁드립니다

gilgil의 이미지

질문의 내용을 보아 하니 ACK bit 얘기가 아닌 ack number를 얘기하는 것 같군요.

> 헥사값이 달라지는 것으로 봐서는 해당 패킷 세션 상에서의 기준 값이 있는것 인가요?

네, TCP connection이 이루어 지면서 제일 처음 시점에서 상호간에 seq number를 주고 받습니다. 이 seq number 값을 기준으로 해서 처리가 됩니다. wireshark와 같은 packet sniffer에서는 seq number 및 ack number를 인간이 보기 쉽도록 변경해 줍니다.

인간이 보기에 좋은 값 = 실제 packet의 TCP header에 존재하는 값 - 초기값

TCP stack의 초기 시절에서는 seq number가 0(zero)에서 시작이 되었었습니다. 하지만 이것이 seq number guessing이라는 취약점이 존재하고 외부에서 해당 TCP session에 악의적인 행동을 할 수 있다고 해서, 요즘 나오는 대부분의 TCP stack에서는 seq number를 random으로 시작하게끔 되어 있습니다(2000년도 중반쯤에는 이 random 값도 guessing하는 취약점이 발표되기도 하였었죠).

즉 seq number와 ack number는, TCP connection이 이루어 지면서 초기값이 협상(netotiation)이 되고 그 이후에는 초기값과 상대적인 offset 값으로 처리가 되기 때문에 sniffer에서는 그 상대값이 보여 지게 되는 것입니다.

ps : seq number나 ack number 값은 왜 변경하려고 하나요? 웬만하면 변경하지 않는 것이 좋습니다.

fivestar의 이미지

seq number , ack number 을 바꾸는 이유는 패킷을 핸들링 하고 있는데 중간에 문제가 발생하는데
이게 위 number가 안맞는것 같아서 임의로 한번 변경해보고 테스트를 해보고자 하여 질문을 드린것 입니다.

초기값은 세션마다 달라서 이전 패킷의 number을 ntohl로 바이트 순서를 변경 후 add 한후 다시 htonl로 값을 넣어주니까

변경이 되네요

감사합니다 덕분에 tcp stack에서의 seq number값이 세션마다 달라진 이유도 알았네요 :)

gilgil의 이미지

TCP header checksum 맞춰 주지 않으면 상대방(peer)이 accept하던가요? ^^

gilgil의 이미지

1. seq number는 상대방의 ack number(반대 TCP flow)와 관련이 있다.

2. seq number(ack number)의 증가는 다음과 같은 경우에 증가가 된다.
A. TCP data가 포함되어 있는 경우 TCP data 크기만큼 증가.
B. SYN/FIN bit가 set되어 있을 때(ACK은 제외) 1 증가.

댓글 달기

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