关于TCP头校验和的问题?
自己填写TCP头,如下:int tcpHeadLen=htons(20);
PTSDHDR pTsdHdr;
unsigned char psdHead[sizeof(tsdhdr)];
pTsdHdr=(tsdhdr*)psdHead;
pTsdHdr->PsdHdr.srcIP=ip.sourceIP;
pTsdHdr->PsdHdr.destIP=ip.destIP;
pTsdHdr->PsdHdr.null=0;
pTsdHdr->PsdHdr.proto=6;
pTsdHdr->PsdHdr.tcp_len=htons(sizeof(tcphdr));
memcpy(&pTsdHdr->TcpHdr,&tcp,sizeof(tcphdr));
tcp.check_sum=checkSum((u_short*)psdHead,sizeof(tsdhdr))
然后用Ethereal抓包分析。
ip的校验和没有问题。
tcp的校验和和ip的校验和计算用的是同一个函数checkSum
但tcp.check_sum总是错误,比正确的要大0x2e00(按Ethereal提示),不知怎么会这样呢?