可以参考一下我的代码:
//校验
USHORT checksum(USHORT* buff, INT size)
{
ULONG cksum = 0;
while(size>1)
{
cksum += *buff++;
size -= sizeof(USHORT);
}
// 是奇数
if(size)
{
cksum += *(UCHAR*)buff;
}
// 将位的chsum高位和低位相加,然后取反
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >> 16);
return (USHORT)(~cksum);
}
//修改数包窗口大小,以及清除标志位
void ModifyPacketWndSize(PVOID pPacketContent,INT iPacketSize)
{
//定义数据包tcp/ip结构指针
int nLeavingLen;
PETHeader pEtherHdr=NULL;
PIPHeader pIpHdr=NULL;
PTCPHeader pTcpHdr=NULL;
PUDPHeader pUdpHdr=NULL;
CHAR *pData=NULL;