- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
checksum计算方法
ICMP,IP,UDP,TCP报头部分都有checksum(检验和)字段。ICMP和IP报头校验和的计算都很简单,使用RFC1071中给出的方法即可完成(如下)。
//计算校验和USHORT checksum(USHORT *buffer,int size){unsigned long cksum=0;while(size1){cksum+=*buffer++;size-=sizeof(USHORT);}if(size){cksum+=*(UCHAR *)buffer;}//将32位数转换成16while (cksum16)cksum=(cksum16)+(cksum 0xffff);return (USHORT) (~cksum);}
UDP/TCP报头中的校验和的计算比较复杂的,要用到 UDP/TCP伪首部:先要填充伪首部各个字段,然后再将UDP/TCP报头以后(包括报头)的数据附加到伪首部的后面,再对位首部使用上述校验和计算,所得到的值才是UDP/TCP报头部分的校验和。
位首部可以用如下的结构体表示:typedef struct{ULONG sourceip; //源IP地址ULONG destip; //目的IP地址BYTE mbz; //置空(0)BYTE ptcl; //协议类型USHORT plen; //TCP/UDP数据包的长度(即从TCP/UDP报头算起到数据包结束的长度 单位:字节)}Psd_Header;
这个过程是一个很繁琐的过程,计算过几次后再也忍受不了做这样重复的工作,于是写了一个通用的计算函数。这个函数使用起来我感觉非常方便:先封装好你的数据包(完整的,包括以太头),然后将数据包的首地址作为参数,调用该函数即可。函数将帮你完成IP报头以及UDP/TCP报头部分校验和的计算。
//————————————————————————-// PacketCheckSum// 计算数据包的校验和// 参数:packet-待处理数据(将封装好的数据包的指针)//————————————————————————-void PacketCheckSum(unsigned char packet[]){Dlc_Header *pdlc_header=NULL; //以太头指针Ip_Header *pip_header=NULL; //IP头指针unsigned short attachsize=0; //传输层协议头以及附加数据的总长度pdlc_header=(Dlc_Header *)packet;//判断ethertype,如果不是IP包则不予处理if(ntohs(pdlc_header-ethertype)!=0×0800) return;pip_header=(Ip_Header *)(packet+14);//TCP包if(0×06==pip_header-proto){
?Tcp_Header *ptcp_header=NULL; //TCP头指针Tcp_Psd_Header *ptcp_psd_header=NULL;
ptcp_header=(Tcp_Header *)(packet+14+((pip_header-ver_len)15)*4);attachsize=ntohs(pip_header-total_len)-((pip_header-ver_len)15)*4;ptcp_psd_header=(Tcp_Psd_Header *)malloc(attachsize+sizeof(Tcp_Psd_Header));if(!ptcp_psd_header) return;memset(ptcp_psd_header,0,attachsize+sizeof(Tcp_Psd_Header));//填充伪TCP头ptcp_psd_header-destip=pip_header-destIP;ptcp_psd_header-sourceip=pip_header-sourceIP;ptcp_psd_header-mbz=0;ptcp_psd_header-ptcl=0×06;ptcp_psd_header-tcpl=htons(attachsize);//计算TCP校验和ptcp_header-chksum=0;memcpy((unsigned char *)ptcp_psd_header+sizeof(Tcp_Psd_Header),(unsigned char *)ptcp_header,attachsize);ptcp_header-chksum=checksum((unsi
您可能关注的文档
最近下载
- 新人教版高中生物必修一课本答案整理汇总.pdf VIP
- 2023辽宁高考语文试卷及参考解析(完整).docx VIP
- 专题08 数列求和(奇偶项讨论求和)(典型例题+题型归类练)(解析版).docx VIP
- 2024年危险化学品典型事故案例反思.pptx VIP
- 重难点18 数列中的奇偶项、分段问题(解析版)(5大题型+最新模拟)-备战2025年高考数学重难点专题突破(新高考专用).docx VIP
- 危险化学品典型事故案例反思.pptx VIP
- 《赘婿》测试题带答案.pdf VIP
- 2024年危险化学品典型事故案例反思2025.1.3.pptx VIP
- 2023年软考软件评测师笔记整理.doc VIP
- IPC-A-610J-中文版 CN-2024 TOC 电子组件的可接受性.pdf VIP
文档评论(0)