为做伪IP,特地做了一个IP包,用C#改写IP头的校验和算法。 资料二: 算法源代码: public static UInt16 checksum(UInt16[] buffer,int size) 注意:buffer数组为整个ip包数组,需要转换成UInt16[];size为buffer数组的长度。
资料一:
IP头格式:
版本号 (4位)
IP头长度 (4位)
服务类型 (8位)
数据包长度 (16位)
标识段 (16位)
标志段 (16位)
生存时间 (8位)
传输协议 (8位)
头校验和 (16位)
发送地址 (16位)
目标地址 (16位)
选项
填充
IP 协议采用统一的校验算法,其计算比较简单:设校验和初值为0,然后对数据每16位求异或,结果取反,便得校验和。校验时将数据(含校验和)按同样的算法求和,结果为0则数据正确,不为0表示通讯出错,需要丢弃该数据包。
{
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);
}
关于byte[]转换成UInt16[]的方法比较简单,在此不介绍了。
http://www.cnblogs.com/tuyile006/archive/2006/12/06/583949.html
ip数据包的校验和算法c#版_c#应用
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ip数据包的校验和算法c#版_c#应用
相关推荐
-      利用c#远程存取access数据库_c#应用
-      c# 3.0新特性系列:隐含类型var_c#教程
-      c#动态生成树型结构的web程序设计_c#应用
-      论c#变得越来越臃肿是不可避免的_c#应用
-      用c#监控并显示cpu状态信息_c#应用
-      c#中实现vb中的createobject方法_c#应用
-      photoshop给花瓶打造彩绘效果_photoshop教程
-      使用c#创建sql server的存储过程_c#应用