dataandconst.cpp
来自「TCP和UDP数据包发送程序 本程序需要安装Winpcap」· C++ 代码 · 共 61 行
CPP
61 行
#include "StdAfx.h"
#include ".\dataandconst.h"
USHORT CheckSum(const char *buf, int size)
{
USHORT *buffer=(USHORT *)buf;
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size )
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
USHORT CheckSum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size )
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
unsigned short TcpCheckSum(const char *pTcpData, const char *pPshData, UINT nTcpCount)
{
unsigned short sCheckSum = ~CheckSum(pTcpData,nTcpCount);
unsigned long checkSum = sCheckSum;
checkSum <<= 16;
sCheckSum = ~CheckSum(pPshData,12);
checkSum += sCheckSum;
return CheckSum((char*)&checkSum,4);
}
unsigned short UdpCheckSum(const char *pTcpData, const char *pPshData, UINT nTcpCount)
{
unsigned short sCheckSum = ~CheckSum(pTcpData,nTcpCount);
unsigned long checkSum = sCheckSum;
checkSum <<= 16;
sCheckSum = ~CheckSum(pPshData,12);
checkSum += sCheckSum;
return CheckSum((char*)&checkSum,4);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?