TCP의 체크섬을 구하려고 하는데...
글쓴이: gnoygnas / 작성시간: 목, 2006/02/09 - 8:59오후
TCP 레이어에서 체크섬을 구하려고 아래와 같은 소스 코드를 사용(검색했더니 나오더군요..^^)하려고 합니다. (정확한 것인지는 아직 확인하지 못함)
아래 소스에서 ptr로 받는 부분과 len이 순수한 TCP 헤더만을 가리키는 것인지 아니면 IP 헤더를 가리키는 것인지 궁금합니다.
혹시 이보다 더 좋은 소스나 참고할만한 것이 있으면 부탁드립니다...^^
unsigned short in_cksum(unsinged short *ptr, int nbytes);
unsigned short in_cksum(unsinged short *ptr, int nbytes)
{
register long sum;
register u_short answer;
u_short oddbyte;
sum = 0;
// 읽어올값이 남아있으면
while(nbytes > 1)
{
// 포인터 하나씩 증가하면서 sum값에 더함
sum += *ptr++;
// 그리고 nbytes에서는 2를 뺌
nbytes -= 2;
}
// 남은 읽어 올 값이 홀수 이면
if (nbytes == 1)
{
// 홀수 바이트를 0으로 세팅하고
oddbyte = 0;
*((u_char *)&oddbyte) = *(u_char *)ptr;
// 그것도 더해줌
sum += oddbyte;
}
// 상위 16바이트와 하위 16바이트의 합
sum = (sum >> 16) + (sum & 0xffff);
// 올라온 값이 있으면 그것도 더해줌
sum += (sum >> 16);
// 전체 비트반전
answer = ~sum;
// 만들어진 값을 리턴
return (answer);
} // TCP체크썸 계산 함수 끝Forums:


http://www.networksorcery.com/enp/protoc
http://www.networksorcery.com/enp/protocol/tcp.htm#Checksum
======================
BLOG : http://superkkt.com
댓글 달기