Files
netch/Redirector/Utils.cpp
2021-07-25 13:29:02 +08:00

44 lines
680 B
C++

#include "Utils.h"
#include "Data.h"
USHORT IPv4Checksum(PBYTE buffer, ULONG64 size)
{
UINT32 sum = 0;
for (int i = 0; i < size; i += 2)
{
sum += (buffer[i] << 8) + buffer[i + 1];
}
if ((size % 2) == 1)
{
sum += buffer[size - 1] << 8;
}
while (sum > 0xffff)
{
sum = (sum >> 16) + (sum & 0xffff);
}
return ~sum & 0xffff;
}
USHORT ICMPChecksum(PBYTE buffer, ULONG64 size)
{
UINT32 sum = 0;
for (int i = 0; i < size; i += 2)
{
sum += buffer[i] + (buffer[i + 1] << 8);
}
if ((size % 2) == 1)
{
sum += buffer[size - 1];
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
return ~sum & 0xffff;
}