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
댓글 달기