当前位置:编程学习 > 网站相关 >>

ICMP数据包中的校验和计算函数

当初写的程序中其中一个涉及icmp数据结构的,这几了记录了一下数据包中的校验和函数view plaincopy to clipboardprint?
USHORT GetCheckSum ( LPBYTE lpBuf, DWORD dwSize )     
{     
    DWORD   dwCheckSum = 0 ;     
    USHORT* lpWord = (USHORT*)lpBuf ;     
        
    // 累加     
    while ( dwSize > 1 )     
    {     
        dwCheckSum += *lpWord++ ;     
        dwSize -= 2 ;     
    }     
        
    // 如果长度是奇数     
    if ( dwSize == 1 )     
        dwCheckSum += *((LPBYTE)lpWord) ;     
    // 高16位和低16位相加     
    dwCheckSum = ( dwCheckSum >> 16 ) + ( dwCheckSum & 0xFFFF ) ;     
    // 取反     
    return (USHORT)(~dwCheckSum ) ;     
}  
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,