lgr98
驱动牛犊
驱动牛犊
  • 注册日期2008-04-29
  • 最后登录2008-09-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:3950回复:11

修改passthru后总是出现dup ack和retransmission怎么办

楼主#
更多 发布于:2008-04-29 16:14
passthru来修改发送的数据包(修改了tcp数据包的内容和长度)后,就总收到dup ack并不断的发送retransmission。是不是要处理接受到该包的ack包呢?怎么处理呢?
在书上说ack有包头校验和等信息不知道如何获取如何处理?谢谢!!
zhanSL
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-07-13
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望273点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-04-29 17:15
应该是超时问题.不能随便修改tcp数据包的内容和长度.除非处理非常严谨.

QQ:773709292
lgr98
驱动牛犊
驱动牛犊
  • 注册日期2008-04-29
  • 最后登录2008-09-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-04-29 19:01
我感觉不是超时问题,因为如何我只改内容不增加长度的话就没有问题。而且发现紧接着发送包的seq要比收到的ack小!!
zhanSL
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-07-13
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望273点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-04-30 15:27
tcp是流协议,所以改变长度就不同:结果超时
lgr98
驱动牛犊
驱动牛犊
  • 注册日期2008-04-29
  • 最后登录2008-09-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-04-30 16:21
怎么讲呢?为什么该边了长度就超时呢?能详细讲一下吗?
我还发现一个关于tcp序号的问题
seq:dd 73 af ee            <-----------------------------------修改过的tcp包
ack:d0 24 84 eb
                                            seq:d0 24 84 eb
                                            ack:dd 73 b0 b6
seq:dd 73 b0 b5<---------------------------------为什么是b5而不是b6呢
ack:d0 24 84 eb
                                           seq:d0 24 85 1a
                                           ack:dd 73 b0 b6
lgr98
驱动牛犊
驱动牛犊
  • 注册日期2008-04-29
  • 最后登录2008-09-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-05-02 15:26
今天看了一下书发现原来tcp是按照8位组来编seq的,上面发了多少字节下一个seq就在原来的基础上加多少。比如说发的第一个包的seq为1数据长度为2则下一个包的seq就应该是1+2 = 3了。这样的话修改了一个tcp包,那为了能正常发送接收,其后的所有的发送包都要修改其seq,而所有的接收包都要修改其ack了呀。
这样一来就太麻烦了而且很容易出错的。该如何修改tcp的数据长度呢?求高手来支个招吧!!!
zhanSL
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-07-13
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望273点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-05-04 11:19
如Sonin专业防火墙(www.soninsoft.com)一样:状态跟踪吧。

QQ:773709292
lgr98
驱动牛犊
驱动牛犊
  • 注册日期2008-04-29
  • 最后登录2008-09-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-05-04 17:16
qq加你了可总碰不到一起!!郁闷!!!
havegone
驱动牛犊
驱动牛犊
  • 注册日期2008-01-17
  • 最后登录2012-03-13
  • 粉丝1
  • 关注1
  • 积分29分
  • 威望229点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-05-08 09:03
要是修改了数据或者是数据帧,那么你的checksum都是要重新计算的,要不然发出去的数据包会被丢弃,造成重传等问题。
lgr98
驱动牛犊
驱动牛犊
  • 注册日期2008-04-29
  • 最后登录2008-09-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-05-11 07:46
已经做好了,checksum和seq ackseq 都需要修改的。
现在唯一不足的就是接收包的时候修改seq ack做的太简单了(刚做ndis,很多东西都感觉没头没脑的):
1、只对ptreceive中接收整个包做了处理,没有对接收不完整的包做处理
2、没有对ptreceivepacket做处理。在ptreceivepacket不知道如何处理好,自己试了几次发现运行一会就蓝屏,而且出错是在mpreturnpacket函数中的释放函数,由于时间的原因就把该函数的注册取消掉了。
不知道这样做恰当吗?希望谁能够给俺提供一个更好的完整的例子让俺参考一下!
childman
驱动牛犊
驱动牛犊
  • 注册日期2007-12-25
  • 最后登录2008-05-11
  • 粉丝1
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-05-11 20:05
是啊,我也是在修改数据包的时候老是出现蓝屏问题,内存释放有问题,哪位高手方便提供一个修改数据包的程序给我研究研究啊。childman@163.com。谢谢
wukeyuan
驱动牛犊
驱动牛犊
  • 注册日期2013-07-18
  • 最后登录2014-05-01
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2013-07-19 08:51
我目前也遇到和楼主一样的问题,楼主这个问题怎么解决的,能否讲一下思路,谢谢了!
游客

返回顶部