18,356
社区成员
发帖
与我相关
我的任务
分享
typedef struct Packets
{
unsigned char head[8]; /* 包头 */
unsigned char type[4]; /* 包类型 */
unsigned char code[4]; /* 命令字 */
unsigned long int len; /* 包长度 */
unsigned long int CheckSum; /* 校验和 */
unsigned char *Data; /* 数据区 */
} Packets;
/* 下面是首部校验和的算法 */
unsigned short in_cksum(unsigned short *addr, int len) /* function is from ping.c */
{
register int nleft = len;
register u_short *w = addr;
register int sum = 0;
u_short answer =0;
while (nleft > 1)
{
sum += *w++;
nleft -= 2;
}
if (nleft == 1)
{
*(u_char *)(&answer) = *(u_char *)w;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return(answer);
}