ip数据包的校验和算法c#版_c#应用

2008-02-23 05:42:18来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

为做伪IP,特地做了一个IP包,用C#改写IP头的校验和算法。
资料一:
IP头格式:
?? 版本号 (4位)
?? IP头长度 (4位)
?? 服务类型 (8位)
?? 数据包长度 (16位)
?? 标识段 (16位)
?? 标志段 (16位)
?? 生存时间 (8位)
?? 传输协议 (8位)
?? 头校验和 (16位)
?? 发送地址 (16位)
?? 目标地址 (16位)
?? 选项
?? 填充

资料二:
IP 协议采用统一的校验算法,其计算比较简单:设校验和初值为0,然后对数据每16位求异或,结果取反,便得校验和。校验时将数据(含校验和)按同样的算法求和,结果为0则数据正确,不为0表示通讯出错,需要丢弃该数据包。

算法源代码:

public static UInt16 checksum(UInt16[] buffer,int size)
{
Int32 cksum=0;
int counter;
counter=0;
while(size>0)
{
UInt16 val=buffer[counter];
cksum =Convert.ToInt32(buffer[counter]);
counter =1;
size=-1;
}
cksum=(cksum>>16) (cksum&0xffff);
cksum =(cksum>>16);
return (UInt16)(~cksum);
}

注意:buffer数组为整个ip包数组,需要转换成UInt16[];size为buffer数组的长度。
关于byte[]转换成UInt16[]的方法比较简单,在此不介绍了。
http://www.cnblogs.com/tuyile006/archive/2006/12/06/583949.html


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 用c#动态创建access数据库_c#应用

下一篇: c#一个象棋游戏程式_c#应用