zoukankan      html  css  js  c++  java
  • checksum


    unsigned short checksum(unsigned short* usBuf, unsigned int nSize)
    {
     unsigned long usChksum=0;

     //Calculate the checksum
     while (nSize>1)
     {
      usChksum+=*usBuf++;
      nSize-=sizeof(unsigned short);
     }

     //If we have one char left
     if (nSize)
      usChksum+=*(unsigned char*)usBuf;

     //Complete the calculations
     usChksum=(usChksum >> 16) + (usChksum & 0xffff);
     usChksum+=(usChksum >> 16);

     //Return the value (inversed)
     return (unsigned short)(~usChksum);

    }

    ip部分
    ippacket.GetIpHeader()->check=0;

    checksum((unsigned short *)ippacket.GetIpHeader(),sizeof(iphdr)); 

    UDP需要加入伪首部,再计算校验和

      PseudoHeader ph;

    ph.dwSrcIP = ippacket.GetIpHeader()->saddr;
    ph.dwDestIP = ippacket.GetIpHeader()->daddr;
    ph.cReserved = 0;
    ph.cProtocol = IPPROTO_UDP;
    ph.wLength = htons((WORD)ntohs( ippacket.GetUdpHeader()->uh_ulen));
    ippacket.GetUdpHeader()->uh_sum=0;
    ippacket.GetUdpHeader()->uh_sum=checksumudp(&ph,(unsigned short *)ippacket.GetUdpHeader(),ntohs( ippacket.GetUdpHeader()->uh_ulen));
  • 相关阅读:
    Ubuntu中Nginx的安装与配置
    在Ubuntu中安装Redis
    微博开放平台
    QQ互联 回调地址
    PostgreSQL在Ubuntu上安装指南
    postgresql常用命令
    在Linux下查看环境变量
    vue-04-组件
    vue-03-style与class
    vue-02-安装-指令
  • 原文地址:https://www.cnblogs.com/ahuo/p/1460218.html
Copyright © 2011-2022 走看看