// linux 系统编译通过
// gcc filename.c -o filename
// ./filename
#include <stdlib.h>
#include <stdio.h>
unsigned char ip_hdr_8[] =
{
0x45,0x00,
0x00,0x3c,
0x00,0x00,
0x00,0x00,
0x40,0x01,
0x00,0x00, // checksum
0xc0,0xa8,
0x01,0x25,
0xda,0x3c,
0x06,0x82
};
unsigned short ip_hdr_16[] =
{
0x4500,
0x003c,
0x0000,
0x0000,
0x4001,
0x0000, // checksum
0xc0a8,
0x0125,
0xda3c,
0x0682
};
unsigned int checksum_8(unsigned int cksum, void *pBuffer, unsigned int size)
{
char num = 0;
unsigned char *p = (unsigned char *)pBuffer;
if ((NULL == pBuffer) || (0 == size))
{
return cksum;
}
while (size > 1)
{
cksum += ((unsigned short)p[num] << 8 & 0xff00) | (unsigned short)p[num + 1] & 0x00FF;
size -= 2;
num += 2;
}
if (size > 0)
{
cksum += ((unsigned short)p[num] <&
checksum-8位和16位校验和代码示例
最新推荐文章于 2024-07-31 17:31:29 发布
这是一个示例代码,演示了如何在Linux环境下计算8位和16位的校验和。代码中包含了两个校验和计算函数`checksum_8`和`checksum_16`,用于处理不同长度的数据。在主函数`main`中,对IPv4头部数据进行校验和计算,并验证结果的正确性。
摘要由CSDN通过智能技术生成