icmpv6 checksum
2013-12-17 22:08
330 查看
icmpv6的checksum计算:
1 IPv6的icmp,tcp,udp的checksum需要添加虚拟头,结构如下
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Upper-Layer Packet Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| zero | Next
Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2 checksum 的计算代码
USHORT Checksum(USHORT *buffer, int size, int more)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=ntohs(*buffer);
buffer ++;
size -=sizeof(USHORT);
}
if(size)
cksum += *(UCHAR*)buffer;
cksum += more;
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
//return (USHORT)(cksum);
return (USHORT)(~cksum);
}
3 赋值到bit流时,需要
icmp->checksum = htons(icmp->checksum);
花费 8个小时。
1 IPv6的icmp,tcp,udp的checksum需要添加虚拟头,结构如下
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Upper-Layer Packet Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| zero | Next
Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2 checksum 的计算代码
USHORT Checksum(USHORT *buffer, int size, int more)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=ntohs(*buffer);
buffer ++;
size -=sizeof(USHORT);
}
if(size)
cksum += *(UCHAR*)buffer;
cksum += more;
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
//return (USHORT)(cksum);
return (USHORT)(~cksum);
}
3 赋值到bit流时,需要
icmp->checksum = htons(icmp->checksum);
花费 8个小时。
相关文章推荐
- java 集合一个键对应多个值
- flex myeclipse安装.
- read方法读文件
- 回调、匿名函数、闭包在PHP中的应用
- Javascript浅谈之引用类型
- java里的MouseLisetener接口的使用过程==========需要用组件是来注册侦听器
- 阅读原著
- 创建和使用动态链接库 (C++)
- 中国天气网城市代码(JSON)获取实现(二)
- 从检测数据中获取一条最新的数据作为最终结果
- jQuery缓存机制(一)
- 创建和使用静态库 (C++)
- js 中局部变量和全局变量输出遇到的问题
- 【九度】题目1435:迷瘴
- 深入redis内部--实现双向链表
- Kconfig详解
- 如何在 Visual Studio 中混合编译C# 和 C++代码,生成单一的DLL?
- 98年的VC6到08年的VS2008-从atoi的用法差别看UNICODE的使用
- arch linux低速网络下安装
- linux下开启键盘背光