关于TCP头校验和的问题?

gongyiling 2007-05-07 11:50:26
自己填写TCP头,如下:int tcpHeadLen=htons(20);
PTSDHDR pTsdHdr;
unsigned char psdHead[sizeof(tsdhdr)];
pTsdHdr=(tsdhdr*)psdHead;
pTsdHdr->PsdHdr.srcIP=ip.sourceIP;
pTsdHdr->PsdHdr.destIP=ip.destIP;
pTsdHdr->PsdHdr.null=0;
pTsdHdr->PsdHdr.proto=6;
pTsdHdr->PsdHdr.tcp_len=htons(sizeof(tcphdr));
memcpy(&pTsdHdr->TcpHdr,&tcp,sizeof(tcphdr));
tcp.check_sum=checkSum((u_short*)psdHead,sizeof(tsdhdr))
然后用Ethereal抓包分析。
ip的校验和没有问题。
tcp的校验和和ip的校验和计算用的是同一个函数checkSum
但tcp.check_sum总是错误,比正确的要大0x2e00(按Ethereal提示),不知怎么会这样呢?
...全文
430 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
husheng34 2007-05-08
  • 打赏
  • 举报
回复
自己找以前的文章,现在人就是懒
pig_2000 2007-05-08
  • 打赏
  • 举报
回复
tsdhdr结构怎么定义的?是不是字节对齐的问题?
贵子潘 2007-05-08
  • 打赏
  • 举报
回复
zhanghongyu1017() 说的对,udp和tcp计算校验和时都要加上伪首部
zhanghongyu1017 2007-05-08
  • 打赏
  • 举报
回复
计算TCP头部的校验和要加伪首部
IP校验和不用

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧