tcph 의 syn , syn_ack 등 값을 변경 하고 싶습니다.
글쓴이: fivestar / 작성시간: 월, 2012/01/30 - 8:26오후
tcphdr 에서 syn이나 syn_ack등을 수정해서 패킷을 보내려고 합니다..
그런데 패킷을 캡쳐해보면 예를들어 ack의 값이 2568이지만 헥사값을 보면 d6 c5 48 6d 와 같이 되어있는데
이게 패킷을 캡쳐할때 마다 ack의 값이 2568이지만 헥사값이 달라지는 것으로 봐서는 해당 패킷 세션 상에서의 기준 값이 있는것 인가요?
만약 제가 패킷을 만들어서 ack를 1234로 하고 싶다면 tcphdr 안의 멤버값에 어떻게 값을 넣어주어야 하는건가요?
도움좀 부탁드립니다
Forums:
ACK bit를 얘기하는 건가요 아니면 ack(ackknowledge) number를 얘기하는 건가요?
질문의 내용을 보아 하니 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 값은 왜 변경하려고 하나요? 웬만하면 변경하지 않는 것이 좋습니다.
www.gilgil.net
seq number , ack number 을 바꾸는
seq number , ack number 을 바꾸는 이유는 패킷을 핸들링 하고 있는데 중간에 문제가 발생하는데
이게 위 number가 안맞는것 같아서 임의로 한번 변경해보고 테스트를 해보고자 하여 질문을 드린것 입니다.
초기값은 세션마다 달라서 이전 패킷의 number을 ntohl로 바이트 순서를 변경 후 add 한후 다시 htonl로 값을 넣어주니까
변경이 되네요
감사합니다 덕분에 tcp stack에서의 seq number값이 세션마다 달라진 이유도 알았네요 :)
byte order보다가
TCP header checksum 맞춰 주지 않으면 상대방(peer)이 accept하던가요? ^^
www.gilgil.net
참고로 말씀을 드리자면
1. seq number는 상대방의 ack number(반대 TCP flow)와 관련이 있다.
2. seq number(ack number)의 증가는 다음과 같은 경우에 증가가 된다.
A. TCP data가 포함되어 있는 경우 TCP data 크기만큼 증가.
B. SYN/FIN bit가 set되어 있을 때(ACK은 제외) 1 증가.
www.gilgil.net
댓글 달기