nudtsong
驱动牛犊
驱动牛犊
  • 注册日期2004-11-16
  • 最后登录2011-03-02
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望268点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:2311回复:4

在passthru中截获、修改、发送TCP包的问题?

楼主#
更多 发布于:2007-07-12 17:17
第一步,在passthru的MPSendPackets函数中截获了要发送的TCP包,把它的内容复制到我自己的包中,然后发送出去,没有问题。
第二步,在前一步的基础上,修改新包中的若干字节(包长不变),但是不修改TCP校验和,将其发送出去,仍然没有问题。在目的机器上使用ethereal抓包,发现TCP校验和与原始TCP包中的校验和都不一样,有人说这是因为网卡有硬件计算校验和的功能(TCP checksum offload),所有原始TCP包中的校验和字段都是随机数。
第三步,在新包中增加一些字节,但是仍然不修改TCP校验和,只修改IP报头的长度和校验和,结果目的机器上显示TCP校验和错误!!!
疑问:
如果真的是硬件计算校验和,那么第三次为什么出错?
如果没有硬件计算机校验和,那么第二次问什么正确?而且为什么原始TCP包的校验和与目的机器上该包的校验和不一致,但是目的机器却认为校验和正确?
xcdyjx
驱动牛犊
驱动牛犊
  • 注册日期2004-11-14
  • 最后登录2011-11-14
  • 粉丝0
  • 关注0
  • 积分135分
  • 威望37点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-12 19:26
请问,您是如何截获到TCP包的?
我也在MPSendPackets中做截获工作,用NdisQueryBufferSave()之类的函数,包总的字节数总是小于ip报里描述的字节数。
temptemp
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2008-03-11
  • 粉丝0
  • 关注0
  • 积分111分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-16 10:50
关注中。。。
nudtsong
驱动牛犊
驱动牛犊
  • 注册日期2004-11-16
  • 最后登录2011-03-02
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望268点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-07-17 17:13
To xcdyjx:
我就是照搬了网上的代码,没有遇到你说的那种情况呀。
XO威士忌
驱动牛犊
驱动牛犊
  • 注册日期2007-07-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望153点
  • 贡献值1点
  • 好评度40点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-07-20 10:42
引用第0楼nudtsong于2007-07-12 17:17发表的 在passthru中截获、修改、发送TCP包的问题? :
第一步,在passthru的MPSendPackets函数中截获了要发送的TCP包,把它的内容复制到我自己的包中,然后发送出去,没有问题。
第二步,在前一步的基础上,修改新包中的若干字节(包长不变),但是不修改TCP校验和,将其发送出去,仍然没有问题。在目的机器上使用ethereal抓包,发现TCP校验和与原始TCP包中的校验和都不一样,有人说这是因为网卡有硬件计算校验和的功能(TCP checksum offload),所有原始TCP包中的校验和字段都是随机数。
第三步,在新包中增加一些字节,但是仍然不修改TCP校验和,只修改IP报头的长度和校验和,结果目的机器上显示TCP校验和错误!!!
疑问:
如果真的是硬件计算校验和,那么第三次为什么出错?
.......

LZ,你能说一下怎么修改包吗?不胜感激啊!
游客

返回顶部