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

文章作者 100test 发表时间 2007:09:08 13:09:46
来源 100Test.Com百考试题网


  为做伪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[]的方法比较简单,在此不介绍了。



相关文章


灵活使用好宽带路由器的LAN口
采用透明桥接解决路由器IP配置
三级网络技术:GSM系统干扰浅谈
什么是1G_2G_2.5G_3G?
IP数据包的校验和算法C#版
另类方法四种神奇电脑开机方法
基础知识:网络专业术语的通俗形象解释
更加实用网易163邮箱极速3.0更新
网络基础内部网关协议和外部网关协议
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛