ftbk86
驱动牛犊
驱动牛犊
  • 注册日期2005-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望402点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:2690回复:10

奇怪问题:高手请进!

楼主#
更多 发布于:2010-02-24 15:21
我在
passthru 得到一TCP数据包 ETHeader+IPHeader+TCPHeader+数据(这里就假设是"Test")--->修改数据(把前面红色的数据"Test"改成"TestAAA")--->

然后在修改IPHEADER的total_len 、 IPHeader校验和 、TCPHeader校验和。然后将修改的数据发送出去!但是发送不成功!  

但是如果只将上面数据 Test 改成 Aest 或者 Dest 等类似(长度不变的) 然后在计算IPHeader的校验和和TCPHeader的校验和,然后再发送的话,却可以发送成功!...

各位看看,是什么原因?
ftbk86
驱动牛犊
驱动牛犊
  • 注册日期2005-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望402点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-02-26 11:16
但是我在局域网中调试后,抓包发现,可以发送出去,而且发送后,主机也能返回数据包,这些都已经抓到包了!...但是现在的问题是请求接收到主机返回的数据包,上层程序好像有什么验证,对这样增加长度的包,验证不通过似的!,所以它又要求重发。例如如下流程:

现在假设以HH机器上面程序 A为例:它发送数据包 TEST  ... NDIS 截获到了该包后,将 TEST数据加上验证 变成 TESTAAA 然后重新计算后向

机器KK发送 ,抓包发现机器KK能收到该包,而且也返回了数据包。通过在机器HH上面抓包发现,HH机器在NDIS层也收到了KK机器返回的数据包,

现在是机器HH上的程序A好像进行了什么校验。对NDIS层接收的数据包进行验证,不合格似的!。

因为这个是一个安全产品,对要求的东西有通用性,上面提到的程序A可能是任何一个程序!或者说 如上面的情况,有办法让程序A接收当前这个数据包么?
ftbk86
驱动牛犊
驱动牛犊
  • 注册日期2005-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望402点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-02-26 15:29
我这边测试,在ndis层已经接收到了数据!打印出来可以看得到数据!..但是上层程序好像不处理似的!...不知道什么原因!..(如果ndis能接收得到的话,是不是意味着seq没有问题了!接收数据目前做任何数据处理!)

但是没有好办法查出问题所在!

另外:如果对提交的数据 如果数据长度不变,或者修改后的数据长度比以前长度要小的话,数据都能正常接收,并且显示!就是数据长度增加的话,出现上面说的问题!
ftbk86
驱动牛犊
驱动牛犊
  • 注册日期2005-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望402点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-02-27 14:02
非常感谢版主!...已经确认是你说的SEQ 的问题!..

目前正在想办法解决呢!...请问下你是怎么解决这个问题的?另外比较是否是相关联的连接。有比较快捷的方法么?直接拿seq 和 ack 这个来判断的话,会存在判断有误吗?
是不是在接收的时候更改对应的seq的值,但是这样改的话,意味着就得改一大串哪!..有其他的办法么?
游客

返回顶部