rogerlong
驱动牛犊
驱动牛犊
  • 注册日期2007-03-01
  • 最后登录2008-02-18
  • 粉丝0
  • 关注0
  • 积分240分
  • 威望25点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
阅读:1697回复:3

ip check sum

楼主#
更多 发布于:2007-04-03 17:46
  我在NDIS 的IMD驱动中修改ip header source ip,然后重新计算ip header check sum. 计算出来的结果总是 0x0300.
两个不同的checksum 函数.
但是在应用测试程序中计算正确.
MSN: LXP8@SINA.COM
rogerlong
驱动牛犊
驱动牛犊
  • 注册日期2007-03-01
  • 最后登录2008-02-18
  • 粉丝0
  • 关注0
  • 积分240分
  • 威望25点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-04-03 17:47
check sum 的函数:
USHORT checksum(USHORT *buffToCheck, ULONG sizeToCheck)

{
      unsigned long cksum = 0 ;
      USHORT *buff = buffToCheck;
      ULONG size = sizeToCheck;


    
    while (size > 1)
    {
        cksum += *buff++;
        size -= sizeof(USHORT);
    }
    if (size)
    {
        cksum += *(UCHAR*)buff;
    }
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >>16);
    

    return (USHORT)(~cksum);
}
//use :
ip_header->iph_xsum = checksum((USHORT *)ip_header, sizeof(IP_HEADER));
MSN: LXP8@SINA.COM
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
板凳#
发布于:2007-04-04 19:22
看看我以前的汇编写的checksum,我用了没有问题
走走看看开源好 Solaris vs Linux
rogerlong
驱动牛犊
驱动牛犊
  • 注册日期2007-03-01
  • 最后登录2008-02-18
  • 粉丝0
  • 关注0
  • 积分240分
  • 威望25点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-10 00:39
已经解决.
使用高效的增量试chek_sum
需要的同志,可与我交流:
msn: lxp8@sina.com
MSN: LXP8@SINA.COM
游客

返回顶部