IP数据包的校验和算法C#版

IP数据包的校验和算法C#版,第1张

IP数据包的校验和算法C#版,第2张

为了假冒IP,专门做了一个IP包,用C #重写了IP头的校验和算法。
数据1:
IP报头格式:
版本号(4位)
IP报头长度(4位)
服务类型(8位)
数据包长度(16位)
标识段生存时间(8位)
传输协议(8位)
报头校验和(16位)
发送地址(16位)
目的地址(16位)
如果结果为0,则数据是正确的。如果不为0,则表示存在通信错误,需要丢弃数据包。

算法源代码:

public static uint 16 checksum(uint 16[]buffer,int size)
{
int 32 cksum = 0;
int计数器;
counter = 0;
while(size > 0)
{
uint 16 val = buffer[counter];
cksum+=Convert。toint 32(buffer[counter]);
counter+= 1;
size =-1;
}
cksum =(cksum > > 16)+(cksum & 0x ffff);
cksum+=(cksum > > 16);
return(uint 16)(~ cksum);
}

注意:缓冲区数组是整个ip包数组,需要转换成uint 16[];是sizebuffer数组的长度。
byte[]转换成UInt16[]的方法比较简单,这里就不介绍了。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » IP数据包的校验和算法C#版

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情