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

奇怪问题:高手请进!

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

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

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

各位看看,是什么原因?
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2010-02-24 17:56
把tcp/ip协议吃透就好
走走看看开源好 Solaris vs Linux
blackbeast
驱动牛犊
驱动牛犊
  • 注册日期2006-09-26
  • 最后登录2010-02-28
  • 粉丝0
  • 关注0
  • 积分277分
  • 威望50点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-02-26 00:25
tcp协议是面向连接的协议,每个数据包都会包含其有效数据在当前流中的位置和长度,你改了这些数据  但是却没有改变tco包的seq和ack,所以发不出去
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接收当前这个数据包么?
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
地下室#
发布于:2010-02-26 13:59
1 检查发送的数据是否正确

2 检查返回的数据是否正确。 重点是seq。

3 接收过程是否进行了处理。如果处理了,依然好做好各项的后续工作
走走看看开源好 Solaris vs Linux
ftbk86
驱动牛犊
驱动牛犊
  • 注册日期2005-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望402点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-02-26 15:29
我这边测试,在ndis层已经接收到了数据!打印出来可以看得到数据!..但是上层程序好像不处理似的!...不知道什么原因!..(如果ndis能接收得到的话,是不是意味着seq没有问题了!接收数据目前做任何数据处理!)

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

另外:如果对提交的数据 如果数据长度不变,或者修改后的数据长度比以前长度要小的话,数据都能正常接收,并且显示!就是数据长度增加的话,出现上面说的问题!
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
6楼#
发布于:2010-02-26 19:58
自己写一个c/s程序,简单发送消息,如

client                         server

      -------------------->hello
     ok<-----------------

判断返回是否是OK。ndis接收到数据不代表seq正确。

我把数据都加了64个字节都没有问题,运行很好。肯定是你处理的不对。

你最好把抓报数据放上来,否则这么说是无法做判断的。把一个流程数据完整发上来才能分析。
走走看看开源好 Solaris vs Linux
ftbk86
驱动牛犊
驱动牛犊
  • 注册日期2005-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望402点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2010-02-27 14:02
非常感谢版主!...已经确认是你说的SEQ 的问题!..

目前正在想办法解决呢!...请问下你是怎么解决这个问题的?另外比较是否是相关联的连接。有比较快捷的方法么?直接拿seq 和 ack 这个来判断的话,会存在判断有误吗?
是不是在接收的时候更改对应的seq的值,但是这样改的话,意味着就得改一大串哪!..有其他的办法么?
wukeyuan
驱动牛犊
驱动牛犊
  • 注册日期2013-07-18
  • 最后登录2014-05-01
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2013-07-19 08:53
楼主这个问题解决了吗,我也遇到了,请教!!!
JenyCheng
驱动小牛
驱动小牛
  • 注册日期2005-07-26
  • 最后登录2021-01-24
  • 粉丝2
  • 关注0
  • 积分57分
  • 威望646点
  • 贡献值0点
  • 好评度119点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2013-12-25 15:47
seq 是个很头痛的事,要维护这个东西挺麻烦的。
afd.sys 中会做校验
JenyCheng
驱动小牛
驱动小牛
  • 注册日期2005-07-26
  • 最后登录2021-01-24
  • 粉丝2
  • 关注0
  • 积分57分
  • 威望646点
  • 贡献值0点
  • 好评度119点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2013-12-25 15:48
所以我尽量不碰它。
绕着走
游客

返回顶部